「マクロで大量データから必要なものだけ抽出したい」
「データを綺麗に並べ替えたい」
Level2で「オートフィルタ」や「並べ替え」を学習しました。
それをVBAで自動で動かせるようになりましょう!
Excelのオートフィルタと並べ替えは、実務で毎日使う機能です。
マクロ化すると、ボタン一つで「東京支店の売上データだけを抽出し、金額の高い順に並べ替える」といった、複雑な分析作業を一瞬で終わらせることができます。
ここでは、「これだけ覚えておけば使える」という実用的なコードに絞って解説します。

オートフィルタは「リスト全体」に適用する
オートフィルタは、特定の列(フィールド)に対して「絞り込みの条件」を指定するメソッド(動作)です。
VBAでオートフィルタを扱う前に、必ず手作業で設定できるようにしましょう。
1. フィルタを適用する Range を指定する
フィルタは、まずデータ全体(リスト)に対して「ここにフィルタをかけるよ」と宣言する必要があります。
- 手作業: データの見出し行全体を選択して「フィルタ」ボタンを押す。
- VBA:
' A1セルを基準に、その連続したデータ範囲にフィルタを適用する Range("A1").AutoFilter
補足:Range("A1").AutoFilterは、A1セルを含む連続したデータ範囲のフィルタボタンを表示させる、非常に便利な書き方です。

オートフィルタを開始させるセルを選択するんだ!
2. 条件を指定して絞り込む(最もよく使う基本形)
次に、どの列(フィールド)に、どんな条件で絞り込みをかけるかを指定します。
Sub フィルタをかける()
' A1セルを基準にフィルタを適用
Range("A1").AutoFilter
' F列(6列目)に対して「未処理」という文字列でフィルタをかける
Range("A1").AutoFilter Field:=6, Criteria1:="未処理"
End Sub
Field:=6
: データ範囲の左から数えて6番目の列(F列)という意味です。Criteria1:="未処理"
: 絞り込みたい条件(値)を指定します。

丸暗記しなくていいよ!
実際にフィルタをかけたいときに、また調べて!

3. AutoFilterメソッドの主要な引数と種類
| 引数名 | 役割 | 主な種類と用途 | 解説 |
| Field | 基準とする列番号 | 数字 (1, 2, 3…) | リストの左から数えた列番号を指定する。 |
| Criteria1 | 絞り込み条件(1つ目) | 文字列 (“完了”, “東京”), 数値 (10000) | 「〜と等しい」が基本。その他ワイルドカード(*)も利用可。 |
| Operator | 演算の種類(2つ以上の条件時) | xlAnd, xlOr | 2つの条件を「かつ(AND)」で扱うか、「または(OR)」で扱うかを指定。 |
| Criteria2 | 絞り込み条件(2つ目) | Criteria1と同じ | Operator を使って2つ目の条件を指定するときに利用。 |
複数の条件や、フィルタの解除方法
1. 複数の条件(AND条件とOR条件)
' C列(3列目)に対して、10000円以上、50000円以下のデータでANDフィルタ
Range("A1").AutoFilter Field:=3, _
Criteria1:=">=10000", Operator:=xlAnd, Criteria2:="<=50000"

条件を増やすと、書くことが増えるよね。
条件は文字列として扱うから「ダブルクォーテーション」で囲もう!

2. フィルタの解除と設定の解除(2つの方法)
処理が終わったら、次のどちらかの方法で元の状態に戻しましょう。
A. 絞り込みだけを解除し、フィルタボタンは残す(絞ったデータを解放)
この命令は、現在かかっている絞り込み条件をリセットし、非表示になっている行をすべて表示します。フィルタボタン(▼)はシートに残ったままなので、すぐに次のフィルタをかけることができます。
' 絞り込み(非表示行)だけを解除する
ActiveSheet.ShowAllData

フィルタを絞ったままマクロを動かしちゃうと
思ったようにデータ抽出できないよ!
もしデータ抽出をするマクロを利用するなら
必ず元シートのフィルタは全データ表示しよう!

