大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、オートフィルタの結果が「データなし」かを判定する方法について、ご紹介します。方法は2つあって「End」もしくは「SubTotal関数」を使う方法です。簡単なのは「End」を使う方法です。フィルタした結果の個数も知りたい場合は「SubTotal関数」が便利です。

はじめに

この記事では、オートフィルタの結果が、データなしかを判定する方法について、ご紹介します。

データなしかの判定は、「End」もしくは「SubTotal関数」を使う方法があります。

データなしかの判定だけであれば、「End」が簡単です。

フィルタした結果の数も必要という場合は、「SubTotal関数」を使うといいです。

では、オートフィルタの結果が「データなし」かを判定する方法について、解説していきます。

この記事で紹介すること

  • VBAでオートフィルタの結果がデータなしかを判定する方法

目次から見たい項目へ移動すると便利ですよ。

目次

VBAコードまとめ

オートフィルタの結果が「データなし」かを判定するVBAコードについて、まとめています。

VBAコードだけ確認したい場合に、ご活用ください。

'「End」で表示されているデータの「最終行」で判定
If Cells(Rows.Count, "A").End(xlUp).Row > 1 Then MsgBox "データあり"

'「SubTotal関数」で「フィルタ結果の数」で判定
If WorksheetFunction.Subtotal(3, Range("A:A")) > 1 Then MsgBox "データあり"

では、解説していきます。

「End」を使ってオートフィルタの結果を判定

「End」を使ってオートフィルタの結果を判定してみます。

「End」で表示されている最終行を取得

「End」で表示されている最終行を取得するには、次のように入力します。

'表示されているデータの「最終行」を取得
a = Cells(Rows.Count, "A").End(xlUp).Row

表示されている最終行を取得する流れは、次のようになります。

セルの最後

セルの最後を「Cells(Rows.Count, "A")」で取得します。

セルの最後

セルの一番最後です。

移動して一番最初に入力されているセル

上の方に移動して、一番最初に入力されているセルを「.End(xlUp)」で取得します。

移動して一番最初に入力されているセル

上に移動して一番最初に入力されているセルが取得できます。

表示されている「最終行」

「最終行」を「.Row」で取得します。

表示されている「最終行」

これで、表示されている「最終行」が取得できます。

では、実際に実行してみます。

「データあり」の場合

「データあり」の場合で、表示されている最終行を取得してみます。

Sub TEST1()
    
    '表示されているデータの「最終行」を取得
    Debug.Print Cells(Rows.Count, "A").End(xlUp).Row
    
End Sub

オートフィルタで「データあり」のフィルタをしておきます。

データありのフィルタ

データありのフィルタ

では、実行してみます。

最終行を取得

最終行を取得

結果は、「9」となりました。

表示されている最終行を取得できました。

「データなし」の場合

「データなし」の場合でやってみます。

Sub TEST2()
    
    '表示されているデータの「最終行」を取得
    Debug.Print Cells(Rows.Count, "A").End(xlUp).Row
    
End Sub

データなしのフィルタをしておきます。

データなしのフィルタ

データなしのフィルタ

では、VBAコードを実行してみます。

最終行を取得

最終行を取得

結果は、「1」となりました。

表示されている最終行を取得できました。

この「End」で取得できた結果を利用して、「データなし」かを判定します。

実務で使う場合

実務で使う場合は、「Cells(Rows.Count, "A").End(xlUp).Row > 1」で判定して、「データなし」かを判定します。

Sub TEST3()
    
    '表示されているデータの「最終行」が「1より大きい」場合
    If Cells(Rows.Count, "A").End(xlUp).Row > 1 Then
        MsgBox "データあり"
    Else
        MsgBox "データなし"
    End If
    
End Sub

データなしのフィルタの場合で、実行してみます。

データなしのフィルタ

データなしのフィルタ

では、実行してみます。

データがあるかの判定ができる

データがあるかの判定ができる

