[[20090625095850]] 『リストボックスを使った検索方法について』(えくせる) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『リストボックスを使った検索方法について』(えくせる)
 エクセルで作成したデータについて、リストボックスで検索したい
 のですが、下記の場合、どのようにVBAを組めばいいでしょうか?

 A列     B列      C列     D列
 兵庫県   りんご      赤      1万円
  大阪府   みかん      橙      5,000円
  奈良県   りんご      青      2万円
  ・・・

 このようなデータがある場合に、ユーザーフォーム(リストボックスを配置)を
 4つ作って下記検索を行う場合のVBA
 ユーザーフォーム1・・・A列の検索条件(兵庫県、大阪府、奈良県等)から選択)
 ユーザーフォーム2・・・B列の検索条件から選択
 ユーザーフォーム3・・・C列の検索条件から選択
 ユーザーフォーム4・・・D列の検索条件(○円以上、○円以下)で選択

 こういうのは可能でしょうか?
 ユーザーフォーム4自体は難しいかもしれませんが、VBAを教えていただければ
 助かります。

 よろしくお願いします。


 オートフィルタを設定しておいて

 '------
Sub 先頭項目()
    Application.ExecuteExcel4Macro "FILTER?(1,"""")"
End Sub
 '------

 なんてのは?

 (HANA)

 hanaさん、ありがとうございます。
 すいません、やり方が全くわからずすいません。
 やろうとしてるのはボタンを押すとユーザーフォーム1に
 飛んで、リストボックスから一つ目の項目を選ぶ、その後
 リストボックス2へ・・・でリストボックス4の項目を選んだ
 ら抽出データのみが出てくるといったイメージです。

 すいませんが、具体的に教えてもらえたら助かります。
 初歩的な質問ばかりですいません。

 もっと仕様を詰める必要が有りそうに思いますが。

 そのイメージなら・・・・
 新しいブックのSheet1に
 以下のようにデータを配置して下さい。
	[A]	[B]	[C]	[D]
[1]	県名	品名	色	金額
[2]	兵庫県	りんご	赤	10000
[3]	大阪府	みかん	橙	5000
[4]	奈良県	りんご	青	20000
[5]	兵庫県	りんご	青	10000
[6]	大阪府	みかん	橙	5000
[7]	奈良県	りんご	赤	20000
[8]	大阪府	みかん	橙	3000

  ここからコピーして、形式を選択して貼り付け→テキスト
  で貼り付け後、[1][A]の行列を削除してもらうと
  簡単かもしれません。

 抽出コードと、全て表示のコードです。
 標準モジュールに貼り付けて、確認して下さい。

 '------
Sub 抽出()
Dim i As Long, Arng As Range
With Sheets("Sheet1")
    If .AutoFilterMode = True Then
        .AutoFilterMode = False
    End If
    .Range("A1:D1").AutoFilter
    Set Arng = Application.Intersect(.Range("A:A"), .AutoFilter.Range)
    For i = 1 To 4
        Application.ExecuteExcel4Macro "FILTER?(" & i & ","""")"
        If Application.Evaluate("SUBTOTAL(3," & Arng.Address & ")") - 1 < 2 Then
            Exit For
        End If
    Next
End With
Set Arng = Nothing
End Sub
 '------
Sub 全て表示()
With Sheets("Sheet1")
    If .AutoFilterMode = True Then
        .ShowAllData
    End If
End With
End Sub
 '------

 (HANA)


 hanaさん、ありがとうございます。
 イメージしてるのはこんな感じです。(別の抽出のVBAが残って
 ましたので、記載します。ユーザーフォーム2、5、6、7、8、9の6つのリスト
 ボックスからそれぞれ選んだデータのみを抽出するものです。)

【userform2】
Private Sub ListBox2_Click()

 End Sub
 Private Sub userform_activate()
 Sheets("マクロ").Select
 ListBox1.RowSource = "g10:g12"
 End Sub
 Private Sub listbox1_dblclick(ByVal cancel As MSForms.ReturnBoolean)
 Application.ScreenUpdating = False
 Sheets("マクロ").Select
 Range("a2").Select
 ActiveCell.Value = ListBox1.Value
 UserForm2.Hide
 UserForm5.Show
 End Sub

