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実務の効率化において、ご参考お役立てになれば幸いです。