LoginSignup
2
3

More than 5 years have passed since last update.

(弁護士向け)あるディレクトリ以下のファイルの更新日を一覧化し,Excelでフィルターをかけつつ数え上げる。

Last updated at Posted at 2018-01-10

労働時間の立証等で,PC内部のファイル更新日を一覧化して証拠化したい場面があろうかと思います。
ファイル一覧をうまいことExcelで読み込める形にしたあと,Excelでうまいこと数え上げると,有効な証拠になり得るかと思います。

ファイル名&更新日一覧の書き出し

全ファイル探索関数の定義

Pythonで再帰的にファイル・ディレクトリを探して出力する - Qiita
を参考に(というか関数を丸パクリ)して,find_all_files関数を作ります。
(丸パクリするだけなのでコード略)

ファイル名(パス付き),更新日,更新時刻 をタブ区切りで書き出す。

ファイル名にカンマが含まれている場合の処理が面倒なので,CSV(カンマ区切り)ではなくTSV(タブ区切り)で書き出しましょう。
もっとも,ファイルの書き出しのためわざわざTSVファイルの入出力を書くのは意外と手間がかかります。
(エクセルがShift-JISで読み込もうとするため。)
単純にprintで標準入出力に表示させて,適当なエディタ(例:CotEditor)にコピペして,文字コードをShift-JISにして拡張子.tsvで保存するのが吉。

sample.py
import os, time
 # 前記の関数パクリ部分略
dateformat = '%Y-%m-%d\t%H:%M:%S'
for file in find_all_files("./"): # パクったyieldで回す
    print(os.path.relpath(file) +"\t"+ time.strftime(dateFormat, time.localtime(os.path.getmtime(file))))

Excelで開いて色々付け足す。

上記の過程を経て作成された.tsvファイルをExcelで開きます。
【ファイルパス,日付,時刻】の3列からなるファイルになっています。

曜日列を付け足す

好きな行(私は時刻の右)に曜日列を作ります。
=TEXT(B1,"AAA")で,日付データから曜日文字列を出すようにします。
日付そのものではなく曜日文字情報にすることで,曜日でのフィルター(例えば休日労働の抽出)ができるようになります。

見出し行を付け足す

見出し文字列はお好みで。私の場合,「ファイル名(パス),最終更新日,最終更新時刻,曜日」。

フィルター済みファイル総数を表示する行を追加する。

先頭に空行を挿入し,=SUBTOTAL(3,A3:A●)(※●は最終行)なセルを作ります。

日付の個数を数える。

2行目に空行を挿入する(表示用)

あとで使います。

ダミー列を2列作る。

右端(※印刷範囲指定で容易に除外できるため)にdummy1,dummy2の列を作ります。
dummy1列(手順通りならE列)は,「フィルターされた時は空欄」のセルにします。
=IF(SUBTOTAL(3,A4), B4, "") ※既に総数表示行・日付数表示行・見出し行を追加したので,4行目開始。

dummy2列(手順通りならF列)は,「同じ行のdummy1が存在するものであって,日付が同じものの逆数」のセルにします。これにより,同じ日付のF列を足し上げると1になることから,F列を足し上げることで日付の個数をカウントできるわけですね。
=1/COUNTIF(E$4:E$●, E4)(※●は最終行)

dummy2列を足し上げて表示する

既に作成済みの2行目の任意のセルに,=SUBTOTAL(9, $F$4:$F$●)(※●は最終行)を入力。

あとは印刷範囲やフィルターや印刷タイトル行等をお好みで設定。
Enjoy!
スクリーンショット 2018-01-10 14.03.34.png

その他の参考

-エクセルでフィルターをかけたセルを重複を除いて都度計算でカウントする方法 - Qiita

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3