【userform5】

 Private Sub ListBox1_Click()
 End Sub
 Private Sub userform_activate()
 Sheets("マクロ").Select
 ListBox1.RowSource = "h10:h13"
 End Sub
 Private Sub listbox1_dblclick(ByVal cancel As MSForms.ReturnBoolean)
 Sheets("マクロ").Select
 Range("a3").Select
 ActiveCell.Value = ListBox1.Value
 UserForm5.Hide
 UserForm6.Show
 End Sub

【userform6】

 Private Sub ListBox1_Click()
 End Sub
 Private Sub userform_activate()
 Sheets("マクロ").Select
 ListBox1.RowSource = "i10:i13"
 End Sub
 Private Sub listbox1_dblclick(ByVal cancel As MSForms.ReturnBoolean)
 Sheets("マクロ").Select
 Range("i8").Select
 ActiveCell.Value = ListBox1.Value
 Sheets("マクロ").Select
 Range("j8:T8").Select
 Selection.ClearContents
 UserForm6.Hide
 Sheets("マクロ").Select
 ActiveSheet.Calculate
 UserForm7.Show
 End Sub 

【userform7】

 Private Sub listbox1_dblclick(ByVal cancel 
 As MSForms.ReturnBoolean)
 Range("i7").Select
 If ActiveCell.Text = "1" Then
    Sheets("マクロ").Select
    Range("j8").Select
    ActiveCell.Value = ListBox1.Value
 ElseIf ActiveCell.Text = "2" Then
    Sheets("マクロ").Select
    Range("n8").Select
    ActiveCell.Value = ListBox1.Value
 ElseIf ActiveCell.Text = "3" Then
    Sheets("マクロ").Select
    Range("r8").Select
    ActiveCell.Value = ListBox1.Value
    End If
 UserForm7.Hide
Sheets("マクロ").Select
ActiveSheet.Calculate
Range("j7").Select
 If ActiveCell.Text = "1" Then
 UserForm8.Show
 ElseIf ActiveCell.Text = "2" Then
 UserForm8.Show
 ElseIf ActiveCell.Text = "3" Then
 Macro200
 ElseIf ActiveCell.Text = "4" Then
 Macro200
    End If
Range("n7").Select
 If ActiveCell.Text = "1" Then
 UserForm8.Show
 ElseIf ActiveCell.Text = "2" Then
 UserForm8.Show
 ElseIf ActiveCell.Text = "3" Then
 UserForm8.Show
 ElseIf ActiveCell.Text = "4" Then
 UserForm8.Show
 ElseIf ActiveCell.Text = "5" Then
 UserForm8.Show
    End If
Range("r7").Select
 If ActiveCell.Text = "1" Then
 UserForm8.Show
 ElseIf ActiveCell.Text = "2" Then
 UserForm8.Show
     End If
End Sub

【userform8】

 Private Sub listbox1_dblclick(ByVal cancel 
 As MSForms.ReturnBoolean)
 Range("j7").Select
 If ActiveCell.Text = "1" Then
    Sheets("マクロ").Select
    Range("k8").Select
    ActiveCell.Value = ListBox1.Value
 ElseIf ActiveCell.Text = "2" Then
    Sheets("マクロ").Select
    Range("l8").Select
    ActiveCell.Value = ListBox1.Value
    End If
Range("n7").Select
 If ActiveCell.Text = "1" Then
    Sheets("マクロ").Select
    Range("o8").Select
    ActiveCell.Value = ListBox1.Value
 ElseIf ActiveCell.Text = "2" Then
    Sheets("マクロ").Select
    Range("p8").Select
    ActiveCell.Value = ListBox1.Value
 ElseIf ActiveCell.Text = "3" Then
    Sheets("マクロ").Select
    Range("o8").Select
    ActiveCell.Value = ListBox1.Value
 ElseIf ActiveCell.Text = "4" Then
    Sheets("マクロ").Select
    Range("p8").Select
    ActiveCell.Value = ListBox1.Value
 ElseIf ActiveCell.Text = "5" Then
    Sheets("マクロ").Select
    Range("o8").Select
    ActiveCell.Value = ListBox1.Value
    End If
