VBAでオートフィルタの設定・解除方法

このQ&Aのポイント
  • VBAを使用してデータの並べ替えを行った後に、オートフィルタを設定する方法について解説します。
  • プログラムでオートフィルタを設定する際に、シート上に既にオートフィルタが設定されている場合は解除する方法についても紹介します。
  • 初心者でもわかりやすいように、具体的なコードの例を示して説明します。
回答を見る
  • ベストアンサー

VBA オートフィルタの設定・解除

VBAで、データの並べ替えを行った後、1番最後に行ごと選択してオートフィルタを次の様に設定しています。 ' オートフィルタつける Rows( 変数1 & ":" & 変数2).Select Selection.AutoFilter ----------------------------------------------- これだと、1回目のプログラムは正常に動くのですが、 次に同じシートを利用して、またプログラムを動かすと、 シート上にオートフィルタが既に設定されているままになっているので、 オートフィルタを解除して終わってしまいます。 なので、【すでにオートフィルタがシート上で設定されている場合は、オートフィルタを解除する】 ということをプログラムに組み込みたいのですが、そういった式(?)は ありますでしょうか。 ※初心者で、わかりにくい文章になっているかと思いますが、  何卒宜しくお願い致します。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Excel(エクセル) VBA入門:オートフィルタ(AutoFilter)でのデータ抽出 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_autofilter.html 【オートフィルタを解除する】 を参考にフィルタがかかっているかどうか判断するとか?

jjnnkk
質問者

お礼

御礼が遅くなり申し訳ありません。 解決できて、大変助かりました。ありがとうございます!!

