• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで複数条件の検索結果を取得したい)

VBAで複数条件の検索結果を取得する方法

このQ&Aのポイント
  • ExcelのVBAを使用して、複数条件の検索結果を取得する方法について説明します。
  • find関数やadvancedfilterでは複数条件の検索結果を取得することはできません。しかし、ループとif文を使用すれば、セルの検索を行い、条件に一致する結果を取得できます。
  • 上記の例では、住所が「東京都」かつ年齢が「20」の条件に一致するデータを検索し、結果を変数に入れて操作することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 オートフィルターで行を抽出した後、SpecialCellsメソッドのxlCellTypeVisibleタイプを利用して表示されている行のセルのみから成る縦一列のセル範囲を設定し、そのセル範囲に対してFor~Each~in~Nextを使用して、各行ごとのデータの取得&配列変数に格納を行う様にすれば良いと思います。 Sub QNo8971372_VBAで複数条件の検索結果を取得したい() Dim RowF, RowL, myColumns, i, TempNo As Long Dim ColumnF, ColumnL, NameC, s As String Dim myCriteria(1, 2), myArray() As Variant Dim c, myRange As Range RowF = 2 '項目欄の行番号 ColumnF = "A" '表の左端の列 ColumnL = "D" '表の右端の列 NameC = "A" '氏名が入力されている列 myCriteria(0, 0) = "B" '条件その1となるデータが入力されている列 myCriteria(0, 1) = "東京都" '条件その1となる値 myCriteria(1, 0) = "C" '条件その2となるデータが入力されている列 myCriteria(1, 1) = 20 '条件その2となる値 myCriteria(0, 2) = Columns(ColumnF & ":" & myCriteria(0, 0)).Columns.Count 'AutofilterのFieldの値その1 myCriteria(1, 2) = Columns(ColumnF & ":" & myCriteria(1, 0)).Columns.Count 'AutofilterのFieldの値その2 RowL = Range(NameC & RowS.Count).End(xlUp).Row '氏名が入力されている最終行 If RowL <= RowF Then MsgBox "データがありません。" & Chr(13) & "マクロを終了します。", _ vbExclamation, "データ無し" Exit Sub End If Application.ScreenUpdating = False 'モニター表示の更新停止 'Autofilterを使って条件を満たす行のみを抽出 With Range(ColumnF & RowF & ":" & ColumnL & RowL) .AutoFilter Field:=myCriteria(0, 2), Criteria1:=myCriteria(0, 1) .AutoFilter Field:=myCriteria(1, 2), Criteria1:=myCriteria(1, 1) End With myColumns = Columns(ColumnL).Column - Columns(ColumnF).Column '配列変数の第2次元の要素数の決定(表の列数-1) TempNo = WorksheetFunction.Subtotal(3, Range(myCriteria(0, 0) & RowF + 1 & ":" & myCriteria(0, 0) & RowL)) - 1 '↑Autofilterで抽出さた行数(項目欄の行は除く)を取得(TempNoは数値を一時的に格納するための変数) ReDim Preserve myArray(TempNo, myColumns) '動的配列変数myArray()の要素数を定義 Set myRange = Range(ColumnF & RowF + 1 & ":" & ColumnF & RowL).SpecialCells(xlCellTypeVisible) '↑表の左端の列の中でAutofilterで抽出されているセルのみからなるセル範囲を設定 'Autofilterで抽出されたセルのデータを配列変数myArray()に格納 TempNo = 0 For Each c In myRange For i = 0 To myColumns myArray(TempNo, i) = c.Offset(0, i).Value Next i TempNo = TempNo + 1 Next c Selection.AutoFilter 'Autofilter解除 Application.ScreenUpdating = True 'モニター表示の更新を許可 '配列変数に格納したデータをダイアログボックス上に表示(この部分は目で確認するためであって必ずしも必要ではない) For i = 0 To UBound(myArray, 1) s = s & Chr(13) & myArray(i, 0) & " " & myArray(i, 1) & " " & myArray(i, 2) & " " & myArray(i, 3) Next i MsgBox s, vbInformation, "抽出結果" End Sub 【参考URL】  質問No.1227176 オートフィルタ使用時のマクロによるセルの移動 【OKWave】   http://okwave.jp/qa/q1227176.html

komegu_66
質問者

お礼

お礼が遅くなりすみません。 参考にさせていただきました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

noname#217196
noname#217196
回答No.2

オートフィルタでできる範囲に思うけど、ヘルプファイルを引いてごらん。オートフィルタでできることを確認したら、マクロ記録させて、そのマクロを編集するのが簡便。 VBAにこだわらなければ、項目数が少ないならワークシートをデータソースに指定してSQLでレコード抽出。項目数が多ければ、MS Accessからエクセルのワークシートをリンクテーブル指定してSQLでレコード抽出が、ウィザード利用で楽。

komegu_66
質問者

お礼

お礼が遅くなりすみません。 参考にさせていただきました。

全文を見る
すると、全ての回答が全文表示されます。
  • FEX2053
  • ベストアンサー率37% (7987/21355)
