Fragrammer’s Blog

破片プログラマーから脱する

業務レポートのTask部分のみ自動生成(VBA)

作業時間を記録しているExcelから、業務レポートの一部を自動生成。
・コメント欄
・他の項目もテンプレ部分も出力させる
辺りの改良の余地あり。

※作業時間を記録してるExcelは以下にアップロード
業務レポート用.xlsm - Google ドライブ

Option Base 1   ' 配列を1から
Const MaxTaskNum As Long = 42

Sub CreateTask()
    Dim i As Long
    Dim TaskListCell As Variant
    Dim TempFileNamePath As String
    Dim TaskList(MaxTaskNum, 3) As String
    
    Dim Str1, Str2, Str3 As String
    
    ' 出力ファイルパス
    TempFileNamePath = "C:\work\VBA\業務レポート作成\test.txt"
    Sheets("タスク種類").Activate
    ' タスク一覧取得
    TaskListCell = Range("A2").Resize(MaxTaskNum, 2)
    ' 出力ファイルを作成
    Set OutPutFileObj = CreateObject("Scripting.FileSystemObject"). _
                        CreateTextFile(TempFileNamePath)
    ' 出力ループ
    For i = 1 To MaxTaskNum
        ' Task名が無い場合は飛ばす
        If TaskListCell(i, 2) = "" Then GoTo Next_i
        ' Task名がある場合はTaskのセット作成
        Str1 = "・タスク名:" & TaskListCell(i, 2)
        Str2 = " 作業時間:" & TaskListCell(i, 1)
        Str3 = " コメント:" ' 未実装
        OutPutFileObj.WriteLine (Str1)
        OutPutFileObj.WriteLine (Str2)
        OutPutFileObj.WriteLine (Str3)
Next_i:
    Next i
    ' 後始末
    OutPutFileObj.Close
End Sub

出力結果

・タスク名:朝会
 作業時間:0.25
 コメント:
・タスク名:残業申請
 作業時間:0.25
 コメント:
・タスク名:TaskA
 作業時間:2.75
 コメント:
・タスク名:TaskB
 作業時間:2
 コメント:
・タスク名:TaskC
 作業時間:0.5
 コメント:

詰まった点としては、
出力結果が一部「0.249999999999999」のようになった。

Excel側でROUNDUPを使って小数点第3位まで丸めて解決。