• ベストアンサー

Excel:VBAでコンボボックスを活用する方法

はじめまして。Excel2000でアンケートシートを作りたいと思っています。 その回答をコンボボックスから選ぶようにしたいのですが、「違う質問だけど同じ選択肢」というのがたくさんあるので簡潔にしたいのです。 このサイト等ネットで調べるとコントロールに変数を持たせる方法として Control(ComboBox & i)とか Me(ComboBox & i) というのを目にしましたが、どちらもこの状態には該当しないのかうまくいきませんでした。 コンボボックスごとにソースを作るしかないのでしょうか? 理想としてはforループでコンボボックスの回数だけ回して、if文でComboBox1と3と4と7には○○○、2と5と6には△△△を表示するようにできたらいいなぁと思っています。 (あくまで理想のソースです。) For i = 1 To 30 If i = 1 Or 3 Or 4 Or 7 Then With ComboBox & i(←ここが知りたいです☆) .Clear .AddItem "非常に重要" .AddItem "重要" .AddItem "少し重要" .AddItem "重要ではない" End With ElseIf i = 2 Or 5 Or 6 Then With ComboBox & i(←ここが知りたいです☆) .Clear .AddItem "はい" .AddItem "いいえ" End With End If Next i いかがでしょうか?☆部分をどうにかすることで解決するのでしょうか?他に方法があったらぜひご教示ください。 そもそもコンボボックスの作り方にも自信がありません。 以前に少しだけVBを経験してますが、ほぼ初心者です。 よろしくお願い致します。

  • Mt-C
  • お礼率100% (2/2)

質問者が選んだベストアンサー

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.2

シート上のコントロールはちょと扱いが違うところがあります。 「新しいブック」で以下をお試しください。 ●Sheet1 に ComboBox を5個配置 ●Sheet2 にComboBox表示用リストを作成   A1:A4 に "非常に重要"、 "重要"、 "少し重要"、"重要ではない"   B1:B2 に ”はい"、"いいえ" そして次のコードを「標準モジュール」にコピペし、実行。 ------------------------------------------------ Sub Test()  Dim i As Integer  For i = 1 To 5    With Sheets("Sheet1").OLEObjects("ComboBox" & i)       Select Case i         Case 1, 3, 5            .ListFillRange = "Sheet2!A1:A4"         Case Else            .ListFillRange = "Sheet2!B1:B2"       End Select    End With  Next i End Sub --------------------------------------------- 尚、本番ではこのコードは、 ThisWorkbookモジュールの、WorkBook_Openイベントで実行することは、言うまでもありません。 以上です。  

Mt-C
質問者

お礼

onlyrom様 ご丁寧な説明ありがとうございます。 こんなやり方があるとは初めて知り、勉強になりました!! テストしてみましたが、できました☆☆☆ 本番でも活用したいと思います。 また何かありましたらよろしくお願い致します。

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>Control(ComboBox & i) 疑似コントロール配列という方法です。 VBAではVBのようなコントロール配列が使えないので、このような方法になります。 >With ComboBox & i と指定してもコントロールの指定はできません。 With Control("ComboBox" & i) のように、Control("オブジェクト名") でコントロールが認識されるようになります。 http://www.h3.dion.ne.jp/~sakatsu/Breakthrough_P-Ctrl_Arrays.htm

Mt-C
質問者

お礼

hana-hana3様 ご丁寧に説明いただきありがとうございます!! 早速実践してみたところ、 Controlのところでコンパイルエラーが出て、 SubまたはFunctionが定義されていません。 と言われます。 フォームを作ってないからできないのでしょうか? (現在はシートに直接コンボボックスを貼ってます) もし、そうだとしたらフォームを作ってないと 擬似コントロール配列は使えないのでしょうか? ご教示いただければ幸いです♪

