【VBA入門】注意!オートフィルター絞り込み中の最終行はバグ発生を誘発する危険あり

フィルター絞り込みOn状態のデータ最終行に注意


Excel標準機能のオートフィルター。表計算ソフトならでは、とても便利な機能です。

が、データ絞り込みを行った状態のまま、【最終データ行】の取得は、注意が必要です。

みなさん、こんにちは。セルネッツ竹本です。

今回は、「オートフィルターON状態での最終データ行の取得」をテーマに、解説をしたいと思います。


◆「オートフィルター絞り込み」中という状態で正しい最終行が取得できない

VBA初心者あるある、の中の一つです。

Excel業務では、利用者が一般の事務系の方が多いため、日々の実務経験により、Excelの知識も豊富な場合が多いです。

このため、日頃からExcel機能を駆使して実務を行っている分、オートフィルターSORTピボットテーブルなど、ワークシートに対するあらゆる操作やデータ状態がテストできないと、後に重大な障害をもたらすことがあります。

これが、高度な技術を要し、データベース接続を得意とするエンジニアスキルとは異なるExcel開発の怖いところでもあるのです。

このため、プログラム処理では、オートフィルターOnを想定した、毎回リセットが重要になります。

◆フィルター解除のModule

‘※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
Sub M_AutoFilter適用()
‘※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

On Error Resume Next

‘★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
‘★
‘★ 【Filter:ON】且つ【絞り込み:Off】の状態とする。
‘★
‘★  (1/2) FilterがOffなら、Onにする
‘★  (2/2) FilterがON、且つ、絞り込みOnなら、Offにする
‘★  ※つまり、FilterがON、かつ、絞り込みOffなら、そのまま
‘★
‘★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆

If ActiveSheet.AutoFilterMode = False Then

    ActiveSheet.Range("A1").AutoFilter

Else

    If ActiveSheet.AutoFilter.FilterMode Then

        ActiveSheet.ShowAllData

    End If

End If

On Error GoTo 0

End Sub

【Point】最終行の判定を以下の方法で取得した場合のリスクです。
データ有効範囲のテーブル行数、列数で取得した場合は、非表示データがあっても問題ありません。

'★Fin行
P_Fin行 = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row

今回のテーマは、「オートフィルターON状態での最終データ行の取得」について、解説を行いました。

本記事が、Excel実務の効率化において、ご参考お役立てになれば幸いです。


全国対応!お気軽にお問い合わせください