|
みなさん、こんにちは
私は、こんなケースではデータベース使うことが多いのですが、あえてベタにシートのデータ検索する方法でモジュール作ってみました。
(簡単のため3段階の例です。)
フォームのコンボボックスとしますね。
Sheet2の各列に元データを作っておきます。
A B C D E
肉 肉 牛 牛 松坂
果物 肉 豚 牛 近江
野菜 果物 りんご 豚 薩摩
果物 みかん 豚 ヨークシャー
野菜 ピーマン りんご 国光
野菜 ジャガイモ りんご ふじ
みかん 温州
みかん 和歌山
ピーマン 緑
ピーマン 赤
ジャガイモ メークイン
ジャガイモ 男爵
ComboBox1のRowSourceに"Sheet2!A1:A3"を設定しておきます。
以下はフォームモジュールです。
Private Sub ComboBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
'ComboBox1の変更時、B・C列のデータから該当するデータをF列にコピーして、F列をComboBox2のRowSourceに設定します。
Dim i As Integer
Dim j As Integer
j = 1
With Sheet2
For i = 1 To .Range("B65536").End(xlUp).Row
If .Cells(i, 2).Value = Me.ComboBox1.Value Then
.Cells(j, 6).Value = .Cells(i, 3).Value
j = j + 1
End If
Next
Me.ComboBox2.RowSource = "Sheet2!F1:F" & j - 1
End With
End Sub
Private Sub ComboBox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim i As Integer
Dim j As Integer
j = 1
With Sheet2
For i = 1 To .Range("D65536").End(xlUp).Row
If .Cells(i, 4).Value = Me.ComboBox2.Value Then
.Cells(j, 7).Value = .Cells(i, 5).Value
j = j + 1
End If
Next
Me.ComboBox3.RowSource = "Sheet2!G1:G" & j - 1
End With
End Sub
かなりベタですが、こんな感じでどうでしょ?
あとはフィルター使ったり、データベースと組み合わせたりで応用できると思いますが、いかがでしょ?
|
|