コンボボックスで入力した値をセルに順次格納するには?

Question 21.2 Previous Next
サンプルマクロのコンボボックスをダウンさせていただきました。あまりVBAを使ったことが無いので助かっています。
で、サンプルで疑問に思ってることがありますので、質問です。
ダウンロードしたコンボボックスでDBへ直接入力する部分を実行させると、DBシートにC3セルから順次にデータが入力されます。でも、私の方で同じように作成したものは、データが順次に入力されません。ある1ヶ所での入力になります。

されないのはわかるような気がするのですが、どうして順次に入力されるのかが、わかりません。
よろしくお願い致します。
Answer  Excel 95用 Copyright (C) 1999.8.25 永井善王
はじめに、前ページ「コンボボックスでDBへ入力するには?」の回答内容を、復習しておきましょう。
コンボボックス
このコンボボックスの仕組み

・リストボックスに映っている県名のどれかをクリックすると、その県名がエディットボックスに写る。
・リストボックスに希望の県名がない場合は、直接エディットボックスに入力することが可能。
・マクロでは、このエディットボックスに入っている値を、セルに取り出すことになる。 ★★
・サンプルマクロとして、下記の二通り用意されている。
  1) 入力されたデータを直接にDBへ書き込む方法
  2) 一旦、入力シートに書いてからDBシートにコピー貼り付けする方法。

回答に入ります。
二通りのコードはダウンロードしたサンプルマクロで見れますが、下記に転載した第1の方法のコードを使って考えてみましょう。
Sub コンボボックスでDBへ直接入力する()
2 Sheets("DB").Select                        '住所録データベース用のシート
3 Do
4  下 = Range("C1").End(xlDown).Row         'セルC1の列の下端検出
5  DialogSheets(1).Show                     '入力用のダイアログ(コンボボックス等)表示
6  Range(Cells(下 + 1, 3), Cells(下 + 1, 3)) = DialogSheets(1).EditBoxes(1).Text
                                              '県名をC列のセルへ
7  Range(Cells(下 + 1, 4), Cells(下 + 1, 4)) = DialogSheets(1).EditBoxes(2).Text
                                              '住所地をD列のセルへ
8 Loop
End Sub
コードの6行目に、= DialogSheets(1).EditBoxes(1).Text と書かれています。 これが、「エディットボックスに入っている値を取り出す」★★ コードです。

では、取り出した値を「DBシートのC3セルから順次にデータを入力」できるのは、なぜでしょうか。
DBシート DBシートのレイアウト

6行目の = の左辺に、
Range(Cells(下 + 1, 3), Cells(下 + 1, 3)) と書かれています。その中の Cells(下 + 1, 3) の中の 3 は、C列を意味します。 同様に、7行目にある 4 は、D列となります。
行の指定は、下 + 1 と書かれています。「下」は変数名ですから「下 + 1」の意味は、変数「下」に入っている値に「1」を加えた値となります。
では変数「下」には、どんな値が入っているのでしょうか。
コードの4行目に、
下 = Range("C1").End(xlDown).Row と書かれていて、その説明に「セルC1の列の下端検出」とあります。
それより前の2行目で、「DB」シートが選択されていますので、組み合わせて考えると「DBシートのセルC1の列の下端を検出する」となり、上図レイアウトでは、2となります。 以上により 6行目のコードは、エディットボックスの値を、C列の3行目のセルに入力することになります。
7行目のコードの意味は、もう、わかりますね。
.EditBoxes(1).の( )の中の数字は、エディットボックスの識別番号と思っておけば良いでしょう。

さあ、大詰めですよ。
6~7行目のコードが実行されると、DBシートの3行目にデータが記入されます。次の 8行目のコードは、
Loop ですので、Do~Loop つまり 3~8行目のコードが繰り返して実行されます。2度目に4行目のコードが実行されて下端検出された行数は、1度目に検出された行数よりも 1行増えているということは、理解できますね。
同様に、2度目に5行目のコードが実行されてコンボボックスが映り、2度目に6行目のコードが実行されると、エディットボックスの値が DBシートの4行目にセットされることが、わかりますか。

この Do~Loopは、上の図の「コンボボックスのレイアウト」にある[終了]ボタンが押されると、別のマクロが実行されて反復が終ります。[終了]ボタンには予め、別のマクロを登録しておきます。
別のマクロは、サンプルマクロに、「Sub コンボボックス_終了_click()」として載っていますので、見てください。

Excel VBA Macro