[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『リストボックスを使った検索方法について』(えくせる)
エクセルで作成したデータについて、リストボックスで検索したい のですが、下記の場合、どのように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)
イメージしてるのはこんな感じです。(別の抽出の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.