エクセルマクロ

とりあえずアップ。

Private sheet_name As String
Private i As Integer
Sub push()
Call get_sheet_name
'工数を書き込むシート名が今日の日付でない、かつ「退社」が押されていたら今日分を入力するシートを作り、作ったシートにデータを蓄積する
If sheet_name <> Date$ And Worksheets(sheet_name).Cells(Rows.Count, 2).End(xlUp).Value = "退社" Then
    Call create_new_sheet
    Call get_sheet_name
End If
Call get_final_row_number
Call reflect_to_row
'入力項目に不備がある時はなにも入力せずに終了
If Not IsEmpty(Worksheets(sheet_name).Range("B" & i).Value) Or Not IsEmpty(Worksheets(sheet_name).Range("C" & i).Value) Then
    Call get_time
End If
Worksheets("計測用FMT").Activate
End Sub
Sub get_sheet_name()
If ActiveWorkbook.Sheets.Count = 2 Then
    Call create_new_sheet
ElseIf ActiveWorkbook.Sheets.Count < 2 Then
    MsgBox "ファイルが壊れてるみたいだから、新しいファイルを用意してね。"
End If
sheet_name = Worksheets(3).Name
End Sub
Sub create_new_sheet()
'案件一覧シートの右側にデータ記録用の新しいシートを作る
Dim newsheet As Worksheet
Set newsheet = Worksheets.Add(after:=Worksheets("案件一覧"))
With newsheet
    .Name = Date$
End With
End Sub
Sub get_final_row_number()
'終端セルの行数を取得する
If IsEmpty(Worksheets(sheet_name).Range("A1").Value) Then
    i = 1
Else
    '終端セルの行数を取得したいシートをアクティブにしないと1004エラーが出るよ
    Worksheets(sheet_name).Activate
    '下記はオーバーフローになるからだめ
    'i = Worksheets(sheet_name).Range("A1").End(xlDown).Row
    Worksheets(sheet_name).Range("A" & Rows.Count).End(xlUp).Select
    i = ActiveCell.Row
    i = i + 1
End If
End Sub
Sub get_time()
'システム時刻を取得して入力
Worksheets(sheet_name).Range("A" & i).Value = Time
End Sub
Sub reflect_to_row()
'計測用FMT上でエラーを出すためにシートをアクティブにする
Worksheets("計測用FMT").Activate
'必須項目に記入漏れがないか確認
If IsEmpty(Worksheets("計測用FMT").Range("C3").Value) And IsEmpty(Worksheets("計測用FMT").Range("D3").Value) Then
    MsgBox "業務内容を入れてね"
ElseIf Not IsEmpty(Worksheets("計測用FMT").Range("C3").Value) And Not IsEmpty(Worksheets("計測用FMT").Range("D3").Value) Then
    MsgBox "直接と間接、両方入れちゃだめだよ"
ElseIf Not IsEmpty(Worksheets("計測用FMT").Range("D3").Value) And IsEmpty(Worksheets("計測用FMT").Range("E3").Value) Then
    MsgBox "案件名を入れてね"
Else
   '業務内容、案件名、詳細作業を行に反映
    Worksheets(sheet_name).Range("B" & i).Value = Worksheets("計測用FMT").Range("C3").Value
    Worksheets(sheet_name).Range("C" & i).Value = Worksheets("計測用FMT").Range("D3").Value
    Worksheets(sheet_name).Range("D" & i).Value = Worksheets("計測用FMT").Range("E3").Value
    Worksheets(sheet_name).Range("E" & i).Value = Worksheets("計測用FMT").Range("F3").Value
    
    'フォームの値を初期化
    Worksheets("計測用FMT").Range("C3:F3").ClearContents
End If
End Sub