• 締切済み

エクセル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 ---- お手数ではございますが、どうがご教授をお願いいたします。

noname#157025
noname#157025

みんなの回答

回答No.4

私、質問者のものです。 ご回答下さった「keithin様」にお礼がしたく、こちらに入れさせて頂きました。 本当は、ベストアンサー、お礼及び回答〆切をさせて頂きたいのですが、 なぜかMSN相談箱のマイページに入ることが出来ません(hotmailは閲覧できます)ので、この回答欄を使わせて頂きました。 ------------------------- keithin様 「keithin様」が作成して下さったプログラムで無事に抽出することができました。 ご丁寧にご教授頂きまして、誠にありがとうございます。 また、分かりやすく図を用いてご説明して下さったことにも重ねてお礼申し上げます。 「tasukete2011」のアカウントで入れましたら、改めてお礼をさせていただきますので お待ち頂けますでしょうか。 ------------------------- ご回答を検討中の方々は申し訳ございませんが、ここで回答を締め切らせて頂きますので 何卒ご了承ください。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

折角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 #とりあえず思いつきで書いたので,あんまり整理してません。丁寧に書けばもうちょっとクールに書けると思います。

noname#227991
noname#227991
回答No.2

Criteria1:="=*北海道*" ,Operator:=xlOr, Criteria2:="=*青森県*" じゃないですか? でも3つ以上はオートフィルタだと無理だと思います。 ループ文を使ったコーディングをしましょう。

noname#157025
質問者

お礼

オートフィルタだと3以上は無理なのですね。 >ループ文を使ったコーディングをしましょう。 ループ文… 調べてみます。 ご回答を頂きまして、ありがとうございます。

回答No.1

「オートフィルタを設定し“*北海道*”で抽出」したあと「オートフィルタを設定し“*青森県*”で抽出」しているのだからそりゃ青森だけになるでしょうねえ。 分からないうちは「マクロの記録」がおすすめです。 「マクロの記録」を開始してから、あなたの望むフィルタをかけてみてください。標準モジュールにそれを実行するマクロが記録されます。

noname#157025
質問者

お礼

Ma-yan_bh1011様がおっしゃるように「マクロの記録」でやってみます。 こんな長い説明文を読んで、さらにご回答まで頂き、ありがとうございます。

