データ処理の現場では、CSVのような区切り文字形式ではなく、固定長(固定幅)で項目が並ぶテキストデータを扱うことがあります。このようなデータをExcelで整形するには、特定の文字数ごとにデータを分割する必要があります。
本記事では、Excel VBAの TextToColumns
メソッドを活用し、セルの内容を指定文字数で分割する方法をご紹介いたします。
目次
使用例:固定長形式のデータを整形
たとえば、次のような1行のデータがA2セルにあるとします:
TaroYamada20250730Tokyo A00123その他備考
このデータには区切り文字が存在しませんが、
以下のようなルールで意味を持たせることができます:
項目 | 文字数 | 内容例 |
---|---|---|
氏名 | 8 | TaroYamada |
生年月日 | 10 | 20250730 |
住所 | 10 | Tokyo |
コード | 5 | A0012 |
備考 | 残り | 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列(コード) |
---|---|---|---|
TaroYamada | 2025/07/30 | Tokyo | A0012 |
応用ポイント
FieldInfo
により、開始位置とデータ型を柔軟に指定できるため、複雑な固定長データにも対応可能です。- 最後の列で
xlSkipColumn
を使えば、不要なデータを読み込まずに処理できます。 TextToColumns
は、セルに直接貼り付けられたデータに対して即時に整形できるため、CSVやTXTファイルの取り込み後にも便利です。
注意点
- 元データが全角文字(2バイト)を含む場合、文字数のカウントに注意が必要です(半角と全角が混在するデータでは正確な整形が難しいことがあります)。
TextToColumns
の処理は元のセル内容を上書きしますので、必要に応じてバックアップを取っておくことを推奨します。
まとめ
固定長テキストデータは、CSVのように分かりやすくはありませんが、正確な文字数によって意味が定義されているという特性があります。Excel VBA の TextToColumns
と FieldInfo
を活用すれば、指定文字数ごとにデータを分割し、整った表形式に変換することが可能です。
データ整形や帳票処理を効率化したい方にとって、非常に有効なテクニックといえるでしょう。