B. オートフィルタの設定自体を完全に解除する(ボタンを消す)
フィルタ機能そのものをオフにし、見出し行からフィルタボタンを完全に消します。
' フィルタ機能そのものを解除する
ActiveSheet.AutoFilterMode = False

データセットを整理する「並べ替え(Sort)」
集計後やフィルタリング後に、データを特定の順番に並べ直す作業(ソート)もマクロで自動化できます。
1. Sortメソッドの引数(補足情報)を理解する
並べ替えの Sort メソッドは、指定範囲の並べ替えを行うため
以下の主要な「補足情報(引数)」を必要とします。

暗記しなくていいよ!
必要なときに調べよう!
| 引数名 | 役割 | 主な種類と用途 | 解説 |
| Key1 | 第1基準(キー) | Rangeオブジェクト (Range("B2")など) | 並べ替えの基準となる列のセルを指定。 |
| Order1 | 順番 | xlAscending (昇順), xlDescending (降順) | どのように並べるか(昇順/降順)を指定。 |
| Header | 見出しの有無 | xlNo, xlYes | 選択した範囲の1行目に見出しが含まれるか (xlYes)、含まれないか (xlNo) を指定。 |
| Key2 | 第2基準(キー) | Key1と同じ | 第1基準が同じ値だった場合の第2優先順位を指定。 |
| Order2 | 順番(第2) | Order1と同じ | Key2に対応する順番を指定。 |
Orderで設定できる内容
:=xlAscending
: 昇順(小さい順、古い順、A→Z)を指定します。:=xlDescending
: 降順(大きい順、新しい順、Z→A)を指定します。
Headerで設定できる内容
- :=xlYes 選択範囲に見出しを含むから2行目から並べ替える
- :=xlNo 選択範囲に見出しを含まないので1行目から並べ替える
2. 基本:1つのキーで並べ替える(昇順・降順)
【昇順(小さい順)の例】
Sub 昇順で並べ替え()
' データ範囲全体を指定(B1から最終行・最終列まで)
Dim dataRange As Range
Set dataRange = Range("B1", Range("B" & Rows.Count).End(xlUp).EntireRow)
' Sortメソッドを実行
dataRange.Sort _
Key1:=Range("E1"), _ ' 第1キーはE列
Order1:=xlAscending, _ ' 昇順(小さい順、A→Z)で並べ替え
Header:=xlYes ' 選択範囲に見出しは含む
End Sub

3. 応用:2つのキーで並べ替える(優先順位の設定)
Sub 複数キーで並べ替え()
' データ範囲全体を指定(見出しはあり)
Dim dataRange As Range
Set dataRange = Range("A1", Cells(Rows.Count, "F").End(xlUp)) ' A2からF列最終行まで
dataRange.Sort _
Key1:=Range("B1"), _ ' 第1キー:B列(部署名)
Order1:=xlAscending, _ ' 部署名は昇順
Key2:=Range("E1"), _ ' 第2キー:E列(売上金額)
Order2:=xlDescending, _ ' 売上金額は降順
Header:=xlYes ' 見出しありなので1番上はソート不要
End Sub

今回のクエストを終えて
- フィルタ適用と解除:
- 適用は
Range("A1").AutoFilterでリスト全体に。 - 絞り込みだけを解除し、データを解放するには
ActiveSheet.ShowAllDataを使う。 - フィルタ機能そのものを解除するには
ActiveSheet.AutoFilterMode = Falseを使う。 - 絞り込みは
Field(列番号)とCriteria1(条件)で行う。
- 適用は
- 並べ替え:
Range.Sortメソッドで実行し、必要な引数(Key、Order、Header)を指定する。- 昇順は
Order1:=xlAscending、降順はOrder1:=xlDescending。 - 2つ目のキーを追加する場合は
Key2とOrder2を追記する。 - headerで選択範囲に見出しを含むか指示
マクロで「データ抽出・整理」ができるようになりました。
次回は、「対話型ツールへの進化(InputBox)」です。
マクロに「どの支店のデータを見たいですか?」と質問させる方法を学びましょう!






コメント