目次
概要
大量データの中から トップ 3 件 や 上位 10 % といった上位レコードだけを抽出したい場合、Excel の AutoFilter はたいへん有効です。本記事では、VBA を用いて数値列に対して「上位 N 件」と「上位 %」を抽出し、即座に並べ替えまで行うマクロをご紹介いたします。レポート作成や ABC 分析など、上位データの把握が必要なシーンでご活用ください。
前提条件
項目 | 内容 |
---|---|
対応 Excel | Microsoft 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:=xlTop10Items
とCriteria1:=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").Range を dataBlock に設定すると同様の手順で利用できます。 |
まとめ
AutoFilter の xlTop10Items と xlTop10Percent は、上位データの抽出を自動化する強力な機能です。サンプルコードをそのまま実行し、意図したレコードのみが表示されることをご確認ください。上位 N 件や上位 % を求める作業をマクロ化しておくことで、日次・週次レポートの作成時間を大幅に短縮できます。