データ分析を自動化!オートフィルタと並べ替えの「実務コード」

Level5 VBA・マクロ

「マクロで大量データから必要なものだけ抽出したい」
「データを綺麗に並べ替えたい」

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つ以上の条件時)xlAndxlOr2つの条件を「かつ(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見出しの有無xlNoxlYes選択した範囲の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 メソッドで実行し、必要な引数(KeyOrderHeader)を指定する。
    • 昇順は Order1:=xlAscending降順は Order1:=xlDescending
    • 2つ目のキーを追加する場合は Key2 と Order2 を追記する。
    • headerで選択範囲に見出しを含むか指示

マクロで「データ抽出・整理」ができるようになりました。

次回は、「対話型ツールへの進化(InputBox)」です。
マクロに「どの支店のデータを見たいですか?」と質問させる方法を学びましょう!

コメント

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