|
▼大渕 さん:
>B列に関しては1〜50まで、D列は0〜9まで、F列は0〜19まで、G列は1〜3500まであります。
>
>ドロップダウンリストから探すのも時間かかるので、それぞれのComboBOXに数値を入力して検索出来れば格段に作業が早くなると思っております。
> ユーザーフォームのレイアウトまでは作れたんですが、
とのことですが、
[Sheet1]
A B C D E F G …
No. CD 23区 CD 町名 丁目 番地 …
1 3 足立 3 綾瀬 1 6
2 4 港 1 芝 1 3
3 4 港 6 台場 3 16
4 3 足立 3 綾瀬 2 1
よろしければ、
▼もう一つユーザーフォームを挿入し、
ラベルと【ListBox】を4つ、以下のようなレイアウトで配置して
テストしてもらえますか?
CD(B) CD(D) 丁目 番地
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
└─────┘ └─────┘ └─────┘ └─────┘
コードのほうは Dictionaryオブジェクトを使いますので、
まず VBEメニュ−[参照設定] より
★Microsoft Scripting Runtime への参照設定をしておいてください。
以下のコードをUserFormに貼り付けます。
'--------------------------------------------------
Option Explicit
Dim dic As Dictionary
Private Sub UserForm_Initialize()
Set dic = New Dictionary
Dim v
Dim i&
Dim s1$, s2$, s3$, s4$
v = Worksheets(1).Range("A1").CurrentRegion.Resize(, 7).Value
For i = 2 To UBound(v)
s1 = v(i, 2) 'B列
s2 = v(i, 4) 'D列
s3 = v(i, 6) 'F列
s4 = v(i, 7) 'G列
If Not dic.Exists(s1) Then
Set dic(s1) = New Dictionary
End If
If Not dic(s1).Exists(s2) Then
Set dic(s1)(s2) = New Dictionary
End If
If Not dic(s1)(s2).Exists(s3) Then
Set dic(s1)(s2)(s3) = New Dictionary
End If
If Not dic(s1)(s2)(s3).Exists(s4) Then
dic(s1)(s2)(s3)(s4) = Empty
End If
Next
ListBox1.List = dic.Keys()
End Sub
Private Sub ListBox1_Click()
ListBox2.List = dic(ListBox1.Value).Keys()
End Sub
Private Sub ListBox2_Click()
Dim s1$, s2$
s1 = ListBox1.Value
s2 = ListBox2.Value
ListBox3.List = dic(s1)(s2).Keys()
End Sub
Private Sub ListBox3_Click()
Dim s1$, s2$, s3$
s1 = ListBox1.Value
s2 = ListBox2.Value
s3 = ListBox3.Value
ListBox4.List = dic(s1)(s2)(s3).Keys()
End Sub
-----
コードは以上です。
実行すると、ListBox1 に B列CD の候補がリストされますので、どれかを
選択してください。
そうすると、ListBox2に ListBox1で選択したCD の D列CD候補がリストされ
ます。
以下同様にして、ListBox2からどれかのItemを選ぶと、ListBox3の選択肢が
表示され、
そこから一つ選ぶと、ListBox4 の選択肢がリストされるようになっています。
ListBoxの下に CommandButtonをおいて、4つの列の検索値(Filter値)が
決定したらこのボタンを押すと、元シートの表にフィルタをかけるコードを
追加してください。
|
|