• ベストアンサー

ExcelのAutoFilterで抽出失敗を表示したい

Excelのマクロについて質問です。 AutoFilterで抽出されなかった場合 そのことを表示して作業を終了させたいのです。 たとえば _A 1 科目 2 英語 3 数学 4 国語 という表を作ったとして Range("A1").AutoFilter 1, "数学" これで「科目」の下に 「数学」のみが表示されますよね。 しかし Range("A1").AutoFilter 1, "社会" これですと「科目」のみが表示されてしまいます。 しかし、欲しい「科目」のデータはなかったわけですから この場合には抽出できなかった旨を表示させて 作業を終了させたいのです。 マクロについては こちらでいろいろと質問させていただき おかげさまで、少しずつですが 使えるようになってきました。 今回もよろしくお願いいたします。

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

  • ベストアンサー
  • kmmk16
  • ベストアンサー率46% (32/69)
回答No.2

一例です Range("A1").AutoFilter 1, "社会" If ActiveSheet.AutoFilter.Range.Columns(1) _ .SpecialCells(xlCellTypeVisible).Count = 1 Then Range("A1").AutoFilter MsgBox "データがありません" End If

niftynejp
質問者

お礼

ありがとうございます! うまくいきました。 早速使わせていただきますね。 これからもよろしくお願いいたします。

その他の回答 (3)

  • oka-y
  • ベストアンサー率0% (0/2)
回答No.4

下記も参考になりそうです。 エクセル技道場 http://www2.odn.ne.jp/excel/ の マクロ http://www2.odn.ne.jp/excel/waza/macro.html の 行の削除 http://www2.odn.ne.jp/excel/waza/macro.html#SEC6

niftynejp
質問者

お礼

回答ありがとうございます。 このページは 今の私には(これからも私にも?)難しかったですが いろいろと参考になりそうです。 これから大いに使わせていただきますね。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

EXCEL2000限定かも If Range("a65536").End(xlUp).Row = 1 Then MsgBox "抽出なし" End If

niftynejp
質問者

補足

明記しなくて申し訳ありませんでした。 実行しても反応がないのは Excel2002だからかもしれませんね。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

抽出範囲に、可視セルがあるかどうかで処理を分岐すればどうでしょうか。 Set vc = Range("A2:A10").SpecialCells(xlCellTypeVisible) If vc Is Nothing Then   MsgBox "抽出データはありませんでした。" End If

niftynejp
質問者

補足

明記しなくて申し訳ありませんでした。 Excel2002なのですが 実行しても反応がありませんでした。

