エクセルマクロ
とりあえずアップ。
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