コンボボックス(ComboBox)は、テキストボックス(TextBox)とリストボックス(ListBox)が合体したコントロールです。
ですから、テキストボックスとリストボックスの使い方を知ってれば、それほど苦労しないと思うのですが、意外と質問が多いコントロールでもあります。ここでは、テキストボックスに入力した文字列を、リストに登録するという方法を解説します。
コンボボックスのリストに項目を登録するには、AddItemメソッドを使います。
ComboBox1.AddItem "項目"
テキストボックス部分に入力された文字列は、Textプロパティで取得できますので、これを、AddItemで登録してやればいいです。
Private Sub CommandButton1_Click() With ComboBox1 If .Text <> "" Then .AddItem .Text End If End With End Sub
と、まぁ、これだけなんですけどね(笑)
上のコードは、ComboBox1が何度も出てくるので、Withでくくってます。Withの使い方については、下記のページをご覧ください。
これだけではナニですので、もう少し応用的なことも書きましょう。
上のコードでは、[追加]ボタンを押すたびに、同じ項目が何度も登録されます。
もし、テキストボックス部分に入力された項目が、すでに登録されていたら登録しないと。それには、どうしたらいいでしょう。
別に難しい話ではありません。テキストボックス部分に入力された項目が、リストに登録されているかどうか、毎回調べてやればいいんです。では、リストに登録されているかどうかを、どうやって調べるか。それも簡単です。リストの項目を、ひとつずつチェックするだけです。
Private Sub CommandButton1_Click() Dim i As Long, flag As Boolean With ComboBox1 If .Text = "" Then Exit Sub For i = 0 To .ListCount - 1 If .List(i) = .Text Then flag = True Exit For End If Next i If flag = False Then .AddItem .Text End With End Sub
余談ですが。
この手の「コンボボックスに入力された文字列をリスト部分に登録したいけど、すでに登録されている文字列は登録したくないです。どうしたらいいですか?」的な質問は、よくあります。
そもそも、リスト部分に新しいデータを登録するAddItemメソッドや、リスト部分を調べるときに使うFor Nextなどを、知らない、あるいは、使えないのでしたら、できなくて悩むでしょうけど、たいてい、この手の質問をしてくる人って、そういう基本的なところは理解しています。でも、できない。自分で作れない。そういう人に共通して感じることは、マクロである操作を実現したいときに、
何を選べばいいか
という発想をしてしまうということです。何かをしたいとき、どんな関数を使えばいいか。どんなプロパティを使えばいいか、のように考えてしまいます。もちろん、それで解決するような、簡単な事例もあるでしょうけど、世の中そんなに甘くはありません。発想が、根本的に間違っています。
Excelは、大きく分けて「機能・数式・マクロ」の3要素で構成されています。"構成されている"という表現は、ちょっと変ですけど、要するに「機能と数式とマクロを駆使して、業務を遂行する」アプリケーションだということです。機能というのは、手動でExcelを操作するようなことです。グラフを作るとか、ピボットテーブルを作るとか、表示形式を設定するとか。そういう使い方です。おそらく多くのユーザーは、初めてExcelに接したとき、まず、この"機能"を学習するでしょう。「機能・数式・マクロ」のうち、この"機能"は、覚えるものです。どこにどんな設定項目があるか、こんなときはどのメニューを実行するか、このキーを押すとどうなるか。そうしたことを、たくさん覚えて、仕事をするときは、それらの機能を適切に選ぶことになります。
対して「機能・数式・マクロ」のうち、数式とマクロは、選ぶのではなく、作る作業です。もちろん、作れるようになるためには、最低限必要な知識や技術を覚えなければなりませんが、覚えただけでは使えるようになりません。特にマクロは、何とかして自分で"作る"という発想が重要です。たとえば、本コンテンツで紹介したような「コンボボックスに入力された文字列をリスト部分に登録したいけど、すでに登録されている文字列は登録しない」それを、一発でやってくれるようなメソッドや設定など、VBAにはありません。ありませんけど、じゃ、できないのかと言えば、できます。基本的な、変数やFor Nextなどを組み合わせることによって実現できます。それがマクロです。マクロは、何とかして"作る"ものです。学習した知識や技術を"組み合わせる"作業です。少なくとも、そういう発想を持つことが大切です。