Excelでデータを扱う際、「特定の列で条件を指定して必要なデータだけを表示したい」と思うことはよくあります。
その際に便利なのが AutoFilter です。今回は、VBAを使って「1列に条件を指定してフィルタをかける方法」を解説します。
1. 基本的な構文
オートフィルタを特定の列に適用する場合、基本構文は以下のようになります。
Range("範囲").AutoFilter Field:=列番号, Criteria1:="条件"
- Range(“範囲”)
フィルタをかけたいデータの範囲を指定します。
通常は表全体(ヘッダーを含む範囲)を指定します。 - Field
どの列にフィルタをかけるかを列番号で指定します。
範囲の左端を1として数えます。 - Criteria1
抽出条件を文字列で指定します。
例:"東京"
,">=100"
など。
2. 具体例:商品リストを地域で絞り込む
次のような商品データを想定します。
商品名 | 地域 | 売上 |
---|---|---|
A商品 | 東京 | 120 |
B商品 | 大阪 | 80 |
C商品 | 東京 | 150 |
D商品 | 名古屋 | 60 |
ここで「地域が東京」のデータだけを表示したい場合、以下のように記述します。
Sub フィルタ_東京のみ表示()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
'表全体にフィルタを設定
ws.Range("A1:C5").AutoFilter Field:=2, Criteria1:="東京"
End Sub
Field:=2
→ 範囲「A1:C5」の2列目(地域)を対象にするCriteria1:="東京"
→ 地域が「東京」の行だけを表示する
実行すると、東京以外の行は非表示になります。
3. 数値条件を指定する場合
売上が100以上のデータだけを表示する場合は次のように書きます。
Sub フィルタ_売上100以上()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
'売上列(3列目)で100以上の条件
ws.Range("A1:C5").AutoFilter Field:=3, Criteria1:=">=100"
End Sub
数値条件も文字列として "">=100""
のように書くのがポイントです。
4. 部分一致検索(ワイルドカード)
文字列の場合はワイルドカードも使えます。
*
:任意の文字列?
:任意の1文字
例:商品名が「A」で始まるものを表示する
ws.Range("A1:C5").AutoFilter Field:=1, Criteria1:="A*"
5. まとめ
- Field で対象列を番号指定
- Criteria1 で条件を指定(文字列・数値・ワイルドカードも可)
- 部分一致検索にも対応できる
VBAのオートフィルタを活用すれば、日々のデータ抽出作業を大幅に効率化できます。
コメント