5、VBAによるマクロの作成(応用編)
5−4、ユーザーフォームを使う
ユーザーフォームの作り方と利用例を紹介します。
【ユーザーフォームの作り方】
【各コードの解説】
◎「UserForm_Initialize」の解説
- With ComboBox1
.AddItem "男"
.AddItem "女"
End With
「UserForm_Initialize」は、ユーザーフォームの初期設定を行うマクロです。
今回はフォーム内のコンボボックス「ComboBox1」にアイテム(リスト)を追加します。この例では、性別を選択する部分に使われるので、"男"と"女"という2つのアイテムを追加します。◎「CommandButton1_Click」の解説
- このマクロはその名前の通り「CommandButton1」(今回の場合、OKボタン)がクリックされた時に実行されるマクロです。
- n = 1
Do
n = n+1
Loop While Cells(n,1) <> ""
この記述は繰り返し処理を利用し、空白セルを探すためのものです。
繰り返すたびに「n」の値を増やしていき、それを行番号に利用します。このとき、Cells(n,1)が空白でないかぎり繰り返されます。繰り返して次々と行番号を増やしていき、Cells(n,1)が空白になった時点で繰り返しを終了します。
- Cells(n,1) = UserForm1.TextBox1.Text
Cells(n,2) = UserForm1.TextBox2.Text
Cells(n,3) = UserForm1.ComboBox1.Text
1行目はCells(n,1)に「UserForm1」の「TextBox1」の「Text」を出力しなさいという命令です。今回の場合で言うと、「UserForm1」の「TextBox1」は名前を入力する欄で、そこに入力された「Text」(文字)がCells(n,1)に出力されるわけです。
2行目と3行目についても同様です。
- Unload Me
簡単に言うと、「自分自身を閉じる」という命令で、ここで言うMe(自分自身)とはユーザーフォームのことです。つまり、ユーザーフォームに入力した情報をシート上に出力し終えたので、ユーザーフォームを閉じるという意味になります。◎「CommandButton2_Click」の解説
- このマクロは「CommandButton2」(今回の場合、キャンセルボタン)がクリックされた時に実行されるマクロです。
- Unload Me
「キャンセル」が押されたわけですから、フォームを閉じます。
- End
これは、現在どのようなマクロが実行されていようとも、完全にマクロを停止(終了)させる命令です。この続きにコードの記述があろうとなかろうと、この「End」の時点でマクロが止まります。
せっかく作ったユーザーフォームもそれを起動するマクロがなければ意味がありません。そこで、そのマクロを作成しましょう。
- 「挿入」メニューから「標準モジュール」を選択し、新しいモジュールシートを開きます。
- 以下のコードを記述します。
Sub FormSample()
Do
UserForm1.Show
Loop
End Sub
【このコードの解説】
- UserForm1.Show
これは、先ほど作成した「UserForm1」を表示する(Show)という命令です。この記述によりユーザーフォームが起動することになります。
- Do
UserForm1.Show
Loop
ユーザーフォームを使って、何件も続けてデータを入力したいので、Do 〜 Loopで繰り返し処理を行います。1件の入力が終わるたびに繰り返され、何件も続けて入力できるというわけです。そして、この場合、Loopの後ろに繰り返しをやめるための条件の記述がないため、無条件で、しかも無限に繰り返されます。
「無限!?」それじゃこのマクロが終了するのは・・・?
もうおわかりですね。そうです、先ほど記述した、ユーザーフォーム上の「キャンセル」ボタンがクリックされた時に実行される「End」命令により終了します。
「マクロの実行」から「FormSample」を選択して実行すると、今回の一連のマクロが起動します。
実行されるとすぐに、作成したユーザーフォームが表示されるので、フォームに情報を入力します。「名前」と「年齢」は直接入力します。性別については、入力欄の右端にある逆三角形をクリックすると、候補リスト(アイテム)が表示されるので、該当するほうを選択します。
すべての欄の入力が完了したら、「OK」ボタンを押します。
すると、シートの該当する位置にそれぞれの情報が入力されるわけです。
これが何度も繰り返されるので、必要な分だけ入力して下さい。
終了したい場合は、フォーム上の「キャンセル」ボタンを押すことにより、終了します。
+α講座
ユーザーフォームには、今回利用した「ラベル」や「テキストボックス」や「コンボボックス」、「コマンドボタン」の他にも様々なツールがあり、思いのままのユーザーフォームを作成することが可能です。
自分なりに色々試して、ユーザーフォームでより快適にExcelをお使い下さい。