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プロパティは、データを読み込むプログラム文に組み込んで使うことで、データを読み込んだ後の表示形式の設定をしないで済みます。
使ってみると結構便利なプロパティではないかと思います。
現在使用しているプログラムに組み込んでみると、作業効率化より改善できるかもしれませんね。