Vba数値文字列変換の落とし穴!Str関数の空白真相と最適解
実務で頻出する要件が、社員番号や商品コードを一定の長さに揃える「ゼロ埋め(パディング)」処理だ。数値の「5」を文字列の「00005」に整える際、VBA Format関数 ゼロ埋めは最も直感的かつ強力な武器となる。
Dim employeeId As Long Dim formattedCode As String employeeId = 42 ' 5桁固定でゼロ埋めを行う formattedCode = Format(employeeId, "00000") ' 結果は「00042」
ここで実務エンジニアが厳格に意識すべきは、書式指定文字列における「0」と「#」の相違だ。「0」は対応する桁に数値がない場合にゼロを表示するが、「#」は不要な先行ゼロを表示しない。VBA 桁数指定 フォーマットにおいてID生成を目的とする場合は、必ず「0」を用いたプレースホルダー設計を行わなければ、期待した固定長出力を得ることができない。
さらに、通貨表示や桁区切りカンマを付与する場合にもFormat関数は真価を発揮する。
Dim price As Currency price = 1250000 Debug.Print Format(price, "#,##0円") ' 結果は「1,250,000円」
ただし、Format関数はユーザーのWindows環境における「地域と言語の設定(ロケール)」の影響を受ける点には警戒が必要だ。特に小数点の記号がピリオド「.」ではなくカンマ「,」に設定されている欧州圏のPC環境で実行された場合、意図しない文字置換が発生することがある。グローバル拠点で共有される基幹マクロでは、ロケールに左右されない設計が求められる。