作業ログの集計

せっかく作業ログを逐一収集しているのに、集計方法がないのでは意味がないのではないか、と考え、集計方法を考えてみました。


集計を行う前に、id:todogzm:20070429:1177858611 のスクリプトのうち、メイン文とWriteToFileを書き換えます。ダイアログが出ているときにEscキーを押すと空の内容が書き出されるのを防ぐ修正と、作業ログの出力方法の日時と作業内容の区切り文字をTabにする修正です。
出力フォーマットが変わったので、今までの作業ログもスペース区切りからTab区切りに置換してください。

Dim text
text = InputBox("Add to "&filename&":", "Quick Logger", prevtext)
If Not IsEmpty(text) Then
WriteToFile(text)
WritePrevFile(text)
End If

Sub WriteToFile(text)
Dim fso
Dim textFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set textFile = fso.OpenTextFile(filename, 8, True)
textFile.WriteLine Now & vbTab & text
textFile.Close
End Sub


続いて、Excelを使って作業内容を集計します。Excel中級以上の技術だと俺が勝手に思っているピボットテーブルを使えば、作業ログの修正も簡単。
まずはExcelにタブ区切りのテキストとして、作業ログを読み込ませます。その際には、ちゃんと日時と作業内容がタブで区切られるように読み込ませてください。読み込ませると、A列には日時、B列には作業内容が入るかと思います。
続いて、C列には作業時間を計算させます。1行上の作業時間との差分を計算する程度でいいかと思います。D列は、日時から「日にち」だけを取り出すように、day関数を使用します。
ピボットテーブルを使う上で、列名が必要になりますので、A1, B1, C1, D1にそれぞれ名称を挿入します。


ピボットテーブルは、メニューの「データ」→「ピボットテーブルとピボットグラフ レポート...」を選択してください。ウィザードが始まります。1ページ目は「Excelのリスト/データベース」を選択してください。2ページ目は使用する範囲なので、A列からD列までを範囲としてください。何行目から何行目まで、というのは、過去の作業ログの場合は明示的に指定したほうが良いです。3ページ目は、ピボットテーブルの出力先とレイアウトを指定できます。これらは後からでも変更可能ですが、とりあえず既存のページに、レイアウト指定なしで出力します。これでピボットテーブルの前準備は完了。



で、ピボットテーブルで何を分析させるかと言うと、私の場合は何に何時間費やしたかを分析したいので、縦軸に作業ログ、横軸に日付を入れ、データには所要時間の合計を入れるようにしています。データ部分は、デフォルトではデータの個数を表示するようになっているので、「フィールドの設定」を用いて、データの合計の算出、そして表示方法はhh:mmで表示すればよいでしょう。

完成図が以下のような感じ。

ピボットグラフを使えば可視化できます。

ピボットテーブルを操作すれば、1日に行った作業内容と時間を表示する、なんてのも簡単に行えます。あとはピボットテーブルを駆使してください。

VBScriptからExcelを操作する案も考えたのですが、それはまだ実施していません。とりあえずこのくらいの分析機能があればいいかと考えています。