Excel VBA でトップ N 件・上位 % を抽出する AutoFilter 活用術【サンプルコード付き】

目次

概要

大量データの中から トップ 3 件上位 10 % といった上位レコードだけを抽出したい場合、Excel の AutoFilter はたいへん有効です。本記事では、VBA を用いて数値列に対して「上位 N 件」と「上位 %」を抽出し、即座に並べ替えまで行うマクロをご紹介いたします。レポート作成や ABC 分析など、上位データの把握が必要なシーンでご活用ください。


前提条件

項目内容
対応 ExcelMicrosoft 365 または 2016 以降
データ範囲シート「Sales」に B3:E200 の表(見出し行を含む)
抽出対象列列 D(売上金額)
マクロ設置先標準モジュール

サンプル 1:トップ 3 件を抽出し、降順に並べ替える

Sub GetTopThree()

    Dim ws          As Worksheet
    Dim dataBlock   As Range

    Set ws = Worksheets("Sales")
    Set dataBlock = ws.Range("B3").CurrentRegion   ' 見出し行を含む範囲を取得
    
    With dataBlock
        '--- トップ 3 件を抽出 ---
        .AutoFilter Field:=4, _
                    Operator:=xlTop10Items, _
                    Criteria1:=3
        
        '--- 売上金額で降順ソート ---
        .Sort Key1:=.Columns(4), _
              Order1:=xlDescending, _
              Header:=xlYes
    End With

End Sub

ポイント

  • Operator:=xlTop10ItemsCriteria1:=3 を組み合わせることで、上位 3 件のみが抽出されます。
  • 抽出後に Sort メソッドを呼び、列 D を降順に並べ替えています。

サンプル 2:上位 10 % のレコードを抽出する

Sub GetTopTenPercent()

    Dim ws        As Worksheet
    Dim targetRng As Range

    Set ws = Worksheets("Sales")
    Set targetRng = ws.Range("B3").CurrentRegion

    '--- 売上金額の上位 10 % を抽出 ---
    targetRng.AutoFilter Field:=4, _
                         Operator:=xlTop10Percent, _
                         Criteria1:=10    ' 10 = 10 %

End Sub

ポイント

  • Operator:=xlTop10Percent を指定し、Criteria1:=10 とすることで上位 10 % が抽出されます。
  • ソート順を変更したい場合は、前述の Sort メソッドを追加してください。

応用例

要件実装のヒント
トップ 20 件を抽出Criteria1:=20 に変更します。
上位 5 % を抽出Criteria1:=5 と指定します。
抽出結果を別シートへコピーtargetRng.SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("Result").Range("A1") を追加します。

よくある質問

質問回答
抽出条件を解除したい場合はどうしますか。dataBlock.AutoFilter と引数なしで呼び出すと条件のみを解除できます。矢印も非表示に戻したい場合は ws.AutoFilterMode = False を併用してください。
テーブル(ListObject)でも動作しますか。ListObjects("SalesTable").RangedataBlock に設定すると同様の手順で利用できます。

まとめ

AutoFilter の xlTop10ItemsxlTop10Percent は、上位データの抽出を自動化する強力な機能です。サンプルコードをそのまま実行し、意図したレコードのみが表示されることをご確認ください。上位 N 件や上位 % を求める作業をマクロ化しておくことで、日次・週次レポートの作成時間を大幅に短縮できます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次