ゼロ埋め

にメンテナンス済み

Excel VBA で数値データを文字列として扱う際、特定の桁数になるようにゼロ埋めを行いたい場合があります。 たとえば、4 桁になるよう 0 埋めして"0123","0042"のように表示する場合などがあります。

Excel VBA には、ゼロ埋めを行うためのさまざまな方法があります。このページでは、その中から代表的な 3 つの方法を紹介します。

Format関数を使用する方法

Format関数は、数値を指定した形式の文字列に変換する関数であり、Excel における「表示形式」の設定に似た形式指定ができます。 0 埋めを行う場合、以下のように使用します。

Format関数を使ったゼロ埋め
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関数を定義し、数値と桁数を引数に取り、ゼロ埋めされた文字列を返す関数を定義しています。

Format関数を使ったゼロ埋めを行う関数の定義
'*-------------------------------------------------------------
'* 指定した桁数になるようにゼロ埋めを行う
'*
'* @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 埋め処理を効率的に行うことができます。

状況に応じて最適な方法を選択してください。

#コマンドプロンプト #バッチファイル #引数 #コマンドライン #コマンド