Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8421 / 76732 ←次へ | 前へ→

【73885】Re:ユーザーフォームで複数条件で検索しシート上にフィルタかけるマクロ
発言  kanabun  - 13/2/28(木) 21:03 -

引用なし
パスワード
   ▼大渕 さん:

>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値)が
決定したらこのボタンを押すと、元シートの表にフィルタをかけるコードを
追加してください。
1,064 hits

【73862】ユーザーフォームで複数条件で検索しシート上にフィルタかけるマクロ 大渕 13/2/25(月) 23:53 質問
【73863】Re:ユーザーフォームで複数条件で検索しシ... kanabun 13/2/26(火) 9:57 発言
【73870】Re:ユーザーフォームで複数条件で検索しシ... 大渕 13/2/26(火) 20:05 お礼
【73885】Re:ユーザーフォームで複数条件で検索しシ... kanabun 13/2/28(木) 21:03 発言

8421 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free