1/26/2020

Excel VBA。「1-1」などのハイフンで数値を接続した連番を簡単に入力したい。【Serial number】

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という方法もありますので、少しずつ、テクニックを増やしていくといいかもしれませんね。