関連するQ&A

  • ExcelVBAでのオートフィルタの設定

    マクロ自動記録でオートフィルタの設定・解除を行うと次のようになりました。 設定の場合 Range("A1:E10").Select ' "A1:E10"は範囲の例  Selection.AutoFilter 解除の場合 Selection.AutoFilter セル範囲を選択してSelection.AutoFilterとするだけのようですが、明確に設定・解除の指定方法はないのでしょうか。

  • Excel VBAでオートフィルターを使って他の列を空白に

    Excel VBAでオートフィルターを使ってAF列(32列)が空白ならBN列(66列)を空白する為、以下を作成したのですが、AF列(32列)に空白がない場合はBN列(66列)全て空白になってしまうのですが、どのようにしたら良いのでしょうか? 毎月300~500行になる為、オートフィルターを使用した方が処理が早いと思いしたのですが... '-------オートフィルター後、該当データーのみ範囲指定する--------- 'オートフイルターの条件を入れる列の番号(32)に条件("空白") Selection.AutoFilter Field:=32, Criteria1:="" Selection.CurrentRegion.Select 'アクティブセル領域を選択する Selection.Offset(1, 0).Select '選択領域を1行下へ移動する Selection.Resize(Selection.Rows.Count - 1).Select '選択領域を1行減らす(見出し行) Selection.Offset(0, 65).Select '選択領域の左端のをBM列にする Selection.Resize(, 1).Select '選択領域を1列右にする Selection.ClearContents '該当データーのみ空白にする Selection.AutoFilter Field:=32 'フィルターオプション解除

  • オートフィルター VBAでの設定について

    オートフィルターで0以外のものに絞って、 コピーしたいのですが、 値が0しかない場合にすべてのものをコピーするように なってしまうので、 コピーすることがないようにさせたいです。 例) Sub test() Sheets("Sheet1").Select Selection.AutoFilter ActiveSheet.Range("$A$2:$A$10").AutoFilter Field:=1, Criteria1:="<>0" Range("A2:A10").Select Range(Selection, Selection.End(xldown)).Select Selection.Copy End Sub このようなコードの場合にA2:A10の値が0しかなかった場合に コピーしている状態をなくしたいのですが、 どこのコードを変えたらいいでしょうか。 回答よろしくお願いいたします。

  • VBA オートフィルタの使い方について

    VBAのオートフィルタの使い方について 教えていただきたい部分がございます。 画像について ①~④までの果物、個数、値段を別のシートにコピーしたいと思っています。 それまではできるのですが、 ⑤個目の果物が増えたりした場合も自動的にコピーして 別シートに貼り付けれるようにしたいと思っています。 ①でフィルタして、コピーして、貼り付けて 次は②でフィルタして、コピーして貼り付けてを繰り返すのに ⑤個目が増えたり、④がなくなった場合でも ある分だけをコピーして貼り付けれるようにしたいです。 一つずつ Selection.AutoFilter Field:=1, Criteria1:="①" みたいな感じでやらずに①~ある分だけフィルタをかけるみたいなやり方はないでしょうか。 説明がわかりずらくて、申し訳ございません。 回答をよろしくお願いいたします。

  • オートフィルタで抽出したデータをVBAで貼り付けしたい

    質問させていただきます。 エクセルで仕入帳を作っています。 各取引先ごとに1枚のシートになっているのですが、 該当する月をオートフィルタで抽出して、そのデータを1枚のシートに貼り付けていき、各月ごとにデータをまとめたいと思っています。 ユーザーフォームで月を入力してオートフィルタで抽出しているのですが、データのないシートの場合不要な部分までコピー&ペーストされてしまいます。 これを回避するにはどのようにコードをかけばいいのでしょうか。 よろしくお願い致します。 現在はこのようなコードで抽出しています。 Private Sub CommandButton1_Click() Application.ScreenUpdating = False Worksheets("sheet2").Select Range("H1:H17").Select Range("H17").Activate Selection.AutoFilter Field:=8 Rows("2:2").Select Rows("2:500").Select Selection.ClearContents RowIndex = 3 '行番号の初期値設定 Do While Worksheets("目次").Cells(RowIndex, 1).Value <> "" '拾ったセルの値が空でない間ループ内の処理をする 検索値 = UserForm1.TextBox1.Text DataSheetName = Worksheets("目次").Cells(RowIndex, 1).Value Worksheets(DataSheetName).Select Range("A2").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.AutoFilter Selection.AutoFilter Field:=13, Criteria1:=検索値 & "月分" Set tbl = ActiveCell.CurrentRegion tbl.Offset(2, 0).Resize(tbl.Rows.Count - 2, tbl.Columns.Count).Select Selection.Copy Worksheets("sheet2").Select IRow = Range("A" & Rows.Count).End(xlUp).Row Range("A" & IRow + 1).PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False Worksheets(DataSheetName).Select Selection.AutoFilter Field:=13 RowIndex = RowIndex + 1 '行番号カウントアップ Loop Application.ScreenUpdating = True Worksheets("sheet2").Select Range("A2").Select Unload UserForm1 End Sub

  • EXCEL VBAでのオートフィルター

    EXCELのVBAで日付のデータを 過去1日、過去1週間、過去1ヶ月などのボタンを作成し クリックしたらオートフィルター機能で各条件に 合ったデータを表示するにようにしようと思っています。 しかし、フィルターがない状態でクリックすると 正常に機能するのですが連続してボタンを クリックするとうまくいきません。(表示がかわらない) 良い対策方法、または正しいやり方を教えてください。 よろしくお願いします。 EXCEL2000 Sub ボタン_クリック() Rows("3:3").Select Selection.AutoFilter Selection.AutoFilter Field:=1, _ Criteria1:=">=" & , 条件日,Operator:=xlAnd End Sub

  • VBAでオートフィルタの可視セルクリア後空白行削除がうまくできません

    VBA初心者です。 オートフィルターで抽出した行を削除したくて、以下のように書いたのですが、最後の一文でエラーになってしまいます。 ◆エラー内容◆ 実行時エラー1004 重複する選択範囲に対してそのコマンドを使用することはできません。 ◆書いたVBA◆   Range("A2").Select Selection.AutoFilter Field:=1, Criteria1:="=1111", Operator:=xlAnd 'オートフィルターで「1111」を抽出 Dim r As Range Set r = Range(Range("A3"), Range("A" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible) r.ClearContents 'A列の可視セルの値をクリア Range("A2").Select Selection.AutoFilter 'オートフィルターの解除 r.SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'A列が空白の行は削除→ ココがエラーになります --------------------------------------------------------- 元のファイル構成は2行目に項目名で、3行目からデータが入っています。 いろいろ調べたのですが、よくわからなかったので教えていただければ 幸いです。 宜しくお願いします。

  • エクセルVBAで5行目からオートフィルタモードに設定したいたい

    抽出項目が5行目にあり、オートフィルタを5行目から表示させたいのですが、うまくいきません。 Macro1では項目が消えてしまい、▼が1行目に、Macro2では項目は残りますが、▼は同じく1行目になってしまいます。どうしたら5行目にオートシェイプの▼が配置できるでしょうか? Sub Macro1() Range("A5").Select Selection.AutoFilter End Sub Sub Macro2() Range("A5").AutoFilter End Sub

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

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

  • 1行のVBAコードでフィルタの解除したい

    フィールド1 フィールド2 1         あ 2         い 3         う で、コマンドボタンを押したら、 A列にフィルタがかかっていても、 B列にフィルタがかかっていても、解除したいのですが、 どういうコードにすればいいのでしょうか? Private Sub CommandButton1_Click() Selection.AutoFilter Field:=1 Selection.AutoFilter Field:=2 End Sub こうするしかないでしょうか? 今は2列だから良いのですが、実際のデータは、30列以上あります。 その場合、1行のVBAコードでフィルタの解除が出来ればいいなーと思っています。 ご回答よろしくお願いします。

専門家に質問してみよう