Excel VBAで固定長テキストファイルを自動変換せずに読み込む方法 ~識別コード「A01」や区画番号「B-01」などの値を正しく扱うには~

Excelは便利な反面、外部ファイルを開いた際にデータを自動で数値や日付に変換してしまうという厄介な特性があります。たとえば、識別コード「A01」は「A1」に、区画番号「B-01」は「B/1」(日付)として扱われてしまうことがあります。

本記事では、VBAを使って固定長テキストファイルを読み込み、値を一切変換せずにそのままExcelに取り込む方法をご紹介いたします。


目次

読み込み対象のファイル構成

以下のような固定長テキストファイル(例:autoconvertdata.txt)を読み込むと想定します。各データは桁位置によって区切られています。

A01   B-01  20250725  PROD-XYZ          12345  **不要列**
A02 B-02 20250726 ITEM-123 98765 **不要列**

このようなファイルを、識別コードや区画番号を変換せずにそのままの値として読み込むのが目的です。


VBAコード:固定長データを文字列として正確に読み込む

Sub ImportFixedFileWithoutConversion()
    Dim filePath As String
    filePath = ThisWorkbook.Path & "\autoconvertdata.txt"
    
    Workbooks.OpenText _
        Filename:=filePath, _
        DataType:=xlFixedWidth, _
        FieldInfo:=Array( _
            Array(0, xlTextFormat), _
            Array(6, xlTextFormat), _
            Array(10, xlYMDFormat), _
            Array(20, xlTextFormat), _
            Array(40, xlGeneralFormat), _
            Array(49, xlSkipColumn))
    
    ActiveSheet.Range("A1").CurrentRegion.EntireColumn.AutoFit
End Sub

各パラメータの意味

FieldInfoで指定している内容

開始位置表示形式例(変換せずに保持される値)備考
0xlTextFormatA01識別コード、先頭ゼロあり
6xlTextFormatB-01区画番号など
10xlYMDFormat20250725日付列として扱いたい
20xlTextFormatPROD-XYZ商品コードなど
40xlGeneralFormat12345数値として扱いたい項目
49xlSkipColumn不要な列は読み飛ばす

実行結果イメージ(Excel)

識別コード区画番号日付商品コード金額
A01B-012025/07/25PROD-XYZ12345
A02B-022025/07/26ITEM-12398765

注意点

  • xlTextFormat を使うことで、Excelによる自動変換(数値化・日付化)を防止できます。
  • xlYMDFormat を使うと、日付列のみ適切に認識されます(YYYYMMDD形式)。
  • 読み飛ばしたい列は xlSkipColumn を指定することで、取り込まずに無視できます。
  • 全角文字やUTF-8エンコードには対応していない場合がありますので、その際は別の処理が必要です。

応用のヒント

  • CSVファイルでも同様の問題が発生するため、Workbooks.OpenText はCSV読み込みにも応用できます。
  • 取込後にフォントや罫線を整える処理を追加すれば、そのまま報告資料として利用可能です。
  • FieldInfo の配列は柔軟に変更できますので、実務のフォーマットに合わせて調整してください。

まとめ

Excelで固定長ファイルを読み込む際、「A01」や「B-01」などの重要な文字列が勝手に変換されてしまうのを防ぐには、VBAによる制御が不可欠です。本記事で紹介した FieldInfo の使い方をマスターすれば、意図しない変換を防ぎ、正確なデータ処理が可能になります。

Excel業務で「開いたら値が変わっていた」というお悩みをお持ちの方は、ぜひお試しください。

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

この記事を書いた人

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

目次