VBAでフィルターされている状態のデータを取得したい抜き取りたい!でも、どうやって取得するんだろう?
本章では、VBAでフィルター(オートフィルター)が掛かっているソートした状態のデータを取得する構文を学習していきましょう。
オートフィルターがかかっている状態
下記のようにオートフィルターがあり、ソートかかっている状態です。
この状態から必要項目の情報のデータを「抜き取る、抽出する」対処法です。
まずオートフィルターがかかっている状態とは、どんな状態なのか?その画面イメージは下記をイメージしましょう。
このような状態の途中データを抜き取りたい場合には、当サイトのコーディングで対応できるかと思います。
VBAでオートフィルターが掛かっている状態のデータを取得する構文
VBAでオートフィルターが掛かっている状態のデータを取得する構文は、下記の構文でデータ取得することが可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Public Sub AutoFil_DateGet Dim FilterRow As Range Dim strData As String With ActiveSheet.Range("A5:Z5000") .AutoFilter Filed:=1, Criteria1:="●" 'A列が●のものをソートする For Each FilterRow In ActiveSheet.Range("A5").CurrentRegion.Resize(,1).SpecialCells(xlVisible)) If FilterRow.Row > 5 then strData = ActiveSheet.Range("B" & FilterRow.Row).Value 'ソート掛かった部分のB列の情報を1行ずつ取得 End If Next End With End Sub |
まずは、まるまるコピーをして、実際にマクロをのデータのフィルターをかけるようになっています。最大行を取得を自動で行う場合には、末端行を取得する構文を頭に入れてとるようにするとよいでしょう。
「Dim FilterRow As Range」は必要な変数宣言です。ここで行の情報を変数に取得しますので、必ず宣言が必要になります。
続いて「.AutoFilter Filed:=1, Criteria1:="●"」では、フィルター条件を指定しています。
「For Each FilterRow In ActiveSheet.Range("A5").CurrentRegion.Resize(,1).SpecialCells(xlVisible))」では、A列の5行目を起点にフィルターが掛かっている列までの範囲でFor分で一つずつデータを確認していきます。
「 If FilterRow.Row > 5 then 」には、フィルター行が入っていますので、そこのデータより前の行までは、データを読まないように制御をかけています。
「strData = ActiveSheet.Range("B" & FilterRow.Row).Value」では、B列の可視化セルのデータをstrDataの変数に情報を取得・抽出するようになっています。
これで、データ取得・抽出は完成です。
それでは、実際に自分が取得したいファイルと調整しながら、プログラムの子修正を行っていきましょう。
まとめ
このように、オートフィルターをかけている状態のデータを取得したり、変更したり、データ抽出する際には、上記構文をコピーしてプログラムを作成してみましょう。
フィルター位置やフィルター条件などを調整しながら、プログラムを作ってみてください。
ITトレンドのレビュー投稿で1万Pを2重取りしよう!クーポンコードと友達紹介方法も解説
続きを見る