• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBA)

エクセルVBAの初心者がユーザーフォームのコンボボックス連携について教えてください

このQ&Aのポイント
  • エクセルVBA初心者が、ユーザーフォームでのコンボボックスの連携方法について教えてください。
  • 具体的には、コンボボックス1で選択した種類に応じてコンボボックス2のリストが変わるようにしたいです。
  • また、コンボボックス1で選択した種類とコンボボックス2で選択した商品をそれぞれ指定のセルに挿入したいです。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! すでに適切な回答が出ていますので・・・ 参考程度です。 ユーザーフォーム・コンボボックス等のオブジェクト名は指定したいないとします。 'Sheetモジュールです Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target If .Address = "$F$1" Then UserForm1.Show ElseIf .Address = "$F$4" Then Dim k As Long, myFlg As Boolean, myArray myArray = Array("種類1", "種類2", "種類3") myFlg = False For k = 0 To UBound(myArray) If Range("F1") = myArray(k) Then myFlg = True End If Next k If myFlg = False Or Range("F1") = "" Then MsgBox "再度種類を選択してください。", vbOKOnly Range("F1").Select Exit Sub End If UserForm2.Show End If End With End Sub 'ユーザーフォーム1のコード Private Sub ComboBox1_Change() Range("F1") = UserForm1.ComboBox1.Text Range("F4") = "" Unload Me End Sub 'ユーザーフォーム2のコンボボックスのコード Private Sub ComboBox1_Change() Range("F4") = UserForm2.ComboBox1.Text Unload Me End Sub 'ユーザーフォーム2のコード Private Sub UserForm_Initialize() With UserForm2.ComboBox1 Select Case Range("F1") Case "種類1" .RowSource = "B1:B5" Case "種類2" .RowSource = "C1:C5" Case "種類3" .RowSource = "D2:D5" End Select End With End Sub こんな感じではどうでしょうか?m(_ _)m

KICHIMAROBON
質問者

お礼

ありがとうございます とてもわかりやすい説明ですね そのままだとユーザーフォーム1がうまくいかなかったので ユーザーフォーム1のコードをユーザーフォーム1のコンボボックスのコードにして ユーザーフォーム1のコードを  Private Sub UserForm_Initialize() ComboBox1.RowSource = "A1:A3"  End Sub  でうまく機能しました。 とても助かりました ありがとうございました  

その他の回答 (4)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

何度もごめんなさい。 今日はミスの連発です。 すでにお判りかと思いますが・・・ >ユーザーフォーム1のRowSourceは >ユーザーフォームのプロパティで RowSource の設定ができますので、 はユーザーフォームではなく、コンボボックス の間違いです。 どうも失礼しました。m(_ _)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.2・3です! No.2の欄に >そのままだとユーザーフォーム1がうまくいかなかったので とありましたので・・・・ あっ!そうでしたね! ユーザーフォーム1のRowSourceは ユーザーフォームのプロパティで RowSource の設定ができますので、 そこで行えばコードに組み込まなくても大丈夫です。 そのコトを書き忘れていました。 どうも失礼しました。m(_ _)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.2です。 たびたびごめんなさい。 >コード及びコード記入場所を教えていただけませんか の後半を忘れていました。 最初のシートモジュール部分は問題ないと思います。 操作したいSheet見出し上で右クリック → コードの表示 → VBE画面にコピー&ペーストしてください。 各ユーザーフォーム・コンボボックスですが Alt+F11キー でVBE画面になります。 前回の >ユーザーフォーム1のコード は実はユーザーフォーム1のコンボボックスのコードです。 画面左側の「UserForm1」をダブルクリック → ユーザーフォーム1が表示されますので、 そこのコンボボックスをダブルクリック 表示されたVBE画面に前回の 「ユーザーフォーム1」のコードをコピー&ペースト (Private Sub UserForm_Click() といったものが表示されますが、無視します) 次に「UserForm2」をダブルクリック → コンボボックス以外のユーザーフォームの部分をダブルクリック ここに「ユーザーフォーム2のコード」をコピー&ペースト もう一度「UserForm2」をダブルクリック → コンボボックスをダブルクリック VBE画面に ユーザーフォーム2のコンボボックスのコード を貼り付けます。 この程度で判りますかね?m(_ _)m

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.1

なかなか回答が付かないようなので。 現状で「どんなコードを書いて、どのようにうまくいかないのか」を明記すると 色んなアドバイスをもらえると思いますよ。 「初心者」で逃げられると、回答側もあなたが「どの程度できるのか」わからないので、 アドバイスのレベルに困りますからね。 とりあえず、一例として簡単なコードを。 ユーザーフォームの名前を「UserForm」 コンボボックスの名前をそれぞれ「ComboBox1」「ComboBox2」 (一応、選択した「コンボボックスの値」をF1・F4セルに反映する「CommandButton1」も用意) とした場合です。 まず、ユーザーフォームを呼び出したときに、A1:A5をコンボ1の値に設定するため、 Private Sub UserForm_Initialize()     ComboBox1.RowSource = "A1:A5" End Sub を用意しておきます。 続いて、コンボ1の値が変わったときに、コンボ2の値を動的に変えるためのコード Private Sub ComboBox1_Change()     ComboBox2.Value = ""    '念のため、コンボ2を空白に     Select Case ComboBox1.Value         Case "種類1"             ComboBox2.RowSource = "B1:B5"         Case "種類2"             ComboBox2.RowSource = "C1:C5"         Case "種類3"             ComboBox2.RowSource = "D1:D5"     End Select End Sub これで、変わってくれます。 「種類」が増えるなら、Caseを増やしてやればOKです。 最後に、選択された内容をセルに反映するボタン Private Sub CommandButton1_Click()     If ComboBox1.Value = "" And ComboBox2.Value = "" Then         MsgBox "選択されませんでした"     Else         Range("F1").Value = ComboBox1.Value         Range("F4").Value = ComboBox2.Value     End If     Unload Me End Sub コンボボックス二つとも選択されたらセルに反映、 どちらか一方でも選択されなかったら何もしないで終了、としてやります。 これらをユーザーフォームモジュールに書けば、ご希望に近い処理が出来るような気がします。 あとはここから膨らませていけばよろしいかと思いますよ。

KICHIMAROBON
質問者

お礼

ありがとうございます 今後もう少しコードを書くように気をつけます

関連するQ&A