Excelでフィルタリング時の順位を動的に計算する

Excelでフィルタリング時の順位を動的に計算する方法

1. はじめに

Excelのフィルタリング機能は、大量のデータから特定の情報を素早く抽出するのに非常に便利です。しかし、データをフィルタリングした場合、RANK.EQ関数などの順位計算関数はフィルタリング前の全体のデータセットに基づいて順位を計算してしまいます。これでは、フィルタリング後のデータに対する適切な順位を得ることができません。本記事では、フィルタリングしたデータに対する正確な順位を動的に計算する方法をご紹介します。

またこの記事で紹介した手順は行の非表示にも対応し、非表示行をのぞいた順位付けが可能になります。

2. データセット

F列(ヘルパー1)とG列(順位)は計算式を設定します。

設定する式については次の節以降を確認して下さい。

社員番号 氏名 性別 部署 獲得顧客数 ヘルパー1 順位
1 山田 太郎 男性 人事部 10 10 14
2 佐藤 次郎 男性 営業部 20 20 11
3 鈴木 三郎 男性 開発部 30 30 8
4 高橋 四郎 男性 マーケティング部 40 40 5
5 田中 五郎 男性 経理部 50 50 2
6 渡辺 六郎 女性 人事部 15 15 12
7 伊藤 七郎 女性 営業部 25 25 9
8 山本 八郎 女性 開発部 35 35 6
9 中村 九郎 女性 マーケティング部 45 45 3
10 小林 十郎 女性 経理部 55 55 1
11 加藤 十一郎 男性 人事部 5 5 15
12 吉田 十二郎 男性 営業部 15 15 12
13 佐々木 十三郎 男性 開発部 25 25 9
14 山内 十四郎 男性 マーケティング部 35 35 6
15 斉藤 十五郎 男性 経理部 45 45 3

3. 「テーブル」機能を使わずに計算式を設定する方法

この方法では、「ヘルパー1」列に「=SUBTOTAL(109, [獲得顧客数の列])」という計算式を設定し、「順位」列に「=RANK.EQ([ヘルパー1の列の同じ行の値], [ヘルパー1の列の範囲全体])」という計算式を設定します。たとえばF2へ

=SUBTOTAL(109,E2)

を設定しコピーします。次にG2へ

=RANK.EQ(F2,$F$2:$F$16)

を設定しコピーします。この設定により、フィルタリングしたときに「順位」列の順位が動的に計算されます。行の非表示にも対応しています。

ただし、この方法では、新しい行が追加されたときや既存の行が削除されたときに、計算式の範囲を手動で更新する必要があります。

以下は「部署:営業部」の行だけが表示される設定をしたときの結果サンプルです。

社員番号 氏名 性別 部署 獲得顧客数 ヘルパー1 順位
2 佐藤 次郎 男性 営業部 20 20 3
7 伊藤 七郎 女性 営業部 25 25 2
12 吉田 十二郎 男性 営業部 15 15 4
15 斉藤 十五郎 男性 経理部 45 45 1

4. 「テーブル」機能を使って計算式を設定する方法

「テーブル」機能を使うと、新しい行が追加されたときや既存の行が削除されたときに、計算式の範囲が自動的に更新されます。これにより、「ヘルパー1」列と「順位」列の計算式を設定した後に、データセットが変更されても順位が正しく計算されます。具体的には、「ヘルパー1」列に

=SUBTOTAL(109, [@獲得顧客数])

という計算式を設定し、「順位」列に

=RANK.EQ([@ヘルパー1],[ヘルパー1])

という計算式を設定します。リストをテーブルにしておけば行の追加への対応が楽になります。

5. まとめと注意点

本記事では、Excelでフィルタリング時の順位を動的に計算する方法を紹介しました。「テーブル」機能を使わずに計算式を設定する基本的な方法と、「テーブル」機能を使って計算式を設定する高度な方法について説明しました。ただし、これらの方法にはそれぞれ制限が存在します。非表示の行やフィルタリングされた行を含むデータに対する順位の計算には注意が必要です。また、大規模なデータセットや頻繁に更新されるデータに対しては、計算の複雑さやセルの更新の問題を考慮する必要があります。

コメント

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