Excel VBAでセルの文字列を固定幅で分割する方法 ~TextToColumnsとFieldInfoで柔軟なテキスト整形を実現~

データ処理の現場では、CSVのような区切り文字形式ではなく、固定長(固定幅)で項目が並ぶテキストデータを扱うことがあります。このようなデータをExcelで整形するには、特定の文字数ごとにデータを分割する必要があります。

本記事では、Excel VBAの TextToColumns メソッドを活用し、セルの内容を指定文字数で分割する方法をご紹介いたします。


目次

使用例:固定長形式のデータを整形

たとえば、次のような1行のデータがA2セルにあるとします:

TaroYamada20250730Tokyo  A00123その他備考

このデータには区切り文字が存在しませんが、
以下のようなルールで意味を持たせることができます:

項目文字数内容例
氏名8TaroYamada
生年月日1020250730
住所10Tokyo
コード5A0012
備考残り3その他備考

VBAコード:文字数でセルを分割する

Sub SplitFixedWidthText()
    With ThisWorkbook.Worksheets(1).Range("B2").CurrentRegion
        .TextToColumns _
            DataType:=xlFixedWidth, _
            FieldInfo:=Array( _
                Array(0, xlTextFormat), _
                Array(8, xlYMDFormat), _
                Array(18, xlTextFormat), _
                Array(28, xlGeneralFormat), _
                Array(33, xlSkipColumn))
        .EntireColumn.AutoFit
    End With
End Sub

各パラメータの意味

FieldInfo指定内容開始位置書式内容
Array(0, 1)0文字目文字列氏名
Array(8, 5)8文字目日付形式生年月日
Array(18, 1)18文字目文字列住所
Array(28, 1)28文字目一般形式コード
Array(33, 9)33文字目読み飛ばし備考(出力しない)

実行結果イメージ

B列(氏名)C列(生年月日)D列(住所)E列(コード)
TaroYamada2025/07/30TokyoA0012

応用ポイント

  • FieldInfo により、開始位置とデータ型を柔軟に指定できるため、複雑な固定長データにも対応可能です。
  • 最後の列で xlSkipColumn を使えば、不要なデータを読み込まずに処理できます。
  • TextToColumns は、セルに直接貼り付けられたデータに対して即時に整形できるため、CSVやTXTファイルの取り込み後にも便利です。

注意点

  • 元データが全角文字(2バイト)を含む場合、文字数のカウントに注意が必要です(半角と全角が混在するデータでは正確な整形が難しいことがあります)。
  • TextToColumns の処理は元のセル内容を上書きしますので、必要に応じてバックアップを取っておくことを推奨します。

まとめ

固定長テキストデータは、CSVのように分かりやすくはありませんが、正確な文字数によって意味が定義されているという特性があります。Excel VBA の TextToColumnsFieldInfo を活用すれば、指定文字数ごとにデータを分割し、整った表形式に変換することが可能です。

データ整形や帳票処理を効率化したい方にとって、非常に有効なテクニックといえるでしょう。

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

この記事を書いた人

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

目次