- ベストアンサー
VBAコンボボックスの条件分岐
- VBAコンボボックスを使用し、セルの値に応じた条件分岐を行いたい場合のコードについて説明します。
- コンボボックス22をマスタシートのC2からC4までの値で選択できるように設定し、選択したセルに応じてコンボボックス21の参照範囲を設定します。
- 例えば、C2セルを選択した場合はコンボボックス21の参照範囲をマスタシートのD2からD13までに設定し、C3セルを選択した場合はE2からE13までに設定します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No.1の訂正案です。 Withが何度も出てくるので一度にした方がいいと思いますので変更しました。 あと、列が2列指定ColumnCount = 2なのが何故なのかよく分からないのでそのままです。 Private Sub ComboBox22_Change() With Me.ComboBox21 If Me.ComboBox22 = "A" Then .ColumnCount = 2 .ColumnWidths = "90;10" .RowSource = "マスタ!D2:D13" ElseIf Me.ComboBox22 = "B" Then .ColumnCount = 2 .ColumnWidths = "90;10" .RowSource = "マスタ!E2:E13" End If End With End Sub もしくは Private Sub ComboBox22_Change() With Me.ComboBox21 Select Case Me.ComboBox22 Case "A" .ColumnCount = 2 .ColumnWidths = "90;10" .RowSource = "マスタ!D2:D13" Case "B" .ColumnCount = 2 .ColumnWidths = "90;10" .RowSource = "マスタ!E2:E13" Case Else End Select End With End Sub
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
ここは、デバッグまでやらせられてはと思うので、訂正する気はないが、下記参考になれば.(簡潔性を心がけたツモリ。デバッグの起こる余地なしと思う。) ・ユーザーフォームを1つ設ける ・そのユーザーフォーム1に、コンボボックスを2つ設ける コンボボックス1とコンボボックス2です。 別にするよりも省力化。 ーー ユーザーフォームのコードの表示に Private Sub ComboBox1_Click() MsgBox ComboBox1.Text txt = ComboBox1.Text Select Case txt Case "A" UserForm1.ComboBox2.RowSource = "C2:C4" Case "B" UserForm1.ComboBox2.RowSource = "D2:D5" Case "C" UserForm1.ComboBox2.RowSource = "E2:E6" End Select End Sub Private Sub UserForm_Initialize() With UserForm1.ComboBox1 .AddItem "A" .AddItem "B" .AddItem "C" End With End Sub Private Sub ComboBox2_Click() MsgBox ComboBox2.Text End Sub 其の後、ComboBox2.Text の値によって、その後の処理を書く(略) ーーー 他人に頼るばかりで、 (1)ユーザーフォームにコントロールを作るか、シートか、その他かの 説明がない。 (2)アイテムの設定で、セル範囲と、セルの値のどちらかについて、セルの値に統一すべきかな? >条件分岐のコードが間違っているみたいで、調べても分からなかったので質問します。 言っている意味不明。セルの値を問題にするのだろうから、IF条件分岐よりも、Select Caseなどの利用がおすすめ。 >C2:C4, "D2:D5”などには、適切なセルの値を入れておく。
- kkkkkm
- ベストアンサー率66% (1719/2589)
以下で試してみてください。 Private Sub UserForm_Initialize() With ComboBox22 .ColumnCount = 2 .ColumnWidths = "90;10" .RowSource = "マスタ!C2:C4" End With End Sub Private Sub ComboBox22_Change() If Me.ComboBox22 = "A" Then With Me.ComboBox21 .ColumnCount = 2 .ColumnWidths = "90;10" .RowSource = "マスタ!D2:D13" End With ElseIf Me.ComboBox22 = "B" Then With Me.ComboBox21 .ColumnCount = 2 .ColumnWidths = "90;10" .RowSource = "マスタ!E2:E13" End With End If End Sub もしくはIFのところをSelect Caseを使って Private Sub ComboBox22_Change() Select Case Me.ComboBox22 Case "A" With Me.ComboBox21 .ColumnCount = 2 .ColumnWidths = "90;10" .RowSource = "マスタ!D2:D13" End With Case "B" With Me.ComboBox21 .ColumnCount = 2 .ColumnWidths = "90;10" .RowSource = "マスタ!E2:E13" End With Case Else End Select End Sub
お礼
思った通りに動きました! 大変助かりました。