エクセルのマクロでフィルタを判別する方法

このQ&Aのポイント
  • エクセル2000で使用されるオートフィルタを判別するマクロの記述方法を教えてください。
  • 特定のフィルタが適用されている場合と適用されていない場合で、マクロの動作を切り替える方法を教えてください。
  • マクロを使用して、フィルタが適用されていない場合に特定の操作を実行する方法を教えてください。
回答を見る
  • ベストアンサー

エクセルのマクロでフィルタを判別するマクロ

いつもお世話になっております。 エクセル2000で オートフィルタを使用した表があります。 やりたいことは以下の通りです。 AutoFilter Field:=1(一番左側のフィルタ)が、 なんらかのフィルタリングがされている (フィルタの▼が青い状態)のときはそのままで、 なにもフィルタリングされていない (フィルタの▼が黒い状態)のときは Selection.AutoFilter Field:=1, Criteria1:="<>#N/A", Operator:=xlAn を実行させたいのです。 どのようなマクロを記述すればいいか ご教示ください。 よろしくお願いします。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。KenKen_SP です。 こんな感じかと。。 Sub Sample()      Dim AF As AutoFilter   On Error Resume Next   Set AF = ActiveSheet.AutoFilter   If Not AF Is Nothing Then     If AF.Filters(1).On = True Then       MsgBox "一番左側のフィルタがONです"     Else       MsgBox "一番左側のフィルタがOFFです"       AF.Range.AutoFilter Field:=1, _                 Criteria1:="<>#N/A", _                 Operator:=xlAnd     End If   Else     MsgBox "AutoFilter がない"   End If   Set AF = Nothing End Sub

oresama
質問者

お礼

おおおぉ! 完璧です。 助かりました。 本当にありがとうございます☆

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

VBAでは、該当シートにフィルタ設定が設定されいるかどうかのチェックしか出来ませんので、フィルタの個々の設定状態を取得する事も出来ません。 従って、常に「フィルタ解除」「フィルタ設定」の手順を踏む事になります。 Selection.AutoFilter Field:=1 Selection.AutoFilter Field:=1, Criteria1:="<>#N/A", Operator:=xlAn

関連するQ&A

  • excel2000のオートフィルタマクロ

    マクロ記録の簡単な編集程度の知識しかありません。 C1に入っている文字列を、完全一致ではなく、”含む”状態でオートフィルタしたいのですが、 どの様に記述すればいいですか? 現状、下記のようになっています。 Selection.AutoFilter Field:=2, Criteria1:="C1", Operator:=xlAnd よろしくお願いいたします。

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

    マクロ オートフィルタで困っています。 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

  • オートフィルタ 検索

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

  • エクセルのマクロ

    勉強を始めたばかりで処理を繰り返す項目をいろいろ調べたのですがうまくいきません。教えてください。 オートフィルタで3列目を”東京 ”という文字でを抽出したあとである処理をし、その後同じ列で今度は”神奈川 ”を選び同様の処理をする。また今度は 次は"千葉”と繰り返したいのです。 マクロを見てみると Selection.AutoFilter Field:=3, Criteria1:="1"    何らかの処理 Selection.AutoFilter Field:=3, Criteria1:="2"    何らかの処理 Selection.AutoFilter Field:=3, Criteria1:="3"    何らかの処理 となっています。こうなると必要な数だけ これをコピーしないといけないので ループのようなもので下記の■の部分の 数字を1.2.3.~と処理を繰り返す毎に 増やして生きたいのです。 そしてリストの最後にきたらおしまいにしたいのですが・・・・。FOR NEXT とか DO LOOP とか 試しましたが、私の幼稚な知識ではうまく動いてくれませんでした。すみませんがよろしくお願いします。 Selection.AutoFilter Field:=3, Criteria1:="■" 処理

  • エクセルでのフィルタについて

    エクセルのことで、教えてください。 1つのブックに、たくさんのシートがあります。 1枚は、印刷用シートでA1セルの数字によって内容を変更できるようになっています。 2枚目以降は1列目に1から45までの数字、2列目以降に文章があります。 で、2枚目以降の2列目を印刷用シートに図のリンク貼り付けしておいて、印刷用シートのA1セルの数字で、2枚目以降のシートをフィルタリングすると、印刷用シートの内容が変更するようにしています。 そのフィルタリングのために、以下のようなマクロを組んでいます。 a = Range("A1").Value Sheets("Sheet2").Select Selection.AutoFilter Field:=1, Criteria1:=a Sheets("Sheet3").Select Selection.AutoFilter Field:=1, Criteria1:=a Sheets("Sheet4").Select Selection.AutoFilter Field:=1, Criteria1:=a       以下シートの枚数だけ続く。 これだとこのマクロが実行完了するまである程度の時間を要するので、もう少し時間を短縮できるような記述に出来ないかというのがお聞きしたいことです。マクロの記録で作成したものを参考にしたのでこうなっているんですが、何かうまい方法があれば教えてください。

  • EXCEL2003のオートフィルターで、今日又は昨日をマクロで抽出した

    EXCEL2003のオートフィルターで、今日又は昨日をマクロで抽出したいのです。 2007の、日付フィルターに相当するものになります。 (1)http://q.hatena.ne.jp/1131101536 を参考にして、 Selection.AutoFilter Field:=1, Criteria1:="=" & Date, Operator:=xlAnd としましたが(A列に日付データが入っています)、実行すると「2010/05/28」で検索され抽出されません。 手打ちで「2010/05/28」を「2010/5/28」に変更すると抽出されました。 (2)使用していないH1セルへ「=today()」と入れ、  Criteria1: Range("H1") としましたが、シリアル値で検索されるためかやはり出ませんでした。元のデータはもちろんシリアル値なので、表示はyyyy/mm/ddに設定しています。 (3)次に  Criteria1:="=" & Range("H1") としましたが、(1)と同じ結果になってしまいました。 うまくフィルタリングするにはどうすればよいか教えてください。

  • Excel のフィルター

    下記の表があり、フィルターで1を選ぶ場合に自動マクロで記録すると Selection.AutoFilter Field:=1, Criteria1:="1" となります。 Criteria1:=~ ~の部分をセルで参照するにはどうすればいいのでしょうか?単純にCriteria1:=cells(3,1) としてもうまくいきません。 正しい記述方法をお願いいたします。よろしくお願いします。 A列  B列 1 りんご 2 みかん 3 すいか 1 りんご 2 みかん 3 すいか 1 りんご 2 みかん 3 すいか

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

    質問です。 オートフィルタで複数列を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 よろしくお願いいたします。

  • 【エクセル マクロ】オートフィルター後の行削除

    Excel2003を使用しています。 オートフィルターを利用した作業をマクロの記録で処理していて 抽出されたデータを行ごと削除しているのですが Selection.AutoFilter Field:=1, Criteria1:="仕入先コード" Rows("4:2102").Select Selection.Delete shift:=xlUp Selection.AutoFilter Field:=2, Criteria1:="仕入先合計" Rows("7:2008").Select Selection.Delete shift:=xlUp …と、上記のような行番号で指定されてしまい 毎月データ数が増減するので、うまく処理出来ません。 (データは、テキストファイルからエクセルに取り込んでいます) 過去の例で近いものがあれば記述の中に取り込んでみましたが… これもうまくいきませんでした。 毎月変わるデータ数に対応できるマクロの記述を教えて下さい。 よろしくお願いします。

  • 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

専門家に質問してみよう