Excel VBAで複数の除外条件を指定してフィルター抽出する方法|空白・0・特定文字を除外する設定例

Visual Basic

Excel VBAでオートフィルターを操作する場合、単純な条件指定だけなら簡単ですが、空白以外・特定の数値以外・特定文字以外など複数の除外条件を同時に設定したい場合は少し工夫が必要です。

この記事では、1つの列に対して複数の除外条件を設定し、不要なデータを除外して表示する方法を、実際のVBAコード例を使って解説します。

Excelフィルターで複数の除外条件を設定する考え方

Excelの通常のフィルター機能では、1つの列に対して複数の条件を指定できますが、「空白を除外」「0を除外」「確認中を除外」「-を除外」のような条件をまとめて指定する場合、そのままでは設定しにくいことがあります。

特に「○○以外」という条件を複数組み合わせる場合は、フィルター条件だけで対応するよりも、VBAで対象データを確認して表示・非表示を制御する方法が柔軟です。

例えばH列に以下のようなデータがある場合を考えます。

H列の値 表示
100 表示
0 非表示
確認中 非表示
– 非表示
空白 非表示

VBAで複数の除外条件を設定する基本コード

複数の除外条件を処理する場合は、オートフィルターではなく、行ごとに条件を確認して非表示にする方法が分かりやすく実用的です。

以下のコードでは、H列が空白、0、「確認中」、「-」の場合、その行を非表示にします。

Sub 複数条件除外フィルター()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long

Set ws = ActiveSheet

lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

ws.Rows.Hidden = False

For i = 2 To lastRow
If ws.Cells(i, "H").Value = "" Or _
ws.Cells(i, "H").Value = 0 Or _
ws.Cells(i, "H").Value = "確認中" Or _
ws.Cells(i, "H").Value = "-" Then
ws.Rows(i).Hidden = True
End If
Next i
End Sub

この方法では条件を自由に追加できるため、業務データの整理やチェックリスト作成などにも利用できます。

オートフィルター機能を使って除外する方法

データ量が多く、Excel標準のフィルター機能を利用したい場合は、作業列を追加する方法もあります。

例えばI列に判定用の数式を入れて、H列の値が除外対象かどうかを判定します。

=IF(OR(H2="",H2=0,H2="確認中",H2="-"),"除外","表示")

その後、I列を「表示」でフィルターすれば、目的のデータだけを抽出できます。

VBAではこの判定列を自動作成してフィルターをかけることも可能です。

VBAでオートフィルターを利用する場合の注意点

AutoFilterを使う場合、1つのフィールドに対して複数条件を設定できますが、Excelの仕様上、複数の「以外」を組み合わせる処理は分かりにくくなります。

例えば「確認中以外」「-以外」「0以外」をAND条件で指定すると、条件式の作成が複雑になります。

そのため、除外対象が増える可能性があるデータでは、今回のようなVBAによる行判定方式のほうが管理しやすくなります。

大量データ向けに処理速度を改善する方法

数万行以上のデータを処理する場合、1行ずつ画面更新を行うと処理時間が長くなることがあります。

その場合は、マクロ開始時に画面更新を停止すると高速化できます。

Application.ScreenUpdating = False

処理内容

Application.ScreenUpdating = True

また、条件判定を配列に読み込んで処理すると、さらに高速なマクロを作成できます。

除外条件を追加・変更するときのポイント

除外する値が増えた場合は、If文に条件を追加するだけで対応できます。

例えば「未入力」「保留」という文字も除外したい場合は、以下のように条件を追加します。

If ws.Cells(i, "H").Value = "" Or _
ws.Cells(i, "H").Value = 0 Or _
ws.Cells(i, "H").Value = "確認中" Or _
ws.Cells(i, "H").Value = "-" Or _
ws.Cells(i, "H").Value = "未入力" Or _
ws.Cells(i, "H").Value = "保留" Then

業務内容によって除外条件は変化するため、判定部分を独立させておくと後から修正しやすくなります。

まとめ

Excel VBAで1つの列に複数の除外条件を設定する場合、オートフィルターだけで処理するよりも、VBAで条件判定して不要な行を非表示にする方法が分かりやすく確実です。

空白、0、「確認中」、「-」など複数の除外対象がある場合でも、If文の条件を追加するだけで柔軟に対応できます。

データ量や作業内容に合わせて、行の非表示処理、作業列による判定、オートフィルターの利用を使い分けることで、効率的なExcel作業環境を作ることができます。

コメント

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