ゼロ埋め
Excel VBA で数値データを文字列として扱う際、特定の桁数になるようにゼロ埋めを行いたい場合があります。
たとえば、4 桁になるよう 0 埋めして"0123"
,"0042"
のように表示する場合などがあります。
Excel VBA には、ゼロ埋めを行うためのさまざまな方法があります。このページでは、その中から代表的な 3 つの方法を紹介します。
Format
関数を使用する方法
Format
関数は、数値を指定した形式の文字列に変換する関数であり、Excel における「表示形式」の設定に似た形式指定ができます。
0 埋めを行う場合、以下のように使用します。
Dim number As Integer
Dim result As String
number = 42
result = Format(number, "0000")
Debug.Print result ' "0042"
Format
関数の第二引数に、必要な桁数分の 0 を指定することで、その桁数に合わせて 0 埋めされます。
Right
関数とString
関数を組み合わせる方法
この方法では、まず 0 を必要な桁数分生成し、その後ろに元の数値を結合します。
Dim number As Integer
Dim result As String
Dim digits As Integer
number = 42
digits = 4
result = Right(String(digits, "0") & number, digits)
Debug.Print result ' "0042"
String
関数は、指定した文字列を指定した回数繰り返して生成する関数です。
今回は 0 埋めするために、第一引数に桁数、第二引数に"0"
を指定しています。
Debug.Print String(4, "0") ' "0000"
これによって必要桁数分の"0"
を作成し、&
演算子で数値と結合します。
Debug.Print String(4, "0") & 42 ' "000042"
そのうえで、Right
関数で右側から必要な桁数を取り出します。
Debug.Print Right("000042", 4) ' "0042"
Application.WorksheetFunction.Text
関数を使用する方法
この方法は、Excel のワークシート関数である TEXT 関数を VBA から呼び出します。TEXT
関数に馴染みのある方は、この方法が使いやすいかもしれません。
前述したFormat
関数とほとんど同様の方法で 0 埋めを行うことができますが、指定するフォーマットの記法が言語設定により異なる場合があるため、注意が必要です。
Dim number As Integer
Dim result As String
number = 42
result = Application.WorksheetFunction.Text(number, "0000")
Debug.Print result ' "0042"
TEXT 関数の第二引数に、必要な桁数分の 0 を指定します。
汎用的な関数として定義する
これらの方法を汎用的な関数として定義することで、再利用性を高めることができます。
以下の例では、GetZeroPaddedValue
関数を定義し、数値と桁数を引数に取り、ゼロ埋めされた文字列を返す関数を定義しています。
'*-------------------------------------------------------------
'* 指定した桁数になるようにゼロ埋めを行う
'*
'* @param number ゼロ埋めを行う数値
'* @param digits 桁数
'* @return ゼロ埋めされた文字列
'*-------------------------------------------------------------
Public Function GetZeroPaddedValue(ByVal number As Integer, ByVal digits As Integer) As String
GetZeroPaddedValue = Format(number, String(digits, "0"))
End Function
Private Sub TestGetZeroPaddedValue()
Debug.Print GetZeroPaddedValue(42, 4) ' "0042"
End Sub
また、桁数を埋めるための値を引数に取ることで、任意の文字列で埋めることも可能です。
'*-------------------------------------------------------------
'* 指定した桁数になるように指定した文字で埋める
'*
'* @param number ゼロ埋めを行う数値
'* @param digits 桁数
'* @param fillChar 埋める文字
'* @return 指定した文字で埋められた文字列
'*-------------------------------------------------------------
Public Function GetPaddedValue(ByVal number As Integer, ByVal digits As Integer, Optional ByVal fillChar As String = "0") As String
GetPaddedValue = Format(number, String(digits, fillChar))
End Function
Private Sub TestGetPaddedValue()
Debug.Print GetPaddedValue(42, 4) ' "0042"
Debug.Print GetPaddedValue(42, 4, "X") ' "XX42"
End Sub
このように、関数を定義することで、ゼロ埋め処理を簡潔に行うことができます。
注意点
変数の型に注意する
これらの方法はすべて、結果を文字列として返します。数値として扱いたい場合は、必要に応じて数値型に変換してください。
フォーマットの指定に注意する
結果を Excel のセルに出力する場合は、セルのフォーマット設定によっては、数値として認識されないことがあります。その場合は、以下の方法が有効です。
Range("A1").NumberFormat = "@"
でセルのフォーマットを文字列に変更する。- 出力文字列の先頭に
'
を付けて文字列として認識させる。
負の数や小数点を含む場合の対応
負の数や小数点を含む数値を扱う場合は、それぞれの方法で適切に対応する必要があります。
まとめ
- Format 関数は最もシンプルで使いやすい方法
- Right 関数と String 関数の組み合わせは、より柔軟な制御が可能
- Application.WorksheetFunction.Text 関数は、ワークシート関数と同じ動作を期待する場合に便利
以上の方法を使いこなすことで、Excel VBA での 0 埋め処理を効率的に行うことができます。
状況に応じて最適な方法を選択してください。