エクセルVBAで自動的に連番をつける方法
住所録や商品管理をエクセルでやっていませんか?
エクセル住所録では、一番左の列は「通し番号」として連番を割り振っています。
名前を入力すると、通し番号が自動的に付与されると便利だと思いませんか?
名前登録すると自動連番が付与される
エクセルシートのB列に直接名前を入力する方法でもいいのですが、せっかくなのでユーザーフォームを使って名前を入力しましょう。
上の図のように、テキストボックスにに名前を入れて、新規登録ボタンを押すとA列に自動的に「通し番号」1から順に「連番」が割り振られるようにします。
住所録なので図のように生年月日・住所・電話番号などの項目がありますが、ここでは省略します。
本来は入力フォームを使って各項目を入力するのが普通ですが、分かりやすくするために名前だけにしてみました。
使うVBAはDo While~Loop
ここではユーザーフォームに配置したコマンドボタンにVBAコードを書いていきます。
但し、1行目に図のように名前などの項目があることが前提になっていますよ!
Private Sub CommandButton1_Click()
If Range(“B1”).Offset(1).Value = “” Then
Range(“B1”).Offset(1).Value = TextBox1.Value
Else
Range(“B1”).End(xlDown).Offset(1).Value = TextBox1.Value
End If
Dim i As Integer
i = 1
Do While Cells(i + 1, “B”).Value <> “”
Cells(i + 1, “A”).Value = i
i = i + 1
Loop
End Sub
- コマンドボタン1を押したら
- もしセルB1の1つ下のセルが空白の場合
- セルB1の1つ下のセルにテキストボックス1の値を入力する
- それ以外の場合
- セルB1を基準として入力済み最終行のセルの1つ下のセルにテキストボックス1の値を入力する
- 回数を数える為の整数の変数「i」を宣言
- 変数「i」に連番初期値として「1」を入れる
- 名前入力の行(B列)i+1行目のセルが空白でない時
- 顧客番号(A列)i+1行目のセルの値を入力する
- iに1を加える
- 「8」~「10」の作業を繰り返す
- マクロ終了
エクセルVBAで多く使われているDo While~Loopですが、「ある条件を満たす時だけ処理を繰り返す」というものです。
自動連番を割り振ろうと思ったら、名前がセルB列に入力されたら連番を割り振るというVBAコードを書く必要があります。
さらに、名前が再びセルB列入力されれば繰り返し連番を割り振るというVBAコードも書く必要があります。
そして、名前はセルB列の入力済み最終行の次に入力するというVBAコードも書く必要があります。
さあ、この自動連番機能を使って、実用的な住所録を作成するユーザーフォームに組み込んでいきましょう。
図のように住所録となれば、先ほどと違い入力項目が増え(テキストボックス)、性別を選択させる(オプションボタン)もあります。
これら増えた項目を新規登録ボタン(コマンドボタン)に追加してVBAコードを書かなくてはいけません。
また、住所録だから検索や修正もこの画面だけで行うようにできると、一瞬で作業が終わります。
時間はかかりますが、エクセルの学校など行かなくてもなんとかなるもんですよ!
初歩的な事からエクセル住所録作成についてまとめました。