- 締切済み
エクセルVBAのチェックボックスを使った検索
当方、VBA初心者です。 使用しているソフトは、エクセル2007です。 都道府県別で会社検索ができるものを作りたいと考えております。 内容は、ユーザフォームに都道府県別のチェックボックスを作っております。 その都道府県をチェックすると オートフィルタ機能でチェックした都道府県をシート上に抽出するものです。 以下が理想とするイメージです。 会社名 住所 aaa 北海道釧路市1-1 bbb 青森県八戸市2-2 ccc 岩手県盛岡市3-3 ↓※北海道と青森県をチェックした場合 会社名 住所 aaa 北海道釧路市1-1 bbb 青森県八戸市2-2 しかし、北海道と青森県をチェックしても、抽出されるのは青森県だけになります。 どのようにしたら、チェックした都道府県をすべて表示できるようになるのでしょうか。 以下が現在のイメージです。 会社名 住所 aaa 北海道釧路市1-1 bbb 青森県八戸市2-2 ccc 岩手県盛岡市3-3 ↓※北海道と青森県をチェックした場合 会社名 住所 bbb 青森県八戸市2-2 以下が現在作成しているものです。 ---- Private Sub CommandButton1_Click() Unload Me End Sub ---- Private Sub CommandButton2_Click() If CheckBox1.Value = True Then Selection.AutoFilter ActiveSheet.Range("$A$5:$O$1677").AutoFilter Field:=10, Criteria1:="=*北海道*" _ , Operator:=xlAnd End If If CheckBox2.Value = True Then Selection.AutoFilter ActiveSheet.Range("$A$5:$O$1677").AutoFilter Field:=10, Criteria1:="=*青森県*" _ , Operator:=xlAnd End If End Sub ---- お手数ではございますが、どうがご教授をお願いいたします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- tasukete2012
- ベストアンサー率0% (0/0)
私、質問者のものです。 ご回答下さった「keithin様」にお礼がしたく、こちらに入れさせて頂きました。 本当は、ベストアンサー、お礼及び回答〆切をさせて頂きたいのですが、 なぜかMSN相談箱のマイページに入ることが出来ません(hotmailは閲覧できます)ので、この回答欄を使わせて頂きました。 ------------------------- keithin様 「keithin様」が作成して下さったプログラムで無事に抽出することができました。 ご丁寧にご教授頂きまして、誠にありがとうございます。 また、分かりやすく図を用いてご説明して下さったことにも重ねてお礼申し上げます。 「tasukete2011」のアカウントで入れましたら、改めてお礼をさせていただきますので お待ち頂けますでしょうか。 ------------------------- ご回答を検討中の方々は申し訳ございませんが、ここで回答を締め切らせて頂きますので 何卒ご了承ください。
- keithin
- ベストアンサー率66% (5278/7941)
折角Excel2007を使っているのですから,1つや2つと言わず,チェックした数だけ抽出したいですね。 ところで,用意したチェックボックスの数だけ「1番がチェックされていたら北海道」「2番がチェックされていたら青森県」といちいちイチイチマクロを書き並べていくのは,あまりに非効率です。 やり様はさまざまですが,たとえば作成例: チェックボックスにはそれぞれ県名が「北海道」「青森」「秋田」などのようにちゃんと記入してあって,それを使ってフィルタする ユーザーフォームのシートに下記をコピー貼り付ける Dim a As Variant Private Sub UserForm_Initialize() Worksheets("Sheet1").AutoFilterMode = False a = Application.Transpose(Worksheets("Sheet1").Range("B2:B" & Worksheets("Sheet1").Range("B65536").End(xlUp).Row)) End Sub Private Sub CommandButton1_Click() Dim buf As String Dim cb As Control For Each cb In Me.Controls If TypeName(cb) = "CheckBox" And cb.Value Then If Application.CountIf(Worksheets("Sheet1").Range("B:B"), cb.Caption & "*") > 0 Then buf = buf & Join(Filter(a, cb.Caption), ",") & "," End If End If Next If buf <> "" Then Worksheets("Sheet1").Range("A1").CurrentRegion.AutoFilter field:=2, Criteria1:=Split(buf, ","), Operator:=xlFilterValues Else Worksheets("Sheet1").Range("A1").CurrentRegion.AutoFilter field:=2, Criteria1:="" End If End Sub #とりあえず思いつきで書いたので,あんまり整理してません。丁寧に書けばもうちょっとクールに書けると思います。
Criteria1:="=*北海道*" ,Operator:=xlOr, Criteria2:="=*青森県*" じゃないですか? でも3つ以上はオートフィルタだと無理だと思います。 ループ文を使ったコーディングをしましょう。
- ・真 綾・(@Ma-yan_bh1011)
- ベストアンサー率30% (79/257)
「オートフィルタを設定し“*北海道*”で抽出」したあと「オートフィルタを設定し“*青森県*”で抽出」しているのだからそりゃ青森だけになるでしょうねえ。 分からないうちは「マクロの記録」がおすすめです。 「マクロの記録」を開始してから、あなたの望むフィルタをかけてみてください。標準モジュールにそれを実行するマクロが記録されます。
お礼
Ma-yan_bh1011様がおっしゃるように「マクロの記録」でやってみます。 こんな長い説明文を読んで、さらにご回答まで頂き、ありがとうございます。
お礼
オートフィルタだと3以上は無理なのですね。 >ループ文を使ったコーディングをしましょう。 ループ文… 調べてみます。 ご回答を頂きまして、ありがとうございます。