関連するQ&A

  • VBA 加算演算時のトラブル

    事務処理用に準備したVBA処理の数値合計チェックにて本来イコールとなるべきところ、ノットイコールと判定されてしまいます。当該部分を抜き出し、わかりやすくしたものが下記のロジックですが、ここで、test2,test4は結果がイコールとなるものの、test3の場合、ノットイコールとなってしまいます。どなたか、原因につき教えていただけませんか? Dim aaa As Double Dim bbb As Double sub test2() bbb = 16.67 + 16.67 aaa = 33.34 If bbb = aaa Then MsgBox "OK" Else MsgBox "NE" End If End Sub Sub test3() bbb = 16.67 + 16.67 + 16.67 aaa = 50.01 If bbb = aaa Then MsgBox "OK" Else MsgBox "NE" End If End Sub Sub test4() bbb = 16.67 + 16.67 + 16.67 + 16.67 aaa = 66.68 If bbb = aaa Then MsgBox "OK" Else MsgBox "NE" End If End sub

  • エクセル VBAのチェックボックスについて

    お読みくださり、ありがとうございます。 エクセル初心者でございます。 エクセルのマクロなのですが、 お詳しい方、是非教えて欲しいです!汗 調子に乗って入力フォームなるものを作りました。 入力フォームの中にて、チェックボックスで「ある」「なし」の項目を入れてみたのですが、チェックしていないのに、値が入る現象が起きています汗 以下、素人が書いたコードを恥を承知で記載させていただきます。 Private Sub CheckBox1_Click() If CheckBox1.Value = True Then OK = "○" End If End Sub Private Sub CheckBox2_Click() If CheckBox2.Value = True Then NO = "×" End If End Sub Private Sub UserForm_Click() End Sub '以下のコードは、登録ボタンがクリックされたときの処理! Private Sub 登録ボタン_Click() If TextBox1.Text = "" Then MsgBox "グッズ名を入力してください。" Exit Sub End If If TextBox2.Text = "" Then MsgBox "アプローチ先を入力してください。" Exit Sub End If With Worksheets("協賛グッズ") With Cells(Rows.Count, 2).End(xlUp) .Offset(1, 0).Value = TextBox1.Text .Offset(1, 1).Value = mori .Offset(1, 2).Value = mori2 .Offset(1, 3).Value = TextBox2.Text .Offset(1, 5).Value = TextBox3.Text .Offset(1, 6).Value = TextBox4.Text .Offset(1, 7).Value = TextBox5.Text .Offset(1, 8).Value = TextBox6.Text End With End With TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox5.Text = "" TextBox6.Text = "" CheckBox1.Value = False CheckBox2.Value = False End Sub 以上です。 おかしなところ満載かと思いますが、 チェックを入れた項目だけ値を入れたいと考えております。 おわかりになるかたおりましたら何卒お助けください汗 よろしくお願いいたします。

  • エクセルVBA住所録で半角全角問わず検索する方法

    エクセルVBAで住所録を作っています。 住所録で下記のようなコードを書いて、キーワード検索をさせるようにしているのですが、『*丁目』や番地に半角英数を使っています。 全角で数字を入力しても検索されるようなコードの書き方はあるのでしょうか? 宜しくお願いします。 Sub 住所検索() ans = InputBox("住所を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:IV1").AutoFilter 'オートフィルタモードをセット .Range("A1:IV1").AutoFilter Field:=4, Criteria1:="=*" & ans & "*" '4つ目のフィルターに検索文字 End With End Sub

  • エクセル チェックボックスの解除について(VBA)

    YES/NOを入力させる為の下記のVBAにおいて、チェックボックス1をチェックすると、アの部分でチェックボックス2の解除を行う関係で?、シート上でチェックボックス2を操作していないのにもかかわらず、勝手にCheckBox2_Click()に入り、命令文イを実行してしまいます。 ただ単にSub CheckBox1_Click()のルーチンの最後までの処理で終わりたいのですが、どうしたらよいのでしょうか。 Private Sub CheckBox1_Click() If CheckBox1 = True Then Sheets("sheet1").Range("A1") = 1 Sheets("sheet1").Range("A2") = 0 CheckBox2 = False・・・ア Else Sheets("sheet1").Range("A1") = "" End If End Sub Private Sub CheckBox2_Click() If CheckBox2 = True Then Sheets("sheet1").Range("A1") = 0 Sheets("sheet1").Range("A2") = 1 CheckBox1 = False Else Sheets("sheet1").Range("A2") = ""・・・イ End If End Sub

  • VBAでif文にorを使う場合の仕様

    http://www.relief.jp/itnote/archives/vba-if-or.php このページにも書かれてあるのですが、 Sub textss() aaa = 2 If aaa = 0 Or 1 Then bbb = 1 ElseIf aaa = 2 Then bbb = 2 End If ccc = bbb End Sub を実行すると cccには2が代入されそうなのですが、実際には1が代入されてしまいます。 If aaa = 0 Or aaa = 1 Then と入力する必要があります。 それでは、 If aaa = 0 Or 1 Then とした時、プログラムではどういう処理がなされているのでしょうか?

  • excelで標準偏差の出し方

    excelで標準偏差を出したいです。 下のような市区町村別のデータが書いてある表があり、各都道府県別の人口の標準偏差を出したいです。   A   B    C(ここに人口のデータ) 1北海道  ○○市 2北海道  ○○市 3北海道  ○○市 4北海道  〃 5北海道  〃 6青森県  〃 7青森県  〃 8青森県  〃 9青森県  〃 10秋田県  〃 11秋田県  〃 12秋田県  〃 13秋田県  〃 ・ ・ ・ 「=STDEVP(C1:C5)」などと都道府県ごとにやるのでは手間がかかってしまうため、例えば北海道のデータを入力すればあとはそれを下にドラッグすればすべてのデータが正しく出るようにしたいです。 IF関数を使うのかと思ったのですが、いまいちやり方が分かりません。 excelに詳しい方、教えていただければ幸いです

  • エクセル VBA チェックボックスについて

    よろしくお願い致します。 OS:XP エクセル2003 VBAのことは、まったくの初心者です。 質問なのですが、下記のようなチェックボックス7にチェックが入れば、チェックボックス8~11に自由にチェックが入れれるようになり、逆にチャックボックス7にチェックが入ってない場合は、チェックボックス8~11のチェックはクリアされ、チェックできないものを作りました。 ここから、チェックボックス7にチェック入れたあとは、必ずチェックボックス9~11のどれかにチェックが入っている状態(ラジオボタンのような)で、チェックボックス7にチェックが入ってなかったら、8~11のチェックがクリアで尚且つ、チェックができなくなるようにするにはどうすればよいでしょうか? よろしくお願い致します。 Private Sub CheckBox7_Click() If CheckBox7.Value = True Then CheckBox8.Enabled = True CheckBox9.Enabled = True CheckBox10.Enabled = True CheckBox11.Enabled = True Else CheckBox8.Value = False CheckBox9.Value = False CheckBox10.Value = False CheckBox11.Value = False CheckBox8.Enabled = False CheckBox9.Enabled = False CheckBox10.Enabled = False CheckBox11.Enabled = False End If End Sub

  • エクセルVBAで住所録を作成

    住所録シートに次のようにコードを作っています。 Option Explicit Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address = "$B$1" Then 顧客名検索 ElseIf Target.Address = "$C$1" Then フリガナ検索 ElseIf Target.Address = "$D$1" Then 住所検索 ElseIf Target.Address = "$E$1" Then 郵便番号検索 ElseIf Target.Address = "$A$1" Then オートフィルタ解除 カナ順に設定 Else Exit Sub End If End Sub そして標準モジュールには Sub 顧客名検索() ans = InputBox("顧客名を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=2, Criteria1:="=*" & ans & "*" '2つ目のフィルターに検索文字 End With End Sub Sub フリガナ検索() ans = InputBox("顧客カナを入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=3, Criteria1:="=*" & ans & "*" '3つ目のフィルターに検索文字 End With End Sub Sub 住所検索() ans = InputBox("住所を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=4, Criteria1:="=*" & ans & "*" '4つ目のフィルターに検索文字 End With End Sub Sub 郵便番号検索() ans = InputBox("郵便番号を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=5, Criteria1:="=*" & ans & "*" '5つ目のフィルターに検索文字 End With End Sub Sub オートフィルタ解除() Application.CutCopyMode = False Selection.AutoFilter Range("A1").Select End Sub Sub カナ順に設定() Range("C1").Select ActiveWorkbook.Worksheets("住所録").Sort.SortFields.Clear ActiveWorkbook.Worksheets("住所録").Sort.SortFields.Add Key:=Range("C1"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("住所録").Sort .SetRange Range("A2:IV65536") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("A2").Select Selection.AutoFilter End Sub と入れています。 VISTAで作ったのですが、このファイルを共有にして使おうとすると、XPのパソコンでは、A1セルをダブルクリックすると、コードが黄色になり、マクロが中断されます。 B1~G1は問題なくマクロが実行されるのに・・・。 もう一台のVISTAでは同じ共有状態で使っても問題ありません。 どうすればXPでも問題なく使えるのでしょう?

  • VBA コンボボックス

    VBAコンボボックスで AAAを選択→処理A BBBを選択→処理B CCCを選択→処理C としている場合、 AAAを選択→処理Aの後、コンボボックスで再度AAAをクリックしても次の処理Aにいきません。いったんBBBをクリックしてしてAAAをクリックすると処理Aに行きますが、連続AAAをクリックして処理Aはできないでしょうか。 何か方法はありませんか? Private Sub ComboBox1_Change() If ComboBox1.Value = "AAA" Then   ’処理Aへ ElseIf ComboBox1.Value = "BBB" Then   ’処理Bへ Else   ’処理Cへ End If End Sub

  • チェックボックスについて

    こんにちは。 フォームで「個人別状態」が「成約済み」の時に チェックボックスにチェックがつくようにしたいのですが、 動作しません。 どこが間違っているのでしょうか。。。 Private Sub チェック31_Click() If Me.個人別状態 = "成約済み" Then Me.チェック31.Value = False Else Me.チェック31.Value = True End If End Sub

専門家に質問してみよう