【VBAリファレンス|実務向け】第6回 複数条件や数値などでデータを抽出する 1/5:フィルタの自動化と「判定ロジック」の極意

スポンサーリンク

こんにちは、VBA講師の山下です。実務で最も要望が多いのが「特定の条件でデータを絞り込む」作業ではないでしょうか。今回は、単なるフィルタリングを超えた、実戦的なデータ抽出テクニックを解説します。

なぜ「オートフィルタ」をそのまま記録してはいけないのか

マクロの記録でフィルタ操作を行うと、コードには具体的な値がベタ書きされます。しかし、実務では「昨日入力されたデータ」や「目標値を上回った売上」のように、条件が動的に変化します。

ここで重要なのは、フィルタをかけること自体よりも「どの行を抽出するか」という判定ロジックを配列としてメモリ上で完結させることです。

セル範囲を配列に読み込み、高速に判定する

多くの初心者は、ループで1行ずつセルを参照し、条件に合致したらコピペするというコードを書きます。これはデータ量が増えると非常に低速です。

実務で私が推奨するのは、以下の手順です。

1. 処理対象の範囲をVariant型の配列に一気に格納する
2. メモリ上の配列内で条件判定を行い、抽出対象の行番号だけを保持する
3. 最後に、必要な行だけをまとめて転記(または削除・加工)する

具体的な事例:複数条件での抽出

例えば、「部署が営業部」かつ「売上が100万円以上」という条件でデータを抽出する場合、コードの書き出しは以下のようになります。

コードの考え方

If 文の中に条件を詰め込むのではなく、判定用のフラグ変数を用意するのがコツです。

Dim data As Variant
data = Range(“A1”).CurrentRegion.Value
‘ この配列をループで回し、条件判定を行う
For i = 2 To UBound(data, 1)
If data(i, 2) = “営業部” And data(i, 3) >= 1000000 Then
‘ ここで抽出処理を行う
End If
Next i

次回予告

今回は「判定ロジック」の基礎となる考え方をお伝えしました。次回は、この「抽出した行をどうやって効率的に別シートへ書き出すか」という、実務で差がつくテクニックを深掘りしていきます。

VBAは「書く」ことより「いかに効率よくメモリを扱うか」が重要です。ぜひ今のうちに、セルを直接触らないコーディングの感覚を掴んでおいてくださいね。

タイトルとURLをコピーしました