Excelマクロで3つ以上の条件でお客様名を抽出する方法

このQ&Aのポイント
  • Excelマクロを使用して、特定の条件でお客様名を抽出する方法についてご質問いただきました。
  • 現在、提供されたマクロコードでは、一つの列に3つ以上の条件を指定することができないことが分かっています。
  • 提供されたデータ表にはお客様名が少ないですが、実際にはさまざまなお客様名が存在します。特定した5社以外のお客様情報を抽出するためには、他の方法を検討する必要があります。
回答を見る
  • ベストアンサー

Excelマクロ:オートフィルタ3つ以上の条件

添付の画像を使って質問させて頂きます。 バージョンは2010です。 お客様名 A,B,C,D,E 以外のお客様名を抽出するようにマクロを組みたいのですが ActiveSheet.Range("$A$1:$D$15").AutoFilter Field:=2, Criteria1:= _ "<"&">&"A", Operator:=xlOr, Criteria2:="<"&">&"B"" の様に考えましたが一つの列に3つ以上の条件では対応できないことが分かりました。 添付の画像は実際使用している表を簡素化しているため お客様名が少ないですが、実際は多様なお客様名があります。 その中で特定した5社以外のお客様の情報を抽出したいです。 宜しくお願い致します。

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

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

>特定した5社以外のお客様の情報を抽出したい sub macro1()  dim a  a = application.transpose(range("B2:B" & range("B65536").end(xlup).row).value)  a = filter(a, "A", false)  a = filter(a, "B", false)  a = filter(a, "C", false)  a = filter(a, "D", false)  a = filter(a, "E", false)  range("A:D").autofilter field:=2, criteria1:=a, operator:=xlfiltervalues end sub とかでいいです。

momo-a
質問者

お礼

有難うございます! コピペしてお客様名の部分を変えたら すんなり出来ました! ご協力有難うございました!

