NonSoft

ファイル一覧にステップ数(行数)を表示するエクセル(VBA)


 ち〜な〜み〜に〜
エクセルに記述されたファイル一覧にステップ数(行数)を追加記述する
プログラム(VBA)のサンプルです。

ファイル一覧は「フォルダ内のファイル比較ツール」でエクセル出力した
ファイル一覧を想定していますが、他のフォーマットのファイル一覧でも
実行できるようにカスタマイズ可能です。

ファイルのステップ数(行数)を数えるにはFileSystemObjectのOpenTextFileを使用し、
TextStreamのLineで取得しています。ファイルの中の改行を数える方法では無いので、
処理的には簡潔になっています。内部的には改行を数えていると思いますが。。。

ただ、残念な事にFileSystemObjectではWindows標準のテキストファイルを対象として
いるため、改行コードがCRLFである必要があります。LFのみでも良いようです?。。。

エクセルファイルのイメージ
ファイルのステップ数(行数)表示


詳細は、以下のプログラム(VBA)を参照してください。


' ------------------------------------------------------------------------------ ' エクセルに記述されたファイル一覧にステップ数(行数)を記述するプログラム(VBA) ' (概要) ' フォルダ内のファイル比較ツールでエクセル出力したファイル一覧に各ファイルの ' ステップ数(行数)を書き込む。書き込む場所(セル)はファイルPATHの隣のセルです。 ' (方法) ' 対象のEXCELシートにボタンを貼り付け、ボタン処理VBA(CommandButton1_Click)を ' 以下のソースコードを記述します。 ' また、Microsoft Scripting Runtimeの参照設定(ツール→参照設定)が必要です。 ' (注意) ' Windows標準のテキストファイル(文字コード=SJIS、改行コード=CRLF)以外の場合は ' ステップ数(行数)が正しく無い事があります。 ' (備考) ' [ROOTパスが記入されているセル]と[FILEパスが記入されているカラムと先頭行]を ' 変更する事により、いろんなファイル一覧にステップ数を出力する事が出来ます。 ' ------------------------------------------------------------------------------ Private Sub CommandButton1_Click() ' ROOTパスが記入されているセル ' (ROOTパス記入例)D:\Temp\Folder01 Dim Path_Root_F As String: Path_Root_F = "A2" ' FILEパスが記入されているカラムと先頭行番号 ' (FILEパス記入例)Test\Abc.txt Dim Path_File_C As String: Path_File_C = "E" Dim Path_File_R As String: Path_File_R = "4" ' ルートPATH生成 Dim root As String: root = Range(Path_Root_F) If root <> "" Then If Right$(root, 1) <> "\" Then root = root & "\" ' Microsoft Scripting Runtimeの参照設定が必要です Dim fts As TextStream Dim fso As FileSystemObject Set fso = CreateObject("Scripting.FileSystemObject") ' 各ファイルのステップ数(行数)をファイルPATHの隣のセルに書き込む Dim i As Long: i = 1 Dim pcell As String Dim fpath As String Do ' ファイルPATHが記入されているかチェック ' ファイルPATHが記入されていなければ終了 pcell = Path_File_C & Path_File_R If Range(pcell) = "" Then Exit Do ' ファイルPATH(絶対PATH)生成 fpath = root & Range(pcell) If fso.FileExists(fpath) Then ' ファイルが有る ' ファイルの行数を数える ' 文字コードがSJIS、改行がCRLFのみ(それ以外は不安定) Dim lcnt As Long: lcnt = 0 If fso.GetFile(fpath).Size > 0 Then Set fts = fso.OpenTextFile(fpath, ForReading) fts.ReadAll lcnt = fts.Line fts.Close Set fts = Nothing End If ' デバッグ Debug.Print "f:" & i & ":" & fpath & "(" & lcnt & ")" ' ファイルの行数をファイルPATHの隣のセルに書き込む Range(Chr(Asc(Path_File_C) + 1) & Path_File_R) = lcnt Else ' ファイルが無い(それともフォルダ?) ' デバッグ Debug.Print "d:" & i & ":" & fpath ' ""をファイルPATHの隣のセルに書き込む Range(Chr(Asc(Path_File_C) + 1) & Path_File_R) = "" End If ' 次のファイルへ Path_File_R = Val(Path_File_R) + 1 i = i + 1 Loop While (True) ' Microsoft Scripting Runtime終了 Set fso = Nothing End Sub ' ------------------------------------------------------------------------------