Excel VBA。「1-1」などのハイフンで数値を接続した連番を簡単に入力したい。
<Excel VBA>
簡単そうに思える処理でも、結構面倒で時間がかかることがExcelにはあったりします。例えば、「1-1」などのハイフンで接続した連番を入力したい場合です。
やりたいことは、次のような連番。
オートフィルで連番を設定できることはできますが、5までで、頭の数値が繰り上がっています。
そして、何よりも面倒なのが、「1-1」と入力すると、1月1日と日付になってしまうことです。
数値の間をハイフンで入力すると、「/(スラッシュ)」で数値を区切った時と同じように、Excelが文字ではなくて、日付が入力されたと判断するからです。
よって、文字として認識させる必要があるので、「’(シングルコーテーション)」を入力してから、「1-1」と入力する必要があり、簡単に入力して、設定することができません。
このような簡単でも、意外と面倒なことがある場合には、Excel VBAでマクロをつくると簡単に入力設定することができます。
以下のようにプログラム文を作ってみました。
Sub 番号ハイフン()
Dim i As Integer
Dim j As Integer
Dim row_no As Integer
row_no = 2
For i = 1 To 5 '前の数値
For j = 1 To 5 '後ろの数値
Cells(row_no, "c").NumberFormat = "@"
Cells(row_no, "c").Value = i & "-" & j
row_no = row_no + 1
Next j
j = 1
Next i
End Sub
まずは実行して確認してみましょう。
希望通りに、ハイフンで接続した連番を作ることができました。
「’(シングルコーテーション)」をつかって入力するよりも、はるかに簡単に入力することができました。
では、プログラム文を確認してみましょう。
Dim i As Integer
Dim j As Integer
Dim row_no As Integer
変数を用意しています。
row_no = 2
変数のrow_noは、入力するセルの行数を記録しておく役割をします。
For i = 1 To 5 '前の数値
For j = 1 To 5 '後ろの数値
Cells(row_no, "c").NumberFormat = "@"
Cells(row_no, "c").Value = i & "-" & j
row_no = row_no + 1
Next j
j = 1
Next i
For To Nextを二重にすることで、ハイフンで接続するための数値を連番で設定することができます。
そして、ポイントになるのが、
Cells(row_no, "c").NumberFormat = "@"
NumberFormat = "@"とすることで、表示形式を、文字列とすることができます。
この行をいれることで、「’(シングルコーテーション)」を使う必要がなくなります。
そのあとに、ハイフンで接続する数値を設定していきます。
Cells(row_no, "c").Value = i & "-" & j
お馴染み、“&”をつかって文字結合させます。
下方向にセルを移動させるための行を入れます。
row_no = row_no + 1
たった、これだけの簡単なプログラム文で、ハイフンで接続する連番の数値を作る場合には、色々な方法がありますが、Excel VBAという方法もありますので、少しずつ、テクニックを増やしていくといいかもしれませんね。