VBAでオートフィルタを使った抽出がうまくいかない理由と解決方法

このQ&Aのポイント
  • VBAでオートフィルタを使って日付の抽出を行いたい場合、条件の設定に注意が必要です。特に、開始日と終了日の条件を同時に指定する際には、演算子の設定に気を付ける必要があります。
  • 具体的には、開始日と終了日の条件を設定する際には、Operatorプロパティを使ってxlAndを指定する必要があります。これにより、開始日と終了日の両方の条件が満たされた場合にデータが抽出されます。
  • また、抽出範囲には十分なデータが含まれていることも確認してください。抽出範囲が不足している場合、正しい結果が得られないことがあります。
回答を見る
  • ベストアンサー

VBAでオートフィルタを使った抽出がうまくいきませんのでどなたか教えて

VBAでオートフィルタを使った抽出がうまくいきませんのでどなたか教えてください。 A列、C列に日付が入っていて、A列は空白以外のセルを表示し、かつC列は、開始日、終了日で抽出したいのですが、うまくいきません。 With Worksheets("sheet").Activate 開始日 = ">=" & TextBox1.Text 終了日 = "<=" & TextBox2.Text .Range("A1:N200").AutoFilter Field:=1, Criteria1:="<>" .Range("A1:N200").AutoFilter Field:=3, _ Criteria1:=開始日, Operator:=xlAnd, _ Criteria2:=終了日

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

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

上手く行かないとは,何もフィルタされないとかで挙動が不正という事じゃなく,単純にエラーが出て止まるという意味ですか? であれば,ご質問の掲示間違いじゃなくホントにマクロをミスっているのでしょう。 間違い: With Worksheets("sheet").Activate 正解: With Worksheets("sheet")

その他の回答 (1)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

基本的な間違いはテキストボックスでのデータはあくまでも文字列であるということです。日付を表すバリアント型に変えて計算させる必要があります。 1行目には項目名があるとして次のようなマクロにすることで良いでしょう。 テキストボックスはシートに上に有り、2010/5/26のように入力されるものとします。 Sub 選択() 開始日 = ">=" & DateValue(ActiveSheet.TextBox1.Text) 終了日 = "<=" & DateValue(ActiveSheet.TextBox2.Text) ActiveSheet.Range("A1").AutoFilter Field:=1, Criteria1:="<>" ActiveSheet.Range("C1").AutoFilter Field:=3, _ Criteria1:=開始日, Operator:=xlAnd, _ Criteria2:=終了日 End Sub

関連するQ&A

  • エクセルVBA データ比較抽出について・・・

    いつも皆様には大変お世話になってます Worksheets("Sheet1").Select q = ListBox1 z = TextBox1 x = TextBox2 With Range("A1") .AutoFilter .AutoFilter Field:=2, Criteria1:=q .AutoFilter Field:=3, Criteria1:=">=150", _ Operator:=xlAnd, Field:=3, Criteria2:="<=160" というようなマクロ組んだのですが・・・実は、Criteria1:=">=150のところの150をTexitbox1をその下の160のところをTextbox2を入れたいのですが・・・ 色々やったのですが、うまく動かないのです;; 分かる方いらっしゃいましたら宜しくお願い致します。

  • VBAの日付範囲の抽出について

    作業SheetのC列から日付で範囲指定して検索された行を検索workへ行をコピーしたいのですが、 日付の抽出がうまくできません。どなたかご教授願います。 また、できることなら、オートフィルタを利用せずに抽出したいのですが、書き方がわかりません。 素人の質問で申し訳ございませんが、よろしくお願いします。   開始年月日 = ">=" & S受付日Box.Text 終了年月日 = "<=" & E受付日Box.Text Worksheets("作業Sheet").Range("C1").AutoFilter _ Field:=3, _ Criteria1:=開始年月日, _ Operator:=xlAnd, Criteria2:=終了年月日 Worksheets("作業Sheet").Range("A2").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _ Worksheets("検索work").Range("A2") Worksheets("検索work").Range("2:2").Delete 'タイトル行の削除 MsgBox "抽出が完了しました。「検索結果の表示」ボタンから確認してください"

  • 「~以上、~以下」のオートフィルタの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

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

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

  • オートフィルターの抽出されない条件とは

    シートに8列の項目があり項目に対応する文字列を入力しているブックがあります。A列に識別コード(主キーみたいな感覚で)作成してこれまでは Sheet1.Range("A1").AutoFilter Field:=1, Criteria1:= _ "=*08??", Operator:=xlAnd として抽出したい文字列だけ抽出できていました。 今回、別の識別コード(具体的には月日です)をA列に新たに挿入して同じように抽出を試みましたが、何も抽出されず文字列が入力されている最終行の次の1行以前が消えてしまいます(空欄が抽出された)。しかし、完全一致であれば抽出できます。なぜでしょうか?  ちなみに新しい識別は月日なので4桁の数字で10月10日→1010というようにしています。これで10月の行を抽出したいので"=10??"で抽出をかけてみたりしているのですが・・・。

  • 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

  • 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)と同じ結果になってしまいました。 うまくフィルタリングするにはどうすればよいか教えてください。

  • 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

  • オートフィルターの使い方

    マクロでオートフィルタを使おうと思っているのです。 作成したリストの中で、日付でフィルタしようと思い 下記を作成してみましたがうまくいきません。 Worksheets("シート名").Range("A2").AutoFilter Field:=30, Criteria1:="<=2004/9/30", Operator:=xlAnd = 1, Criterial2:=">=2004/9/1" 条件と致しましては任意の期間(例:2004/9/1~2004/9/30)を抽出条件としたいのですが・・・ 又、セルには空白も存在します。 宜しくお願いいたします。

専門家に質問してみよう