回答No.1

http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_advancedfilter.html 検索結果は「別シートに出せばオッケー」です。 抽出した別シートは「抽出結果だけ」のシートになってますので、 上から順に取得すればオッケー、あとはいじり放題です。

komegu_66
質問者

お礼

お礼が遅くなりすみません。 参考にさせていただきました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 複数検索結果を発展させて

    前回複数検索結果がある場合で関数式を教えていただいたのですが ​http://oshiete1.goo.ne.jp/qa3062377.html​ これに検索で名前を出したら同時に番号・住所・生年月日を一発で出せるようにしたいのですが・・・出来ますでしょうか?? 例Sheet1に 入院日 名前 番号 住所 生年月日 6月10日 ○川山美 123 東京都 S11.6.10 と入力すれば、sheet2に 6月8日 6月9日 6月10日 ○川山美 123 東京都 S11.6.10 と出てくる形にしてみたいのですが よろしくお願いします

  • 複数条件検索について

    よろしくお願いします。 検索条件として以下3つあるとします。 1.人数指定 2.年齢指定 3.住所指定 普通ですとこの条件全てを満たしたデータを検索するように ANDなどでしますが、この3つの条件がランダムな場合(例えば 1と2、1と3などなど・・)、ANDですと全て揃ってないと 検索結果が得られません。ORですとどちらかに合った検索結果になってしまいます。 ランダムな組み合わせでその条件を全て満たした結果を得るには何か うまい方法はありますでしょうか?? 説明が下手で申し訳ありませんが、よろしくお願いします。 環境 OS:winXP PHP4.4.4 apache2 mysql4

    • ベストアンサー
    • MySQL
  • Access 複数の抽出条件

    Access2002 windows2000 (例)次のようなテーブルとします。 フィールド名:名前 年齢 性別 レコード1 :山本 30 男 レコード2 :鈴木 40 女 レコード3 :田中 45 男 レコード4 :森本 26 女 クエリを利用して抽出する時、年齢が40以上で男を条件とすれば (1)年齢フィールドの抽出条件:>=40 (2)性別フィールドの抽出条件:男 として、田中が抽出されます。 では年齢が40以上で男、そして女は全て抽出したい時は(1)(2)の条件はどの様にすればいいでしょう? 抽出結果が 田中、鈴木、森本となりたいのです。 複数のクエリを作れば出来ますが、1つのクエリでは無理なのでしょうか。

  • 住所録の条件検索について

    皆さんお世話になります。 エクセルで住所録を作っていますが、この住所録の中で特定の地域のレコードは何件あるかを調べたいのですが、関数のcountifを使った場合、住所蘭が都道府県名~番地までひとつのセルに入っているため、検索範囲のセルの内容と一致せず、ヒットしません。 たとえば、住所欄に「東京都千代田区大手町二丁目」と入っていたとして検索条件に「"千代田区"」としても、うまく検索してくれません。 どなたか良い方法をご指導ください。

  • ExcelVBAにおいて複数の検索結果をメッセージボックスの選択によっ

    ExcelVBAにおいて複数の検索結果をメッセージボックスの選択によって選びたいのですが・・・。 早速の質問で申し訳ありません。 まず、ExcelVBAにおいて、複数の結果を返す、部分検索を行いたいと思っております。 例えば、セルに「田中」と入力してあり、それを別のシートの名簿一覧の順に検索し、「田中」、「小田中」、「田中原」といったように複数の結果を返したいと考えております。 次に、返した結果につきまして、その都度メッセージボックスを表示させ、「はい」ならばそこで検索をやめてその値を、「いいえ」ならば次の結果を、「キャンセル」ならば中止という様にしたいと考えております。 例えば、「田中」で検索した場合、「田中」でよろしいですか?→いいえ→「小田中」でよろしいですか?→いいえ→「田中原」でよろしいですか?→はい、で指定セルには「田中原」と表示させたいのです。 どのように書けばよいか、ご教授お願いできないでしょうか。 どうか、よろしくお願いします。 また、検索につきまして読み検索というのはできるのでしょうか?(例えば「たなか」で検索しても上のようになるような)可不可だけでも構いませんので、参考までに教えていただけると幸いです。

  • アクセス2007 VBAでの複数条件での検索

    お世話になります。 超初心者ですがよろしくお願いします。 複数条件での検索方法を検討しています。いろいろ調べて、 MeMain.Filter = "[ID] like '" & Me!text1 & "'"and"_ &"[社名] Like '" & Me!Text2 & "'"and"_ &"[住所] Like '" & Me!Text3 & "%'" という形で動かしてみるとうまくいきません。どのようにしたらうまくいくのでしょうか。 できれば、同時に2つの条件で検索するときの形も教えていただけないでしょうか。 よろしくお願いします。

  • アクセス検索フォームからの検索方法と結果の一覧表示

    アクセスで単票形式のフォームにて条件を入力し検索を実行し、対象一覧を表形式のフォームで表示したいです。 「対象者データ」というテーブルに対し複数条件を入力 ■テーブル構成 (名前)(年齢)  山田  20  佐藤  25  鈴木  35  田中  35    小川  40 --------------------例その1 ■検索※単票形式 (名前)(年齢) 「田 」「  」 ■結果※表形式 (名前)(年齢)  山田  20  田中  35 --------------------例その2 ■検索※単票形式 (名前)(年齢) 「田 」「35 」 ■結果※表形式 (名前)(年齢)  田中  35 上記の様な結果を表示するにはどのように行えばよいのでしょうか。 アクセス初心者で、現在VBAを駆使し登録画面が完成した状態です。 よろしくお願い致します。

  • AdvancedFilter 検索 複数条件

    AdvancedFilterを使って検索をしたいのですが、複数条件のVBAマクロの書き方を教えてください。 エクセル2010です。 2行目が見出し行で実際のデータは4行目から入っており、 T列を複数条件で検索をしたいのですが、 T4=スカート 150サイズ,ズボン 120サイズ,Tシャツ 150サイズ T5=スカート,ズボン 150サイズ, T6=Tシャツ 150サイズ,スカート 120サイズ 1セルに対して、検索用文字列が数十種類入っている状態です。 これをUseFormを利用して複数条件で検索をしたいのですが、 テキストボックス1、テキストボックス2、コマンドボタン1 があるとして、 テキストボックス1にスカート テキストボックス2に150 と入れて検索をかけたとき、T4のみが抽出結果に表示させたいです。 テキストボックス1にスカートのみで検索をかけると、T4-6が出るように表示させたいです。 テキストボックス1にTシャツ テキストボックス2に150 T4とT6が出るようにしたい。 このような事は出来るのでしょうか? Private Sub CommandButton2_Click() Worksheets("マスタ").Activate If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData Range("BH1:BU4").ClearContents Range("BH1:BU4").NumberFormatLocal = "@" Range("BS2").Value = Range("T2").Value Range("BS2").Value = Range("T2").Value If Me.TextBox1.Value <> "" Then ' 種類 Range("BS3").Value = "*" & Me.TextBox1.Value & "*" End If If Me.TextBox2.Value <> "" Then ' サイズ Range("BS4").Value = "*" & Me.TextBox2.Value & "*" End If If Cells(3, Columns.Count).End(xlToLeft).Column > 48 Then Range("A2:AW" & Rows.Count).AdvancedFilter Action:=xlFilterInPlace, _ CriteriaRange:=Range("BH2").CurrentRegion, Unique:=False End If Range("BH1:BU4").ClearContents Range("A1").Activate Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub これだと機能しないため、マクロを組める方、教えてほしいです。 オートフィルタだと、どうしてもフィルタボタンが出てしまい、見にくいので、 AdvancedFilterでやりたいのが希望です。 VBAわかる方、教えてください。 宜しくお願い致します。

  • 複数条件で最小値を求める

    Excel2007です。 複数の条件をつけて最小値を求めたいです。配列数式を使います。 A列に体重、B列に性別、C列に住所だとして 男で東京都と神奈川という条件の中から体重の最小値を求める時、 {=MIN(IF((B1:B100="男")*((C1:C100="東京")+(C1:C100="神奈川")),A1:A100)}でCtrl+Shift+Enterで確定しました。 実際のデー量はもっと多いです。 たぶんきちんと計算されているようなのですが、自信がありません。 正しい数式になっているでしょうか? マクロは使わない方法でお願いします。

  • エクセルのマクロで全シ-ト複数条件検索

    エクセルで全シートから複数項目で検索をかけ、条件に合う項目の行ごと 新しいシートに抽出結果として表示することは可能なのでしょうか。 初心者なりに考え、無様なコードではありますが、 検索条件が1つであれば、条件にあう行をすべて抽出することはできました。 ですが複数、または列ごと条件として指定することができず、難儀しております。 たとえば Sheet1    A    B    C    D 1      田中太郎   男   穏やか  2      鈴木次郎   女   うっかり 3      山田三郎   女   怒りっぽい 4      佐藤四郎   男   せっかち Sheet2    A    B    C    D 1      伊藤五郎   女   用心深い 2      加藤六郎   男   ずぼら 3      斎藤七郎   女   臆病 4      後藤八郎   男   陽気 Sheet3    A    B    C    D 1      【条件】 2      加藤六郎 3      鈴木次郎 4      山田三郎 5      後藤八郎 マクロ実行後↓ 新しいシート    A    B    C    D 1      加藤六郎   男   ずぼら 2      鈴木次郎   女   うっかり 3      山田三郎   女   怒りっぽい 4      後藤八郎   男   陽気 といった具合にしたいと考えております。 この場合ですと、B列全体を条件としたり、 Sheet3の条件が入力されているセルすべてを検索条件として 渡すことはできるのでしょうか。 実際のシートでは、条件が10個~100個ほどあり、 シートごとに数はばらばらになっております。 どうかわかる方、お力をお貸しください。