結果は、「データなし」となりました。

こんな感じで「End」を使って、データがあるかの判定ができます。

「SubTotal関数」でオートフィルタの結果を判定

次は、「SubTotal関数」でオートフィルタの結果を判定してみます。

「SubTotal関数」で表示されている数を取得

「SubTotal関数」で表示されている数を取得することができます。

こんな感じで使います。

「Subtotal関数」を使う

'「フィルタ結果の数」を取得
a = WorksheetFunction.Subtotal(3, Range("A:A"))

表示されているデータをカウントするイメージをみてみます。

列全体を選択する

「A列」のセル範囲を設定したいので、「Range("A:A")」を入力します。

列全体を指定する

「Range("A:A")」でA列の全体を選択できます。

表示されているデータをカウントする

「SubTotal関数」のカウントの機能を使います。

カウントなので、引数に「3」を入力します。

表示されているデータをカウントする

これで、表示されているデータをカウントすることができます。

では、実際に実行してみます。

「データあり」の場合

フィルタ結果が「データあり」の場合で、やってみます。

Sub TEST4()
    
    '「フィルタ結果の数」を取得
    Debug.Print WorksheetFunction.Subtotal(3, Range("A:A"))
    
End Sub

データありのフィルタをしておきます。

データありのフィルタ

データありのフィルタ

では、実行してみます。

表示されている結果をカウント

表示されている結果をカウント

結果は、「4」となりました。

表示されている結果をカウントできています。

「データなし」の場合

次は、フィルタ結果が「データなし」の場合で、やってみます。

Sub TEST5()
    
    '「フィルタ結果の数」を取得
    Debug.Print WorksheetFunction.Subtotal(3, Range("A:A"))
    
End Sub

データなしのフィルタをしておきます。

データなしのフィルタ

データなしのフィルタ

では、実行してみます。

表示されている結果をカウント

表示されている結果をカウント

結果は、「1」となりました。

表示されている結果をカウントできています。

この「フィルタ結果の数」を使って、「データなし」かを判定します。

実務で使う場合 

実務で使う場合は、「WorksheetFunction.Subtotal(3, Range("A:A")) > 1」のように条件を作って、「データなし」かを判定します。

Sub TEST6()
    
    '「フィルタ結果の数」が「1より大きい」場合
    If WorksheetFunction.Subtotal(3, Range("A:A")) > 1 Then
        MsgBox "データあり"
    Else
        MsgBox "データなし"
    End If
    
End Sub

データありのフィルタ条件で実行してみます。

データありのフィルタ

データありのフィルタ

では、VBAコードを実行してみます。

フィルタ結果を判定できる

フィルタ結果を判定できる

結果は、「データあり」となりました。

フィルタ結果を判定できています。

「SubTotal関数」は結果の数をカウントできる

「SubTotal関数」は結果の数を計測することもできるので、便利です。

SubTotal関数でフィルタ結果の数をカウントしてみる

SubTotal関数でフィルタ結果の数をカウントしてみます。

見出し分の行数の「1」を引くだけです。

Sub TEST7()
    
    '「見出しを除く」フィルタ結果の「数」を取得
    Debug.Print WorksheetFunction.Subtotal(3, Range("A:A")) - 1
    
End Sub

オートフィルタでフィルタしておきます。

フィルタする

フィルタする

では、VBAコードを実行してみます。

見出しを除くデータの個数をカウント

見出しを除くデータの個数をカウント

結果は、「3」個となりました。

見出しを除くデータの個数をカウントできています。

フィルタした結果の個数をカウントしたい場合は、「SubTotal関数」が便利です。

おわりに

この記事では、オートフィルタの結果が、データなしかを判定する方法について、ご紹介しました。

データなしかの判定は、「End」もしくは「SubTotal関数」を使う方法があります。

データなしかの判定だけであれば、「End」が簡単です。

フィルタした結果の数も必要という場合は、「SubTotal関数」を使うといいです。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す