和風スパゲティのレシピ

日本語でコーディングするExcelVBA

数値の桁数を揃える(0埋めする) - Format関数

数値を0埋めして桁数をそろえるコードを解説します。
数値の0埋めにはFormat関数を利用します。

0埋めした数値を変数に格納するコード

数値を0埋めして桁数をそろえるには、
Format関数を利用した以下のコードを実行します。

Dim 数値 As Long
数値 = 100

Dim 桁揃え数値 As String
桁揃え数値 = Format(数値, "00000")

MsgBox 桁揃え数値 ' 00100が表示されます。

 
Format関数はシート関数「TEXT」とほぼ同じ動きをする関数で、
書式に「"00000"」を適用すれば5桁の数値を文字列として取得できます。


注意点として、桁揃え後の値を格納する変数はString型でなくてはいけません。

Dim 桁揃え数値 As Long ' ← これではダメ

Long型を使うこのコードでは「00100」が再び「100」に変換されてしまい、
桁揃え数値の中見も100のままになるため注意してください。


また、こちらのコードは6桁以上を渡すと6桁の数値を取得してしまいます。

6桁以上の数値をどう扱うかはやりたい処理によると思いますので、
適宜分岐を用意して対応してください。

If 数値 >= 100000 Then
    ~~ここに6桁を超えたときの対応
End If

 

0埋めした数値をセルに出力するコード

上記のコードを使えば数値を0埋めできるのですが、
これをただセルに出力するだけだと、再び0が消えて元の数値に戻ってしまいます。

これを防ぐには、以下のいずれかの方法を実行します。

  • セルの書式を「文字列」にしてから出力する
  • 値の先頭にシングルクォーテーション「'」を付けてから出力する

セルの書式を「文字列」にしてから出力する

例えばA列の数値を0埋めしたものをB列に出力する場合は、
以下のコードを実行します。

Dim ws処理シート As Worksheet
Set ws処理シート = Worksheets("○○")

' B列の書式を文字列に
ws処理シート.Columns("B").NumberFormatLocal = "@"

' B列にA列を0埋めした数値を出力
Dim R As Long
For R = 2 To ws処理シート.Cells(ws処理シート.Rows.Count, 1).End(xlUp).Row
    
    ws処理シート.Cells(R, 2) = Format(ws処理シート.Cells(R, 1), "00000")
        
Next

セルの表示書式を文字列にする場合は、
Rangeオブジェクトの.NumberFormatLocalプロパティを"@"にします。

セルの書式設定は列ごとにに統一されていた方が良いので、
VBAでも1セルずつではなく列ごと設定するのがおすすめです。

値の先頭にシングルクォーテーション「'」を付けてから出力する

続いてシングルクォーテーションを使用したコードがこちらです。

Dim ws処理シート As Worksheet
Set ws処理シート = Worksheets("○○")

' B列にA列を0埋めした数値を出力
Dim R As Long
For R = 2 To ws処理シート.Cells(ws処理シート.Rows.Count, 1).End(xlUp).Row
    
    ws処理シート.Cells(R, 2) = "'" & Format(ws処理シート.Cells(R, 1), "00000")
        
Next

上記の通り、単に"'"を&で頭に付けただけのコードで実行できます。


どちらも一長一短がありますので、状況に応じて使い分けて下さい。