Range("r7").Select
 If ActiveCell.Text = "1" Then
    Sheets("マクロ").Select
    Range("s8").Select
    ActiveCell.Value = ListBox1.Value
 ElseIf ActiveCell.Text = "2" Then
    Sheets("マクロ").Select
    Range("t8").Select
    ActiveCell.Value = ListBox1.Value
     End If
 UserForm8.Hide
     Sheets("マクロ").Select
    ActiveSheet.Calculate
    Range("i7").Select
    If ActiveCell.Text = "1" Then
     Macro101
    ElseIf ActiveCell.Text = "2" Then
     Macro102
    ElseIf ActiveCell.Text = "3" Then
     Macro103
    End If
End Sub

【userform9】

 Private Sub ListBox1_Click()
 End Sub
Private Sub userform_activate()
Sheets("マクロ").Select
ActiveSheet.Calculate
Range("k7").Select
 If ActiveCell.Text = "" Then
 Else
    Sheets("マクロ").Select
    ListBox1.RowSource = "m10:m16"
    End If
Range("o7").Select
 If ActiveCell.Text = "" Then
 Else
    Sheets("マクロ").Select
    ListBox1.RowSource = "q10:q16"
    End If
End Sub
Private Sub listbox1_dblclick(ByVal 
 cancel As MSForms.ReturnBoolean)
Sheets("マクロ").Select
Range("k7").Select
 If ActiveCell.Text = "" Then
 Else
    Sheets("マクロ").Select
    Range("m8").Select
    ActiveCell.Value = ListBox1.Value
    End If
Range("o7").Select
 If ActiveCell.Text = "" Then
 Else
 Sheets("マクロ").Select
    Range("q8").Select
    ActiveCell.Value = ListBox1.Value
    End If
 UserForm9.Hide
 Macro200
End Sub

 これだとユーザーフォームで抽出したデータのみが
 出てきます。(前任者の作なので、組み方は私には分からないです。)

 こういうのを作りたいのですが・・・。
 難しいでしょうか?


 コードを載せられて「こういうの」と言われても
 何がどうなっているのか分かりませんが。。。

 最初に言っておられたように
  一つずつ ▼ 候補の中から条件を選んでいって
  最終的に絞り込んだ状態にする
  (金額は範囲での抽出も可)
 ってのは、先のマクロでも出来ると思います。

 >難しいでしょうか?
 そうですね、色々な知識が必要と思いますよ。

 まずは、ご自身で作ってみて
 躓いたところを質問する形にした方が
 良いかもしれません。

 (HANA)

 HANAさん、すいません。
 うまく伝えられなくて・・・。
 最初に書かせてもらってますが、ボタンを押すと
 各ユーザーフォームが出てきてそのリストボックスから
 選んだものを抽出していけたらいいですが・・。
 (A列−兵庫県を選択→B列 りんご →C列赤・・・と
 選んだらそのデータだけが抽出される。。)

 最初に記載したものではイメージしにくいでしょうか?
 2つめに書いたコード表は確かに分かりにくいと思いますが、
 最初に書いたA列、B列、C列・・・を各ユーザーフォーム
 に置き換えたらいい例えかなと思ったもので・・。

 分かりにくいかったらごめんなさい。
 もし他の方もいいアイデアがありましたら、よろしくお願いします。 

 >最初に記載したものではイメージしにくいでしょうか?
 イメージは分かりますが、質問内容が大きすぎると思います。

 項目で一つ指定するたびに、次の候補を絞り込んでいく
 のは、こちらのご質問と似ている様に思いますので、ご参考に。
[[20081217082039]]『3つ以上のコンボボックス連携について』(Voume11)

 (HANA)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.