テキストファイルから、最初に指定文字1が登場した行から一番最初に登場する指定文字2の行までを抽出する
以下のサンプルマクロの紹介です。
- 指定されたフォルダに保管されているテキストファイルをすべて処理
- 最初に指定文字1が登場した行から一番最初に登場する指定文字2の行までを抽出
- 保存するファイル名は、元のファイル名の頭に、日付・時刻(yyyymmddhhmmss)を追加
' フォルダに保管されているテキストファイルをすべて処理
' 最初に指定文字1が登場した行から一番最初に登場する指定文字2の行までを抽出する
' 保存するファイル名は、元のファイル名の頭に、日付・時刻(yyyymmddhhmmss)を追加
Sub EditTextFilesInFolder()
Dim folderPath As String
Dim startMarker As String
Dim endMarker As String
Dim fileName As String
' 必要な情報を設定
folderPath = "C:\TEMP"
startMarker = "指定文字1"
endMarker = "指定文字2"
' フォルダ内のテキストファイルを取得
fileName = Dir(folderPath & "\*.txt")
' フォルダ内にファイルが存在しない場合はエラーメッセージを表示
If fileName = "" Then
MsgBox "指定したフォルダ内にテキストファイルが見つかりませんでした。"
Exit Sub
End If
Dim FilePath As String
' フォルダ内のすべてのファイルに対して実行
Do While fileName <> ""
' ファイルのフルパスを作成
FilePath = folderPath & "\" & fileName
' ファイルを開く
Open FilePath For Input As #1
' 変数の初期化
Dim startFlag As Boolean: startFlag = False
Dim endFlag As Boolean: endFlag = False
Dim fileContent As String: fileContent = ""
Dim err As Boolean: err = False
Dim lineText As String
' ファイルの内容を読み込み、編集する
Do Until EOF(1)
Line Input #1, lineText
' 指定文字1が含まれている行であればスタートフラグを立てる
If InStr(lineText, startMarker) > 0 Then
startFlag = True
End If
'スタートフラグが立っている場合は内容を追加する
If startFlag Then
fileContent = fileContent & lineText & vbCrLf
End If
'指定文字2が含まれている行であればエンドフラグを立てて終了
If InStr(lineText, endMarker) > 0 Then
endFlag = True
Exit Do
End If
'ファイルの最終行まで指定文字が含まれていない場合はエラーメッセージを表示
If EOF(1) Then
MsgBox "ファイル " & fileName & " で指定文字が見つかりませんでした。"
err = True
Exit Do
End If
Loop
'ファイルを閉じる
Close #1
'編集した内容をファイルに書き込む(元の内容は上書き)
If Not err Then
FilePath = folderPath & "\" & Format(Now, "yyyymmddhhmmss") & fileName
Open FilePath For Output As #1
Print #1, fileContent
Close #1
End If
'次のファイルを取得
fileName = Dir
Loop
'処理完了のメッセージを表示
MsgBox "完了"
End Sub
この例では、「C:\TEMP」に保管されているすべてのテキストファイルを処理しています。