作業ログ(VBA研究会議事録_02)

VBA研究会で論じられた内容を記録する議事録の2本目です。1本目の議事録はコチラになります。

hirocom777.hatenadiary.org

今回は作業ログです。ツールを使って作業をした実績を記録できるようにしておくと、後々いろいろなことに役立ちます。標準化しておくと便利ですよね!!

作業ログを作る

それでは今回のお題です。

作業記録を残すCSVファイルを作るプロシージャを作ってください。ファイル名は「作業ログ.csv」とします。先頭列として「記録日時,データ1,データ2,データ3
」が記述されています。データ1~3を引数として呼び出すと、呼び出した日時とともにデータ1~3が記録されます。

作業ログに記録する作業は作業完了ごとに実行される定型作業です。モジュール化してまとめておくといいですね。

テキストファイルにアクセスする

CSVファイルはテキストファイルです。ここでテキストファイルのアクセス方法の概要についてまとめておきましょう。以下のような流れになります。

ファイルを開く

最初にOpenステートメントでファイルを開きます。

Open ファイル名 For モード As 番号

シンプルにテキストファイルを読み書きする場合は、モードをInput(読込み)、Output(書込み)、Append(追記)のいずれかを選択します。番号は1~511までの整数を指定します。すでにほかのファイルを開くために割り当てられた番号は使用できません。使用可能な番号はFreeFile関数で取得できます。 Inputを指定した場合、指定したファイルがないとエラーとなります。OutputまたはAppendを指定した場合はファイルがないと新規にファイルを作成します。

読み書きする

ファイルを読み込む場合にはInput #ステートメントまたは、Line Input #ステートメントを使用します。input #ステートメントは、カンマ区切りでデータを分割し、 ダブルクォーテーションを除外して読み込みます。対してLine Input #ステートメントは、カンマやダブルクォーテーションをそのまま読み込みます。

ファイルを書き込む場合にはWrite #ステートメントまたは、Print #ステートメントを使用します。いずれも書き込む内容をカンマ区切りのリストで指定できます。 Print #ステートメントリストの内容をそのまま書き込んでいきます。Write #ステートメントは、ファイルへの書き込み時にデータリスト間にカンマを挿入します。 input #ステートメントで読み込まれるデータは、Write #ステートメントで書き込むと整合を取りやすいでね。

いずれも「#」の後には、Openステートメントで指定した番号が記述されます。

ファイルを閉じる

読み書きが完了したら、ファイルを閉じます。CloseステートメントはOpenステートメントで開いたファイルをクローズします。「Close #番号」の様に指定すると、指定した番号で開いたファイルを閉じます。番号を省略して「Close」のみの記述をすると現在開いているファイルをすべて閉じます。

作業ログを作る手順

以上を踏まえて整理すると、作業ログを作成する手順は以下の様になります。

  1. Openステートメントを使って、Append(追記)モードでファイルを開く
  2. Print #ステートメントを使ってカンマ区切りの文字列で記録を書込み
  3. Closeステートメントでファイルを閉じる

作業ログは作業が発生するごとにデータを追記してきます。したがってAppendモードを使用して書き込むことになります。また、ダブルクォーテーションやカンマ区切りなどの設定をコチラで制御したいので、Print #ステートメントを使っています。

実際のコード

実際のコードです。「VBA_002」が呼び出されるごとにSheet1のC2~C4の値を「作業ログ.csv」に追記します。

Public Sub VBA_002()
  
  'データを取り込みます
  With Sheet1
    Dim recordData As String
    recordData = .Range("C2").Value & _
           "," & .Range("C3").Value & _
           "," & .Range("C4").Value
  End With
  
  'テータを記録します
  Call AppendData(ThisWorkbook.Path & "\作業ログ.ini", recordData)
End Sub

'CSVファイルにデータを追記します。
Private Sub AppendData(ByVal fileName As String, ByVal recordData As String)
  
  '記録するファイルを開きます。
  Dim fileNumber As Long
  fileNumber = FreeFile
  Open fileName For Append As fileNumber

  'データを記録します。
  recordData = Format$(Now, "YYYY/MM/DD hh:mm:ss") & "," & recordData
  Print #fileNumber, recordData
  
  'ファイルを閉じます
  Close fileNumber
End Sub

次回も作業ログ

いかがでしょうか。作業ログを記録する方法を明確にしておくとツールを作るときに便利ですね。ところで実際の作業ログは記録する期間が複数のファイルに分けることが多いです。また、記録するアイテム数もまちまちですね。ここ等へんも自由に設定できるとさらに融通がききますね。

hirocom777.hatenadiary.org

VBA研究会議事録まとめはこちらから