Home » ExcelVBA Rangeオブジェクト » 表示形式 » ゼロ埋めを行うExcelマクロ

ゼロ埋めを行うExcelマクロ

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「excel マクロ ゼロ埋め 固定桁」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

数字を桁の揃った固定長にするために、「0」を先頭につけるゼロ埋め(ゼロパディング)を行う、Excel VBA(Visual Basic for Applications)のコードを探している方による検索です。

「マクロ if 1桁のときは先頭に0をつける」
といった検索もありましたので、ここでは先頭に「0」をつけて2桁に揃える簡単なマクロをご紹介しておきます。

[スポンサードリンク]

Format関数を使ってゼロ埋めをするサンプルマクロ

VBAのFormat関数を使った以下のようなマクロで、A1:A5セルに入力されたデータがゼロ埋めされ2桁の文字列に揃えられます。


Sub A列の数字を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をつける」という考えをそのままコードにした、不具合の出るマクロも参考までにご紹介しておきます。


Sub A列の1桁数字をゼロ埋めする_不具合あり()
 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 » ExcelVBA Rangeオブジェクト » 表示形式 » ゼロ埋めを行うExcelマクロ

TrackBack:0

TrackBack URL

Home » ExcelVBA Rangeオブジェクト » 表示形式 » ゼロ埋めを行うExcelマクロ

Copyright © インストラクターのネタ帳 All Rights Reserved.

.