2/25/2021

Excel。VBA。読み込んだデータに001のような「0(ゼロ)」付き連番を楽してつくりたい【With zero】

Excel。VBA。読み込んだデータに001のような「0(ゼロ)」付き連番を楽してつくりたい

<Excel マクロ>

大したことない処理ほど、イチイチ設定するのは、かえって面倒に感じるものです。

まして、頻繁にその処理を行うとなると、より一層面倒に感じたりします。


例えば、次のようなデータを読み込んだとします。


B列の顧客名だけでは、管理上不便なので、A列のNOには、連番を設定したいわけです。

そして、できれば、次のような「0(ゼロ)」付の連番にしたい。


大した処理ではないんですね。

連番は、オートフィルで設定したら、表示形式のユーザー定義で、ゼロ付数値に表示するようにすればいいわけですね。


だけど、これが、マクロをつくることで、すぐに設定できるならば、楽になります。


では、どのようにしたら、ゼロ付数値の連番を設定することができるのでしょうか?


Excel VBAのプログラム文をつくってみましょう。

Sub zero連番()

    Dim i As Long

    Dim lastrow As Long

       

    lastrow = Cells(Rows.Count, "b").End(xlUp).Row

    

    For i = 2 To lastrow

      Cells(i, "a").NumberFormat = "000"

      Cells(i, "a").Value = i - 1

    Next

End Sub


実行して、確認してみると、A列のNOにゼロ付数値の連番が作成することができました。


このプログラム文を説明していきます。


最初はお馴染み、変数の宣言です。

Dim i As Long

Dim lastrow As Long


lastrow = Cells(Rows.Count, "b").End(xlUp).Row

B列のデータの最終行番号を取得するための行ですね。

lastrowという変数に代入させています。


そして、連番を設定するので、繰り返し処理を作っていきます。

それが、For i = 2 To lastrow ~Next です。


データそのものは、2行目から始まっているので、「2」から開始させています。


そして、

Cells(i, "a").NumberFormat = "000"

このプログラム文が、今回のポイントとなる行です。


NumberFormatプロパティをつかうことで、表示形式を設定することができるようになります。


ゼロ付数値にしたいわけですから、通常のExcelの表示形式と同じように、「000」とすることで、ゼロ付数値で表示することができるわけです。


Cells(i, "a").Value = i - 1

この行は、連番を設定するための一行です。

1からの連番にしたいので、「i-1」とした数値を代入させています。


今回は、

Cells(i, "a").NumberFormat = "000"

Cells(i, "a").Value = i - 1

という順番でしたが、逆にしても、ゼロ付数値で連番を設定することができます。


なお、ゼロ付数値にしない場合には、

Cells(i, "a").Value = i – 1

でOKです。


NumberFormatプロパティは、データを読み込むプログラム文に組み込んで使うことで、データを読み込んだ後の表示形式の設定をしないで済みます。

使ってみると結構便利なプロパティではないかと思います。


現在使用しているプログラムに組み込んでみると、作業効率化より改善できるかもしれませんね。