
住所録や商品管理をエクセルでやってませんか?
私が管理している住所録では、一番左の列は「通し番号」として連番を割り振っています。

名前を入力すると、通し番号が自動的に付与されると便利だと思いませんか?
そう思ったので、自動連番作ってみました。
スポンサーリンク
名前を入力すると通し番号が自動割振り
エクセルシートのB列に直接名前を入力する方法でもいいのですが、せっかくなのでユーザーフォームを使って名前を入力すると、A列に自動的に「通し番号」1から順に「連番」が割り振られるようにします。
住所録なので図のように生年月日・住所・電話番号などの項目があります。
そして、本来は入力フォームを使って各項目を入力するのが普通ですが、分かりやすくするために名前だけにしてみました。
使うVBAはDo While~Loop
エクセルVBAで多く使われているDo While~Loopですが、「ある条件を満たす時だけ処理を繰り返す」というものです。
自動連番を割り振ろうと思ったら、名前がセルB列に入力されたら連番を割り振るというVBAコードを書く必要があります。
さらに、名前が再びセルB列入力されれば繰り返し連番を割り振るというVBAコードも書く必要があります。
そして、名前はセルB列の入力済み最終行の次に入力するというVBAコードも書く必要があります。
これらを【新規登録】ボタン(CommandButton1)に登録します。

自動連番ってひと言ですが、VBAコードはいろいろ必要なのでひと言の割にはちょっと長めになってます。
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コードを書かなくてはいけません。

先ほどのTextBox1の記述を単純にコピーしてTextBox2に変更すれば、できるかな?
世の中そんなに甘くない!出来ません!
ユーザーフォームを使ってオリジナルの「住所録新規登録フォーム」を作るのには時間がかかりました。

そして画像のような入力フォームでは使いずらく、役に立たないことも。
完成までになんと4か月、いくら仕事の合間に挑戦したからといって・・・