固定長形式のテキストファイル(いわゆる「位置決め形式」)は、各項目の桁数が決まっており、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上で固定長テキストファイルを自動的に列ごとに整形して読み込むことが可能です。業務でよく使用される受発注データや金融関連のデータ処理にも応用できますので、ぜひお試しください。
技術書の購入コストを抑えてスキルアップするなら

ここまで読んでいただきありがとうございます。最後に宣伝をさせてください。
プログラミングの技術書や参考書は、1冊3,000円〜5,000円するものも多く、出費がかさみがちです。Kindle Unlimitedであれば、月額980円で500万冊以上の書籍が読み放題となります。
気になる言語の入門書から、アルゴリズム、基本設計の専門書まで、手元のスマホやPCですぐに参照可能です。現在は「30日間の無料体験」や、対象者限定の「3か月499円プラン」なども実施されています。まずはご自身のアカウントでどのようなオファーが表示されるか確認してみてください。
