エクセルに記述されたファイル一覧にステップ数(行数)を追加記述する
プログラム(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
' ------------------------------------------------------------------------------
|
|