【VBA】オートフィルタ 抽出されたデータがあるかどうか

オートフィルタで絞り込んだ時、該当するデータ(抽出データ)があるかどうかを判断するVBAを紹介します。

抽出する対象がない(データがない)と問題がありますか。

オートフィルタで絞り込んだ時に必ず抽出データが存在するなら問題ないことが多いです。

そうですよねぇ。

ではオートフィルタで絞り込んだあと、どのようなVBAを続けることが多いでしょう。

絞り込んだデータをコピペしたり、削除したり・・・ですかね。

そうですね。
では順を追って見ていきましょう。

目次

オートフィルタで絞り込むVBA

Sub AutoFilter()

Sheets(“DATA”).Range(“A1:E20″).AutoFilter Field:=1, Criteria1:=”aaa”

End Sub

シート「DATA」のA1からE20までデータが入っています(1行目はタイトル)。
その範囲を選択し、オートフィルタをかけます。
今回はA列の「aaa」という文字列を絞り込み(抽出し)ます。

さて、絞り込んだデータを新しいシートへ貼り付けることにします。

Sheets(“DATA”).Range(“A1:E20”).Copy
Sheets(“NEW”).Range(“A1”).Select
ActiveSheet.Paste
Application.CutCopyMode = False

絞り込みに該当するデータがある場合、タイトル行とA列が「aaa」となっている行全体が新しいシートへ貼り付けられました。

絞り込みに該当するデータが無い場合はどうなるでしょう。

答えは、A1からE20まで「全データが貼り付けられる」です。

絞り込みに該当するすデータを削除するVBAの場合はA1からE20まで「全データが削除」になります。

おもった以上に困る結果になりますね。

そうですね。解決策は次のうようになります。

解決策

絞り込む前、対象データが有るかどうか調査するVBA

絞り込みをする前に、絞り込みたい列に該当するデータがあるかどうかを、CountIf関数で確認します。

Sub AutoFilter()

If WorksheetFunction.CountIf(ActiveSheet.Range(“A1:E20”), “aaa”) >= 1 Then
    Sheets(“DATA”).Range(“A1:E20″).AutoFilter Field:=1, Criteria1:=”aaa”
    Sheets(“DATA”).Range(“A1:E20”).Copy
    Sheets(“NEW”).Range(“A1”).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
End If

End Sub

絞りこんだ後、データの数を調査するVBA

絞り込みをした後に、絞り込まれたデータ数がゼロであるかどうかを、最終行を取得して確認します。

Sub AutoFilter()

Dim a as Long

Sheets(“DATA”).Range(“A1:E20″).AutoFilter Field:=1, Criteria1:=”aaa”
a = Worksheets(“DATA”).Cells(Rows.Count, 1).End(xlUp).Row

If a > 1 Then
    Sheets(“DATA”).Range(“A1:E20”).Copy
    Sheets(“NEW”).Range(“A1”).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
End If

End Sub

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

この記事を書いた人

子育てに奮闘しながらも、再びガッツリ走り込める日を夢見るフルタイム会社員。

コメント

コメントする

CAPTCHA


目次
閉じる