【VBA】固定長の文字列を作成する方法 (String * Length) とその注意点

目次

はじめに

VBAで文字列を扱う際、通常は Dim myString As String のように宣言し、その中身の長さは可変です。しかし、古いシステムとのデータ連携や、特定のファイルフォーマットに合わせてデータを作成する際には、「商品コードは必ず8文字」「数量は必ず5文字」のように、文字数が固定された文字列を作成する必要があります。

VBAでは、変数を宣言する際に特別な書き方をすることで、このような「固定長文字列」を簡単に作成できます。

この記事では、固定長文字列の宣言方法と、値が指定した長さに満たない場合や超える場合にどうなるか、といった挙動について解説します。


固定長文字列を作成するVBAサンプルコード

このマクロは、それぞれ文字数が固定された3つの変数(社員ID: 4文字, 氏名: 10文字, 所属部署: 10文字)を作成し、それらを連結して固定長のレコード文字列を生成します。

完成コード

' 固定長の文字列を作成する
Sub CreateFixedLengthString()
    
    '--- 1. 固定長の文字列変数を宣言 ---
    ' String * (文字数) で宣言する
    Dim employeeID As String * 4
    Dim employeeName As String * 10
    Dim department As String * 10
    
    Dim fullRecord As String
    
    '--- 2. 変数に値を代入 ---
    employeeID = 25
    employeeName = "山田太郎"
    department = "営業部"
    
    '--- 3. 全ての変数を連結 ---
    fullRecord = employeeID & employeeName & department
    
    '--- 4. 結果を確認 ---
    ' Len関数で、各変数と連結後の全体の長さを調べる
    Debug.Print "ID       (" & Len(employeeID) & "文字): [" & employeeID & "]"
    Debug.Print "氏名     (" & Len(employeeName) & "文字): [" & employeeName & "]"
    Debug.Print "部署     (" & Len(department) & "文字): [" & department & "]"
    Debug.Print "連結後 (" & Len(fullRecord) & "文字): [" & fullRecord & "]"
    
    MsgBox "イミディエイトウィンドウに結果を出力しました。"

End Sub

実行結果

上記マクロを実行すると、VBEのイミディエイトウィンドウ(Ctrl+Gで表示)に以下のように出力されます。

ID       (4文字): [  25]
氏名     (10文字): [山田太郎      ]
部署     (10文字): [営業部        ]
連結後 (24文字): [  25山田太郎      営業部        ]

コードの解説

Dim employeeID As String * 4

これが固定長文字列を宣言する構文です。

  • String * (文字数): String の後ろにアスタリスク * と文字数を指定します。これにより、employeeID は常に4文字分の領域を確保する変数になります。

値の代入時の挙動

固定長文字列の変数は、代入される値の長さによって、以下のように振る舞います。

  • 指定した長さより短い値を代入した場合: employeeName = "山田太郎" のように、10文字より短い4文字を代入すると、右側に自動的に半角スペースが詰められ、全体の長さが10文字になるように調整されます(右パディング)。数値(employeeID = 25)を代入した場合は、左側にスペースが詰められます左パディング)。
  • 指定した長さより長い値を代入した場合: もし employeeName = "マリア・アンナ・シュミット" のような長い名前を代入しようとすると、宣言した10文字分に収まるように、右側が切り捨てられます"マリア・アンナ・シュミ" になります)。

まとめ

今回は、VBAで文字数が固定された「固定長文字列」を作成する方法を解説しました。

  • 変数の宣言時に Dim 変数名 As String * 文字数 と記述する。
  • 指定した文字数より短い値を入れると、自動でスペースが追加(パディング)される。
  • 指定した文字数より長い値を入れると、自動で切り捨て(トランケーション)される。

この機能は、外部システムとの連携など、特定のフォーマットに厳密に従う必要がある場合に非常に役立ちます。通常の文字列変数との違いを理解し、適切に使い分けましょう。

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

この記事を書いた人

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

目次