2024年12月23日【ID:0】
【Excel】重複を考慮した上位3件を抽出
以下の画像の左側の「氏名と点数をまとめた表」から、右側の「上位3件を抽出した表」を数式で作成する方法について解説していきます。
また、今回の方法では、重複した点数が存在する場合、同順位と判断して抽出する仕組みになっています。
重複を除いた上位3件の点数を抽出する
まずは、重複を除いた上位3件の点数を抽出していきます。
そのためには、以下の3つの関数を活用します。
・UNIQUE関数:重複を除外する
・SORT関数:点数を並べ替える
・TAKE関数:指定した件数のみを表から抽出する
それぞれの関数の使い方は、以下になります。
=UNIQUE(配列, [列の比較], [回数指定])
// 指定した配列から重複を除いた表を返す
// 配列:対象のデータの範囲
// [列の比較]:データが列方向の場合(TRUE)、行方向の場合(FALSE[省略時])
// [回数指定]:重複していないデータのみを抽出する場合(TRUE)、重複を除いた全件を抽出する場合(FALSE[省略時])
=SORT(配列, [並べ替えインデックス], [並べ替え順序], [並べ替え基準])
// 指定した配列を指定した順序に並べ替えた表を返す
// 配列:対象の表
// [並べ替えインデックス]:対象の表の中の、対象の列(行)の、表の先頭からの列(行)番号 ※省略時は先頭列(行)
// [並べ替え順序]:1→昇順、-1→降順 ※省略時は昇順
// [並べ替え基準]:TRUE→列で並べ替え、FALSE→行で並べ替え ※省略時は行で並べ替え
=TAKE(配列, 行数, [列数])
// 指定した配列から指定した行数(列数)を抽出する
// 配列:対象の表
// 行数:抽出する行数(正の数:上から抽出、負の数:下から抽出)
// [列数]:抽出する列数(正の数:上から抽出、負の数:下から抽出)
// ※[列数]は省略可能、省略時は全ての列を抽出
これらの関数を組み合わせた上位3件の点数を抽出する数式は、以下になります。
=TAKE(SORT(UNIQUE(C3:C12),,-1),3)
// UNIQUE関数で重複を除いてからSORT関数で降順にし、TAKE関数で上位3件を抽出する
上位3件の点数と一致する氏名を抽出する
次に、上位3件の点数と一致する氏名を抽出していきます。
そのためには、以下の2つの関数を活用します。
・FILTER関数:指定した条件を満たすデータのみを抽出する
・TRANSPOSE関数:表を転置する(行と列を入れ替える)
それぞれの関数の使い方は、以下になります。
=FILTER(配列, 含む, [空の場合])
// 指定した配列から指定した条件を満たすデータのみを抽出する
// 配列:絞り込み対象の表
// 含む:絞り込み条件
// [空の場合]:条件を満たす対象のデータが見つからない時に表示する内容(省略時はエラーが表示される)
=TRANSPOSE(配列)
// 配列の行列を入れ替えた配列を返す
// 配列:転置対象の表
これらの関数を組み合わせた1位の氏名を抽出する数式は、以下になります。
=TRANSPOSE(FILTER($B$3:$B$12,$C$3:$C$12=F3))
// FILTER関数で指定した点数のデータを抽出してから、TRANSPOSE関数で横向きに転置する
// セルF3以外の参照範囲は固定のため「$」で絶対参照にする
後は、入力した数式を3位までコピーすることで、以下のように、氏名を抽出することができます。