「excel マクロ ゼロ埋め 固定桁」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
数字を桁の揃った固定長にするために、「0」を先頭につけるゼロ埋め(ゼロパディング)を行う、Excel VBA(Visual Basic for Applications)のコードを探している方による検索です。
「マクロ if 1桁のときは先頭に0をつける」
といった検索もありましたので、ここでは先頭に「0」をつけて2桁に揃える簡単なマクロをご紹介しておきます。
Format関数を使ってゼロ埋めをするサンプルマクロ
VBAのFormat関数を使った以下のようなマクロで、A1:A5セルに入力されたデータがゼロ埋めされ2桁の文字列に揃えられます。
Dim i As Long Range("A1", "A5").NumberFormatLocal = "@"
For i = 1 To 5
With Cells(i, "A")
.Value = Format(.Value, "00")
End With
Next i
End Sub
ループ処理に入る前に、A1:A5セルに文字列書式を設定します。
Range("A1", "A5").NumberFormatLocal = "@"
手作業でデータ入力するときにも、頭の「0」が消えないようにするには、文字列として入力する必要があります。VBAでも同じことです。
RangeオブジェクトのNumberFormatLocalプロパティに設定している「@」は、[セルの書式設定]ダイアログ-[表示形式]タブで入力する「@」です。
書式設定を行ってから、VBAのFormat関数を使って、ゼロ埋めを行っています。
For i = 1 To 5
With Cells(i, "A")
.Value = Format(.Value, "00")
不要なIf文はなくしましょう
「マクロ if 1桁のときは先頭に0をつける」
という検索をなさった方向けに、「if 1桁のときは先頭に0をつける」という考えをそのままコードにした、不具合の出るマクロも参考までにご紹介しておきます。
Dim i As Long Range("A1", "A5").NumberFormatLocal = "@"
For i = 1 To 5
With Cells(i, "A")
If .Value < 10 Then
.Value = 0 & .Value
End If
End With
Next i
End Sub
文字書式を設定したあとに、For~Nextループを回すという構造は、先にご紹介したFormat関数を使ったマクロと同じです。
違いは「if 1桁のときは」という条件と、
If .Value < 10 Then
「先頭に0をつける」という処理です。
.Value = 0 & .Value
一見このマクロでも上手く動くように思えますが、既にゼロ埋めが行われた「01」「02」のようなデータの存在する状態で、このマクロを実行してみてください。
既にゼロ埋めされたデータに、更に「0」が追加されてしまうという結果になります。
プログラミングに慣れていない方の場合、あってもなくても関係ない部分にまで、条件分岐を入れてしまうことがよくあります。
そのような条件分岐はバグの温床になることが多いものです。
このマクロはそんな例です。
条件分岐を思いついたときに、その条件分岐は本当に必要なのか、考え直してみましょう。
Home » Excel VBA Rangeオブジェクト » 表示形式 » ゼロ埋めを行うExcelマクロ