関連するQ&A

  • Excelマクロで他シートへの抽出:エラー

    こちらの質問 http://okwave.jp/qa/q4760155.html を参考に、エクセルマクロを作りました。 Sheet1の10列目(J)に@が入っている行をすべて、 Sheet2に抽出表示します。コードは次になります。 Private Sub Worksheet_Activate() With Sheets("Sheet1") .AutoFilterMode = False .Range("A1:N1").AutoFilter .Range("A1:N1").AutoFilter Field:=10, Criteria1:="@" .Range(.Range("A1"), .Range("A1").SpecialCells(xlLastCell)).SpecialCells(xlCellTypeVisible).Copy Range("A1") .AutoFilterMode = False End With End Sub このマクロを実行すると、確かにSheet2では抽出が行われるのですが、 同時にSheet1の内容も抽出された内容に変わってしまいます。 どこに問題があるのでしょうか。 よろしくお願いします。

  • マクロのAutoFilter Fieldについて

    初めての質問のため、足りない情報などあるかもしれませんので、 その際はご指摘いただけますと幸いです。 マクロのAutoFilter Fieldの場所を可変させたい。 調べ方が甘いだけだと思いますが、AutoFilter Fieldの値を可変させる方法を教えてください。 縦軸に製品、横軸に日付の情報を持つ計画表に対し、 とある日の製品計画情報を抽出したいと考えています。 マクロサンプル記載 Range("$A$2:$z$100").AutoFilter Field:="A1", Criteria1:="製品名" ※A1にはフィルタをかけたい列番号が引数として入っています。 上記の"A1"部分を1や2などの定数にすれば問題ないのですが、 日付によって計画が違うため、可変させたいと考えています。 何か良い方法があれば教えていただけますと幸いです。

  • excel 文字抽出マクロの編集についてですが・・・

    マクロで指定した文字を含むデータを抽出するマクロを 作っていたのですが、うまく作動しません。 どこが悪いか教えてください。 Sub 指定した文字データの抽出() Dim strMoji As String strMoji = InputBox("検索文字を入力してください") strMoji = "*" & strMoji & "*" Sheets("Sheet2").Activate Cells.Clear With Sheets("Sheet1") .Range("A2").AutoFilter Filde:=3, criterial:=strMoji .Range("A2").CurrentRegion.Copy _ Destination:=Sheets("Sheet2").Range("A2") .Range("A2").AutoFilter End With Sheets("Sheet2").Columns("A:D").AutoFit End Sub

  • AutoFilterについて

    AutoFilterについて、下記のコードを作成しました。 シート:部品表のE列:testで抽出 → オートフィルタで抽出された件数を シート:部品数抽出のセル(2,6)に表示→ シート:部品表のE列:test1で抽出→ シート:部品数抽出のセル(4,6)に 表示するようにしましたが、 セル(2,6)の値が表示されてしまいます。 コードのどこに問題があるでしょうか。 Sub 部品数抽出オートフィルタ() Dim r As Long  '最終行用 Dim r1 As Long  '表示されているデータの最終行を取得 Dim countdata As Long  'データ数カウント用 '●[E列 モデル名:test] '最終行を取得 r = Cells(Rows.Count, 1).End(xlUp).Row 'E列が[test]のものを抽出 Range("A1").AutoFilter Field:=5, Criteria1:="test" '表示されているデータの最終行を取得 r1 = Range("A1").SpecialCells(xlCellTypeLastCell).Row '実行時エラー:1004(該当するデータがありません)が出た場合に ’この行より下ではエラーを無視する On Error Resume Next If r1 = 1 Then countdata = 0 Else  '表示されているデータ数を取得 countdata = Range(Cells(2, 1), Cells (r, 1)).SpecialCells(xlCellTypeVisible).Count End If 'オートフィルタで抽出された件数を別のシートのセルに表示 Sheets("部品数抽出").Cells(2, 6).Value = countdata 'この行より下ではエラー無視が解除される On Error GoTo 0 '絞り込み結果のみクリア ActiveSheet.ShowAllData '●[E列 モデル名:test1] r = Cells(Rows.Count, 1).End(xlUp).Row Range("A1").AutoFilter Field:=5, Criteria1:="test3" On Error Resume Next r1 = Range("A1").SpecialCells(xlCellTypeLastCell).Row If r1 = 1 Then countdata = 0 Else countdata = Range(Cells(2, 1), Cells(r, 1)).SpecialCells(xlCellTypeVisible).Count End If Sheets("部品数抽出").Cells(4, 6).Value = countdata On Error GoTo 0 ActiveSheet.ShowAllData End Sub

  • AutoFilterプロパティについて

    Excel VBAのAutoFilterプロパティについて質問です。 (Excelのバージョンは2010です。) ■背景 ・マクロ実行時、オートフィルタを解除し、終了直前に実行前の抽出状態を復元するマクロを組んでいます。 ・実行前の抽出情報を取得するために、ワークシートのAutoFilterプロパティから必要な情報を事前に配列に格納しています。 (具体的には、Criteria1、Operator、Criteria2の3つのプロパティをn×3次元の配列に格納) ■問題 ・以下の通り、ワークシートにデータが入力されていたとします。   A列  1 10  2 11  3 11  4 11  5 12 ・通常、「トップテン」のオートフィルタで「上位3項目」などのように指定する場合は、以下のプロパティをAutoFilterメソッドに渡します。(細かい記述は割愛)   Criteria1:= 3   Operator:= xlTop10Items  ※Excelのオートフィルタの仕様上、上述の例で言えば、A1~A4が表示されます。 ・このような絞り込みがなされたフィルタ情報を取得しようとした場合、以下の様にAutoFilterプロパティに格納されているため、このまま配列に受け渡した上で、再度オートフィルタを復元しようとしてもエラーとなってしまいます。   Criteria1:= ">=11"   Operator:= xlTop10Items  ※Operatorに敢えて「0」を受け渡し、「11以上」と指定させるようフィルタを復元することで、    結果的な表示はA1~A4が表示された状態に戻せるのですが、    本来であれば「上位3項目」というフィルタを復元させたいです。 ・上記の例の場合、「上位2項目」「上位3項目」「上位4項目」いずれの絞り込みをしたとしても、AutoFilterプロパティには「11以上」という状態しか保持していないため、「上位何項目で絞り込んだか」をRANK関数等から逆算することもできません。 ■質問 ・「トップテン」のオートフィルタで絞り込みをした場合、「上位何項目で絞り込んだか」を取得するようなプロパティ、または方法(多少無理矢理でも構いません)をご存知でしたら、ご教示頂ければ幸いです。 以上、宜しくお願い致します。

  • マクロ AutoFilter・・Criterial

    ActiveSheet.Range("$A$2:$P$5000").AutoFilter Field:=9, Criteria1:="1" というオートフィルターのマクロがあります。 Criteria1:= の次にある ”1” はどういう意味ですか?

  • 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:=終了日

  • 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 "抽出が完了しました。「検索結果の表示」ボタンから確認してください"

  • エクセル ○○以外を抽出

    (シート1) A     B      1 リンゴ   沖縄    2 みかん  北海道 3 かき    滋賀 4 さんま   山口 5 かき    滋賀 6 いわし   東京 7 リンゴ   沖縄 で、リンゴ・みかん・かきの行以外を別シートに自動反映する方法ありませんか? リンゴだけを抽出といった方法は分かったのですが、、、      ↓(ちなみにそれは) Private Sub CommandButton3_Click() With Sheets("Sheet1") .AutoFilterMode = False .Range("A1:M1").AutoFilter .Range("A1:M1").AutoFilter Field:=1, Criteria1:="リンゴ" .Range(.Range("A1"), .Range("A1").SpecialCells(xlLastCell)).SpecialCells(xlCellTypeVisible).Copy Range("A1") .AutoFilterMode = False End With End Sub のようにやりました。 すんません、教えてください!!!

  • エクセルVBAのAutoFilterについて

    はじめまして。今回初めてエクセルVBAに挑戦していますが、行き詰まってしまいました。 エクセルで顧客管理データベースを作っています。シートの一番上の行に、ID、顧客名、依頼内容、依頼日、処理終了日・・・・などデータベースでいう「フィールド名」を入力し、2行目以下に顧客データを打ち込む形です。 当社では週一回会議で、前の週の新規顧客名の一覧と前の週に処理終了した顧客名の一覧をリストにして配りますが、エクセルVBAを使ってそのリストを作るプログラムを作ろうと試みました。  まず、UserFormを用いて、抽出したい期間(何年何月何日から何年何月何日)をそれぞれTextBox1、TextBox2の値で所得します。そして、開始年月日をDateFromという変数に代入、終了年月日をDateToという変数に代入し、AutoFilterで検索して別シートにコピーするという流れです。  前置きが長くなりましたが、質問です。 1 この変数の定義、つまり DateFrom = UserForm1.TextBox1.value という文で所得しようと思いますが、うまくいきません。書式がおかしいのでしょうか? 2 AutoFilterの使い方を「新しいマクロの記録」を使って見てみると Selection.AutoFilter Field:=10 _ , Criteria1:=">=2004/4/27", Operator:=xlAnd _ , Criteria2:="<=2004/5/10" というかたちになるようですが、>=2004/4/27の部分を変数を使って指定するには、書式はどのようにしたらいいのでしょうか。このまま>=DateFromの形ではうまくいかないようです。

専門家に質問してみよう