その他の回答 (3)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! A・B・C・D・E 「に等しい」でオートフィルタをかけるのは簡単ですが、 今回はそれ以外というコトですので・・・ 安直な方法ですが作業列を1列使ってその列だけでオートフィルタをかけてみました。 Sub Sample1() Dim lastRow As Long lastRow = Cells(Rows.Count, "A").End(xlUp).Row If lastRow > 1 Then Range("E:E").Insert Range(Cells(2, "E"), Cells(lastRow, "E")).Formula = _ "=IF(OR(B2=""A"",B2=""B"",B2=""C"",B2=""D"",B2=""E""),"""",1)" Range("A1").CurrentRegion.AutoFilter field:=5, Criteria1:=1 End If End Sub ※ 手を動かしてやることを単純にコードにしただけです。m(_ _)m

momo-a
質問者

お礼

有難うございます! 作業列を作ることが出来るんですね! 勉強になりました。 ご協力有難うございました!

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

条件がアルファベットのみならですが。。。 ActiveSheet.Range("$A$1:$D$15").AutoFilter Field:=2,Criteria1:=Array("F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"), Operator:=xlFilterValues のようにすれば、"A"~"E"を除外できます。

momo-a
質問者

お礼

有難うございます! お客様名は漢字・カタカナ・アルファベット等様々でした。 ご協力ありがとうございました!

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

オートフィルターでは無いですが…… Range("A1:D15").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= Range("F1:J2"), Unique:=False

momo-a
質問者

お礼

ご協力ありがとうございます! どうしてもオートフィルターでなければいけなかったので 次回の参考にさせて頂きます☆ 有難うございました!

関連するQ&A

  • オートフィルタ 検索

    オートフィルタで三つの条件でデータを抽出するマクロを作っています 以下のような記述は誤りでしょうか? ActiveSheet.Range("$B$2:$D$114").AutoFilter Field:=1, Criteria1:="=02722*" _ , Operator:=xlOr, Criteria2:="=02729*" _ , Operator:=xlOr, Criteria3:="=02737*" 表はこのようなものです ↓キー 番号      名前      値 027**     **     * 027**     **     * 027**     **     * ・ ・ ・

  • Excelマクロでオートフィルターからコピペ

    ファイルのB列の値から0以外の値をオートフィルターで抽出し、値を、別のファイルのD列の一番下に貼りつけるマクロを作っていますがうまくいきません。 今作ったのは Sub macro1() If ActiveSheet.AutoFilterMode = False Then Range("A:G").Select Selection.AutoFilter Else Selection.AutoFilter Range("A:G").Select Selection.AutoFilter End If Selection.AutoFilter Field:=2, Criteria1:="<>0", Operator:=xlAnd Range("A1").Select Range("B2", Range("B2").End(xlDown)).Select Selection.Copy Windows("貼りつけるファイル名").Activate Cells(Rows.Count, 4).End(xlUp).Offset(1).Select ActiveSheet.Paste End Sub です。 フィルターで0以外の値を抽出しコピーまではできていますが、貼りつけるところでエラーがでます。 Microsoft Visual Basic 400 というエラーです。 何が悪いのか分かりません・・・。 分かる方いましたらご教授ください。よろしくお願いします。

  • VB.netでのオートフィルタについて

    VB.netでプログラミングをしてるのですが、 xlapp.Selection.autofilter(field:=9, criteria1:="",operator:=xlor, Criteria2:="*予") でエラー(xlorが宣言されてません)で出てしまいます。 どうしたらいいのですか?

  • オートフィルタ マクロについて

    質問です。 オートフィルタで複数列を1つの条件で抽出したいのですが、教えてください。 たとえばA列が納品書No.・B列が受注No.・C列が商品No.なのですがすべて数字の為、出来ればInBox一回でA-C列を検索してほしいです。 指定納品書NO 受注NO 元品番 21812 3252608 77 21880 3307989 32B 22053 3389769 95414A 22050 3389770 67312H 22052 3389771 67312H 22050 3389773 67118H 以下の様なマクロを作ってみましたが、 A-C列全てに一致しないと抽出しないようです。 どなたかご教授いただけないでしょうか? マクロ '条件1 の設定 Dim 検索NO As Variant '抽出キーの入力指示 検索NO = InputBox("検索NOを入力てください。") 'キャンセルした場合の処理 If 検索NO = Empty Then Exit Sub End If 'オートフィルタがかかっていなかったらかける 'かかっていたら念の為一度解除し再設定 If ActiveSheet.AutoFilterMode = False Then Range("A2:O2").Select Selection.AutoFilter Else Selection.AutoFilter Range("A2:O2").Select Selection.AutoFilter End If Selection.AutoFilter Field:=1, _ Criteria1:=">=" & 検索NO, Operator:=xlAnd, Criteria2:=" " & 検索NO Selection.AutoFilter Field:=2, _ Criteria1:=">=" & 検索NO2, Operator:=xlAnd, Criteria2:=" " & 検索NO2 Selection.AutoFilter Field:=3, _ Criteria1:=">=" & 検索NO3, Operator:=xlAnd, Criteria2:=" " & 検索NO3 AutoFilterMode = False Application.ScreenUpdating = True End Sub よろしくお願いいたします。

  • 特定のセルをフィルタするマクロを作りたい

    特定のキーワードが含まれるセルをフィルタするマクロを作りたいです。 使用環境はExcel2010です。 口頭ではわかりにくいので、画像を添付します。 添付画像のように、それぞれの人物名と点数が一覧になった表があります。 特定の名前の人で点数が一定以下の行をフィルターしたいのですが、毎回フィルターで名前を選ぶのが面倒なので、マクロの記録機能で下記のマクロを作成しました。 Selection.AutoFilter ActiveSheet.Range("$A$1:$C$7").AutoFilter Field:=2, Criteria1:="=鈴木", _ Operator:=xlOr, Criteria2:="=田中" ActiveSheet.Range("$A$1:$C$7").AutoFilter Field:=3, Criteria1:="<70", _ Operator:=xlAnd 上記のマクロで、「田中」と「鈴木」のみ、点数が70点に満たなかった行を抜き出しています。 しかし、他部署の人物も調査の対処に含めるため、E2:E7セルに調査したい対象の名前を入れ、自動的にセルに入力された名前でフィルタリングされるようにしたいです。 この際のマクロの記載方法を知りたいです。 *部署によって人数が異なるため、E2:E7セルに入力する名前がすべて埋まるとは限りません。 *実際の名前と点数は毎月新しいExcelブックで送られてくるので、フィルター用のExcelシートにコピーペーストで張り付けて使用予定です。 *記載されている名前や点数は例です。

  • EXCEL2000のVBAでオートフィルタの条件について

    いつもお世話になります。 VBAでオートフィルタの条件を、4/1~4/30まで指定する時に、 AutoFilter Field:=1, Criteria1:=">=2003/4/1", _ Operator:=xlAnd, Criteria2:="<=2003/4/30" というような式になると思うのですが、この日付の条件「>=2003/4/1」と「<=2003/4/30」をあらかじめシートのA1とB1セルに入力しておき、 AutoFilter Field:=1, Criteria1:="A1", _ Operator:=xlAnd, Criteria2:="B1" としたいのですが、このままでは、当然検索条件自体が「A1」「B1」となってしまいますよね。。。 セルを指定することって、できますでしょうか? 宜しくお願いします。

  • マクロ オートフィルタで困っています。

    マクロ オートフィルタで困っています。 1列目と2列目からそれぞれ条件をフィルタで抽出し、抽出された行を削除するマクロを組んだのですが(下記)、Bの条件が表にない場合に2行目から下が全て削除されてしまいます。 元の表は毎週変わるため、抽出する条件があるかないかはその時次第です。 オートフィルタにこだわってはいませんが、その他の抽出方法もいまいち分からず……。 どのようにすればよいのか、教えていただけますでしょうか。 宜しくお願い致します。 <マクロ> Sub Macro() Selection.AutoFilter Field:=1, Criteria1:="A" Selection.AutoFilter Field:=2, Criteria1:="B", Operator:=xlAnd Dim gyou(1) As Long gyou(0) = 2 gyou(1) = Range("A1").CurrentRegion.Rows.Count Rows(gyou(0) & ":" & gyou(1)).Select Selection.Delete Shift:=xlUp End Sub

  • EXcelオートフィルタのオプション設定で条件として変数をマクロで組むには?

     オートフィルタ機能を使い、指定期間内のデータを抽出するようにマクロを組みたい。指定期間が一定ではないので変数を設定したいのですがうまくいきません。下記はマニュアルで入力したものをマクロに記録したものです。指定期間は他のBookのセルに入力画面として設けてあります。例えばBook2/B1(開始)~B2(終了)。 Range("A1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:=">=2005/8/21", Operator:=xlAnd _ , Criteria2:="<=2005/9/20" Range("C1").Select End Sub

  • オートフィルタをかけるマクロ

    A12からA50に表示されている内容でB列にオートフィルタをかけ、印刷をする というマクロですが、 Selection.Autofilter field:=2, Criteria1:=Range("A12") Activesheet.Printout を39回コピーし、"A12"の部分を"A13"............"A50"に変えていきました。 本当はもっとスッキリできると思うのですが、そこがまだよくわかりませんので どなたか教えていただけないでしょうか。 A列は必ず50までデータがあるとは限りません。 エクセル2003使用の初心者です。 よろしくお願いします。

  • 「~以上、~以下」のオートフィルタのVBAについて

    こんばんは、オートフィルタについて2つ質問させてください! 1つ目は、10列目に入っている値で、20170901以上かつ20170931以下の値をオートフィルタで抽出しようと以下のVBAを入力しましたが、該当するデータがあるにも関わらず抽出ができませんでした(T_T)何か間違っているのでしょうか…?! Range("A1:K" & Cells(1).CurrentRegion.Rows.Count).AutoFilter Field:=10, Criteria1:=">=20170901" _ , Operator:=xlAnd, Criteria2:="<=20170931" 2つ目は、同様のデータでInputBoxを利用し、入力した数字をそのままオートフィルタの条件に反映しようとする以下のVBAを入力してみました。しかし、やはり記述の方法が違うのか該当するデータがあるにも関わらず抽出は成功しませんでした・・・。 Dim 日付 As Date 日付 = InputBox("処理月を入力して下さい(例:201709)") Range("A1:K" & Cells(1).CurrentRegion.Rows.Count).AutoFilter Field:=10, Criteria1:=">= 日付 & 01" _ , Operator:=xlAnd, Criteria2:="<= 日付 & 31 " どなたかご助力いただけるととても助かります、どうぞよろしくお願いいたします!m(_ _)m

専門家に質問してみよう