目次
はじめに
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 * 文字数
と記述する。 - 指定した文字数より短い値を入れると、自動でスペースが追加(パディング)される。
- 指定した文字数より長い値を入れると、自動で切り捨て(トランケーション)される。
この機能は、外部システムとの連携など、特定のフォーマットに厳密に従う必要がある場合に非常に役立ちます。通常の文字列変数との違いを理解し、適切に使い分けましょう。