Excel VBAで固定長テキストファイルを読み込む方法(OpenText + FieldInfoの使い方)

固定長形式のテキストファイル(いわゆる「位置決め形式」)は、各項目の桁数が決まっており、CSVのような区切り文字が存在しない構造です。Excelでこうしたデータを正確に読み込むには、VBAの Workbooks.OpenTextFieldInfo の設定が重要になります。

本記事では、固定長テキストファイルをExcelに自動で読み込むVBAマクロをご紹介いたします。


目次

固定長ファイルの読み込みに適したシナリオ

  • テキストファイルが「fixeddata.txt」という名前で保存されている
  • ファイルの各行は以下のように決まった位置にデータが配置されている
     例:氏名(6桁)、生年月日(10桁)、郵便番号(20桁)、金額(9桁)、識別コード(10桁)
  • これをExcelで整然と列ごとに取り込みたい

VBAコード:固定長テキストをExcelにインポート

Sub ImportFixedLengthTextFile()
    Dim txtFilePath As String
    txtFilePath = ThisWorkbook.Path & "\fixeddata.txt"
    
    Workbooks.OpenText _
        Filename:=txtFilePath, _
        DataType:=xlFixedWidth, _
        FieldInfo:=Array( _
            Array(0, xlTextFormat), _
            Array(6, xlYMDFormat), _
            Array(16, xlTextFormat), _
            Array(36, xlGeneralFormat), _
            Array(45, xlTextFormat))
End Sub

各パラメータの説明

  • Filename: 読み込み対象のファイルパスです。
  • DataType:=xlFixedWidth: 固定長ファイルであることを指定します。
  • FieldInfo: 各列の開始位置(0から始まるバイト位置)と、表示形式を指定する配列です。

以下は FieldInfo の解釈例です:

開始位置表示形式内容の意味(例)
0xlTextFormat氏名などの文字列
6xlYMDFormat生年月日(YYYYMMDD)
16xlTextFormat郵便番号やコードなど
36xlGeneralFormat金額や数値項目
45xlTextFormat区分や識別文字列

注意点

  • フィールド幅の境界は、バイト数ではなく文字数として解釈されます。
  • 読み込むファイルが全角文字やUTF-8エンコーディングの場合、正しく処理されないことがあります。
  • 生年月日を xlYMDFormat にすることで、日付として自動認識されます。

まとめ

VBAの Workbooks.OpenTextFieldInfo を活用すれば、Excel上で固定長テキストファイルを自動的に列ごとに整形して読み込むことが可能です。業務でよく使用される受発注データや金融関連のデータ処理にも応用できますので、ぜひお試しください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次