固定長形式のテキストファイル(いわゆる「位置決め形式」)は、各項目の桁数が決まっており、CSVのような区切り文字が存在しない構造です。Excelでこうしたデータを正確に読み込むには、VBAの Workbooks.OpenText
と FieldInfo
の設定が重要になります。
本記事では、固定長テキストファイルを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
の解釈例です:
開始位置 | 表示形式 | 内容の意味(例) |
---|---|---|
0 | xlTextFormat | 氏名などの文字列 |
6 | xlYMDFormat | 生年月日(YYYYMMDD) |
16 | xlTextFormat | 郵便番号やコードなど |
36 | xlGeneralFormat | 金額や数値項目 |
45 | xlTextFormat | 区分や識別文字列 |
注意点
- フィールド幅の境界は、バイト数ではなく文字数として解釈されます。
- 読み込むファイルが全角文字やUTF-8エンコーディングの場合、正しく処理されないことがあります。
- 生年月日を
xlYMDFormat
にすることで、日付として自動認識されます。
まとめ
VBAの Workbooks.OpenText
と FieldInfo
を活用すれば、Excel上で固定長テキストファイルを自動的に列ごとに整形して読み込むことが可能です。業務でよく使用される受発注データや金融関連のデータ処理にも応用できますので、ぜひお試しください。