関連するQ&A

  • Excel VBAでコンボボックスで選択

    コンボボックスで選択したいと思っていますがうまくいきません。 教えてください。 Private Sub userform_initialize()  With ComboBox2   .Font.Size = 12   .AddItem "A"   .AddItem "B"   .AddItem "C"  End With If ComboBox2 = "A" Then  With ComboBox3   .Font.Size = 12  .AddItem "a-1"  .AddItem "a-2"  End With ElseIf ComboBox2 = "B" Then With ComboBox3   .Font.Size = 12  .AddItem "b-1" .AddItem "b-2" End With Else: ComboBox2 = "C" With ComboBox3 .Font.Size = 12 .AddItem "c-1" .AddItem "c-2" End With End If End Sub コンボボックス2で"A"を選んだら、コンボボックス3には"a-1とa-2"の選択したい のですが、"c-1,c-2"しかでません。よろしくお願いします。

  • エクセルVBAのコンボボックス

    エクセル2002使用です。 生年月日とかを入力できるコンボボックスを作っているのですが、同じコンボボックスを5つ作ろうとしています。例えば和暦を入力するには Private Sub userform_initialize() With ComboBox(1) .AddItem "昭和" .AddItem "平成" End sub でうまくいくのですが、2個目から5つ目まで同じものを作成する場合、 With ComboBox(2) ・・・ With ComboBox(3) ・・・ と、コードを記述していかないと駄目なのでしょうか? できれば With ComboBox(1: 5) とか、 変数を使って Private Sub userform_initialize() Dim i As Integer For i = 1 To 5 With ComboBox(i) .AddItem "昭和" .AddItem "平成" End With Next End sub といった具合にまとめたいのですが、コンパイルエラーとなってしまいます。 初歩的な質問で申し訳ないのですが、よろしくお願いします。

  • コンボボックスのクリア方法について教えて下さい(vb6.5)

    コンボボックスのクリア方法について教えて下さい(vb6.5) ComboBox1で選択したものによって、 ComboBox2で表示するものを変えたいと思っています。 ただ、一度ComboBox1で選択した後にComboBox2を開くと、 ComboBox2は前回のものがどんどん足されていきます。 コンボボックスのクリア方法について、 どの様にすればよいかご教示のほど、 宜しくお願い致します。 Private Sub ComboBox1_Change() UserForm1.ComboBox2.RemoveItem (0) If ComboBox1.Text = 1 Then UserForm1.ComboBox2.AddItem "A" UserForm1.ComboBox2.AddItem "B" UserForm1.ComboBox2.AddItem "C" ElseIf ComboBox1.Text = 2 Then UserForm1.ComboBox2.AddItem "D" UserForm1.ComboBox2.AddItem "E" UserForm1.ComboBox2.AddItem "F" Else UserForm1.ComboBox2.AddItem "G" UserForm1.ComboBox2.AddItem "H" UserForm1.ComboBox2.AddItem "I" End If End Sub -------------------------------------- Private Sub UserForm_Initialize() UserForm1.ComboBox1.AddItem "1" UserForm1.ComboBox1.AddItem "2" UserForm1.ComboBox1.AddItem "3" End Sub

  • Excel VBAのコンボボックスにて条件で絞込みをしたいのですが

    いつもお世話になっています。 コンボボックスの3個目が表示されません。 コンボボックス1と2はうまく表示されます。 よろしくお願いします。 Private Sub ComboBox2_Change() Dim ico As Long ico = 1 With ThisWorkbook.Worksheets("data") KEY = Me.ComboBox1.Text KET2 = Me.ComboBox2.Text KET3 = Me.ComboBox3.Text Me.ComboBox3.Clear Do While .Cells(ico, 1) <> "" If .Cells(ico, 1) = KEY And .Cells(ico, 2) = KEY2 Then ITE = .Cells(ico, 3).Value flg = 0 For I = 0 To Me.ComboBox3.ListCount - 1 If ITE = Me.ComboBox3.List(I) Then flg = 1 Next If flg = 0 Then Me.ComboBox3.AddItem ITE End If ico = ico + 1 Loop End With Me.ComboBox3.SetFocus End Sub

  • Excel VBAのコンボボックス

    お世話になります。 コンボボックス1と2と3は選択されますが コンボボックス4には何の表示もされません。 選択して条件設定は4つ以上できないのでしょうか? Dim ITE As Variant Dim flg As Variant Private Sub ComboBox3_Change() 'ComboBox4セット Dim ico As Long ico = 1 With ThisWorkbook.Worksheets("data") KEY = Me.ComboBox1.Text KEY2 = Me.ComboBox2.Text KEY3 = Me.ComboBox3.Text Me.ComboBox4.Clear Do While .Cells(ico, 1) <> "" If .Cells(ico, 1) = KEY And .Cells(ico, 2) = KEY2 And .Cells(ico, 3) = KEY3 Then ITE = .Cells(ico, 4).Value flg = 0 For I = 0 To Me.ComboBox4.ListCount - 1 If ITE = Me.ComboBox4.List(I) Then flg = 1 Next If flg = 0 Then Me.ComboBox4.AddItem ITE End If ico = ico + 1 Loop End With Me.ComboBox4.SetFocus End Sub

  • オプションボタン選択でコンボボックス有効

    ExcelVBAでユーザーフォームを作成しているのですが、昨日までうまく動作していたことが、突然動かなくなりました。 オプション1を選択 ↓ コンボボックス1有効  ※他のコンボボックスは無効 ↓ オプション2を選択 ↓ コンボボックス2有効  ※コンボボックス1も含め他のコンボボックスは無効 という感じで動作させたいです。 書いたコードはこんな感じです。 Private Sub OptionButton1_Click () Dim i As Long Dim lastRow As Integer lastRow = Cells(Row.Count, 1).End(xlUp).Row If OptionButton1.Value = True Then OptionButton1.Enabled = True With ComboBox1 If ComboBox1 = "" Then For i = 2 To lastRow .AddItem Worksheets("sheet1").Cells(i, 1).Value Next i End If End With ComboBox1.ListIndex = 0 ComboBox2.Enabled = False ComboBox3.Enabled = False End If End Sub コードの間違いや改善点などありましたら教えて下さい。 よろしくお願いします。

  • VBA コンボボックスの項目入力

    お世話になります。 Excel2002のVBAにて コンボボックスへの項目の入力について 質問させて頂きます。 現在行いたい処理はB27からB56のセルに入力されている数値 のなかからB62からB91に入力されている数値と重複の無いもの をコンボボックスへ追加したいと考えております(空白セルは 追加しない)。 以下の通りではどうもうまくいかないので宜しくお願いします。 ' For i = 27 To 56 ' If Range("B" & i) <> "" Then ' ComboBox1.AddItem Range("B" & i) ' For j = 62 To 91 ' If Range("B" & j) <> "" Then ' ComboBox1.RemoveItem Range("B" & j) ' End If ' Next ' End If ' Next

  • Excelのワークシートでのコンボボックスについて

    Excelのワークシートでコンボボックスを設定する方法を教えてください。 「フォームコントロール」と「ActiveXコントロール」の違いがわかりません。 添付の画像の通りコンボボックスに西暦を入力(別シートに入力済みの値を表示するように設定)してあるのですが、ファイルを保存しているにも関わらず、再度ファイルを開くとコンボボックスの中のリストは空欄になってしまいます。 今は「ActiveXコントロール」のコンボボックスで設定しています。 コードは以下のように設定してみたのですが、設定内容や設定箇所が違うのでしょうか? ////////////////////////////////////////////////////// Private Sub ComboBox1_DropButtonClick() Dim sh As Worksheet Set sh = Worksheets("マクロ") Dim i As Integer Dim lastRow As Integer lastRow = sh.Cells(Rows.Count, 1).End(xlUp).Row With ComboBox1 For i = 2 To lastRow If ComboBox1 = "" Then .AddItem sh.Cells(i, 1).Value End If Next i End With End Sub ////////////////////////////////////////////////////// コンボボックスのリストの内容が消えてしまうので、 コードの内容は同じで以下のところにもコードを書いてみました。 ////////////////////////////////////////////////////// Private Sub Worksheet_Activate() Dim sh As Worksheet Set sh = Worksheets("マクロ") Dim i As Integer Dim lastRow As Integer lastRow = sh.Cells(Rows.Count, 1).End(xlUp).Row With ComboBox1 For i = 2 To lastRow If ComboBox1 = "" Then .AddItem sh.Cells(i, 1).Value End If Next i End With End Sub ////////////////////////////////////////////////////// なんだかもう、訳がわからずぐちゃぐちゃです。 コンボボックスの中に値が入っていると、実行ボタンをクリックしたときは正常にやりたい結果を出すことが実現できます。 ファイルを閉じた後に再度開いてもコンボボックスの中に値があるようにするにはどうしたらよいのか、ド素人の私にご教授いただきたくお願いいたします。

  • VBA コンボボックスの値による条件分岐

    12カ月分のブックがあり、 コンボボックスで指定した月のブックを開くマクロはどう記述すれば良いでしょうか? BOOK("1月")のSheet1にコンボボックス1と コマンドボタン1があります。 コンボボックスには下記をリストにしています。 Private Sub Workbook_Open() With Worksheets("Seet1").ComboBox1 .AddItem (" 2月") .AddItem (" 3月") .AddItem (" 4月") .AddItem (" 5月") .AddItem (" 6月") .AddItem ("7月") .AddItem ("8月") .AddItem ("9月") .AddItem ("10月") .AddItem ("11月") .AddItem ("12月") End With End Sub Private Sub CommandButton1_Click() If ComboBox1.Value = "2月" Then Workbooks.Open Filename:="C:\testBook\2月.xlsm" ElseIf ComboBox1.Value = "2011年度 3月売上" Then Workbooks.Open Filename:="C:\testBook\3月.xlsm"     中略 End If End Sub 上記ではエラーとなります。 基本もままならない素人で申し訳ありませんが、 ご教授願います。

  • コンボボックスの開いたリストを閉じるには

    コンボボックスのリストを開くのはComboBox1.DropDownでできますが、閉じるのはどういう風にやればいいでしょうか。 今ユーザーフォームで Private Sub Combobox1_Change() ComboBox1.Clear v = ComboBox1.Text For i = 1 To 300 c = Worksheets("Sheet1").Cells(i, "A") If v = Left(c, Len(v)) And Len(v) > 0 Then ComboBox1.AddItem c End If Next i ComboBox1.DropDown End Sub と言う風にしていますが、リストを開きっぱなしだと変な表示になってしまい、マウスクリックで一旦閉じてから開かないと変な表示になってしまうのです。 そこで一旦リストをマクロで閉じさせてから再び開きたいのですが、どうすればいいでしょうか。