テキストファイルから、最初に指定文字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」に保管されているすべてのテキストファイルを処理しています。

Follow me!