【EXCEL VBA】テキストファイルからの文字列の抽出サンプル

VBA・Officeカテゴリを表すパンダのイラスト VBA・Office

ある情報(テキスト)から項目を抽出するExcel VBAマクロのサンプルコードと実装のメモです。

やりたいことは大きく3つあり、それぞれの実装方法とトレース機能を盛り込んでいます。

■やりたいこと1:ファイルの入出力
あるテキストファイルからデータを読み込み、処理結果を別のファイルへ出力します。

■やりたいこと2:文字列の抽出
複数ある抽出パターン(先頭からの切り出し、特定キーワードに続く文字列の切り出しなど)に即して文字列を抽出します。

■やりたいこと3:トレース機能の充実
処理結果や進行状況がExcelシート上で視覚的に確認できるようにします。

サンプルコード

Option Explicit

Dim TraceLogCount As Integer

Private Sub CommandButton1_Click()
    Call StartExtract(TextBox1.Text, TextBox2.Text)
End Sub

Private Sub StartExtract(ByVal ReadFileName As String, ByVal WriteFileName As String)
On Error GoTo EXCEPTION

    Dim ReadFileNo As Integer
    Dim WriteFileNo As Integer
    Dim buf As String
    Dim ret As String
    
    'ファイル番号の取得
    ReadFileNo = FreeFile()
    'ファイルを読込モードで開く
    Open ReadFileName For Input As #ReadFileNo
    
    'ファイル番号の取得
    WriteFileNo = FreeFile()
    'ファイルを書込モードで開く
    Open WriteFileName For Output As #WriteFileNo
    
    Call TraceLogStart 'トレースログ開始
    '読取ファイルがEOFになるまでループ
    Do Until EOF(ReadFileNo)
        'ファイルから1行読み込む
        Line Input #ReadFileNo, buf
        '抽出できた場合のみ出力
        ret = ExtractString(buf)
        If Not (ret = "") Then
            Print #WriteFileNo, ret
        End If
        Call NextTrace
    Loop
    
  GoTo FINALLY

EXCEPTION:
  Call MsgBox(Err.Number & Err.Source & Err.Description)

FINALLY:
  Close #WriteFileNo
  Close #ReadFileNo

End Sub

'文字列抽出
Function ExtractString(ByRef buf As String) As String
On Error GoTo EXCEPTION
    Dim ret As String
    Dim tmp As String
    
    Call TraceLog(buf, 1)
    tmp = ExtractStringType1(buf)
    If tmp = "" Then
        GoTo FINALLY
    End If
    ret = tmp & ","
    
    tmp = ExtractStringType2(buf)
    If tmp = "" Then
        GoTo FINALLY
    End If
    ret = ret & tmp
    
    Call TraceLog(ret, 2)
    ExtractString = ret
    Exit Function
EXCEPTION:
    Call Err.Raise(Err.Number, "[ExtractString]" & Err.Source, Err.Description)
    
FINALLY:
    Call TraceLog(buf, 3)
    ExtractString = ""
End Function

'文字列抽出(先頭から8文字)
Function ExtractStringType1(ByRef buf As String) As String
On Error GoTo EXCEPTION
    ExtractStringType1 = Mid(buf, 1, 8)
    Exit Function
EXCEPTION:
    Call Err.Raise(Err.Number, "[ExtractStringType1]" & Err.Source, Err.Description)
End Function

'文字列抽出("CODE1="の次から8文字)
Function ExtractStringType2(ByRef buf As String) As String
On Error GoTo EXCEPTION
    Dim pos As Integer
    Const SearchChar As String = "CODE1="
    
    pos = InStr(1, buf, SearchChar, vbTextCompare)
    ExtractStringType2 = Mid(buf, pos + Len(SearchChar), 8)
    
    Exit Function
EXCEPTION:
    Call Err.Raise(Err.Number, "[ExtractStringType2]" & Err.Source, Err.Description)
End Function

Sub TraceLogStart()
    'ログ初期化
    Me.Cells.Clear
    '文字列型に設定
    Me.Cells.NumberFormatLocal = "@"
    'トレースログヘッダ生成
    Me.Cells(1, 1) = "インプット"
    Me.Cells(1, 2) = "抽出結果"
    Me.Cells(1, 3) = "抽出失敗"
    
    'カウンタ初期化
    TraceLogCount = 2
End Sub

Sub TraceLog(ByVal buf As String, logtype As Integer)
    Cells(TraceLogCount, logtype) = buf
End Sub

Sub NextTrace()
    TraceLogCount = TraceLogCount + 1
End Sub

■補足と解説:

1. ファイル入出力と例外処理
VBAの標準的な Open ~ Close までの処理を整理し、他の言語(JavaやC#)の try-finally 構文に似た構造でエラーハンドリングを行っています。

2. 抽出パターンの実装
サンプルでは以下の2種類を実装しています。
・1行のうち先頭から8文字を抽出
・「CODE1=」という文字列を検索し、その次から8文字を抽出
それらを組み合わせてカンマ区切りで結合します。

3. トレース機能
Excelシートの1行目から3行目をトレース結果の表示エリアとして利用し、インプット内容や抽出結果、抽出失敗のステータスを確認できるようにしています。

この記事の更新履歴

この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。

2026年9月26日

  • 削除リンク切れとなっていた外部ZIPファイルのダウンロードリンクを削除しました。
  • 変更本文中のHTMLタグ露出や表示崩れを修正し、VBAコードブロックを可読性の高い状態に再構成しました。

文書情報

記事タイトル
【EXCEL VBA】テキストファイルからの文字列の抽出サンプル
作成日
更新日
Source URL
https://papanda925.com/?p=456

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました