365・LibreOfficeなどに関するメモ2020-11-12(Excel)グループ別の最大値・最小値を求めるExcelExcelで、多数の数値を個々のグループごとに区別して、それぞれの最大値・最小値を求める方法についてです。FILTER関数とMAXIFS(MINIFS)関数を組み合わせて、グループ別の最大値・最小値を求めることができます。画像では、B列に氏名が、C列にスコアの数値が並んでいます。そこでE3セルに式を入力し、それぞれの氏名ごとのスコアの最大値を求めています。E3セル=UNIQUE(FILTER(B3:C13,C3:C13=MAXIFS(C3:C13,B3:B13,B3:B13)))まずFILTER関数内で抽出条件にMAXIFS関数を用いて、各行(3~13行目)の氏名に対応する最高スコアの行(氏名と最高スコアの組)を抽出しています。MAXIFSの第2引数(条件範囲)と第3引数(条件)が同じ「B3:B13」になっているわかりにくいですが、つぎの式をいっぺんに実行していると考えればわかりやすいかもしれません。=FILTER(B3:C13,C3:C13=MAXIFS(C3:C13,B3:B13,B3))=FILTER(B3:C13,C3:C13=MAXIFS(C3:C13,B3:B13,B4))・・・=FILTER(B3:C13,C3:C13=MAXIFS(C3:C13,B3:B13,B13))結果的に氏名ごとの最高スコアが求まりますが、重複する行が多数出力されるためUNIQUE関数で重複を除いています。MAXIFS関数をMINIFS関数に替えると最小値が求まります。次の画像もほとんど同じ例ですが、B列にチーム名を追加し、チームごとのスコアの最大値を求めています。チーム名とスコアだけでなく氏名まで抽出できているところがポイントで、SQL的なグループ化集計だとちょっと苦労するところですが、上記と同じような式で求めることができます。F3セル=UNIQUE(FILTER(B3:D13,D3:D13=MAXIFS(D3:D13,B3:B13,B3:B13)))ただし、同一チームで複数の者が最高スコアを出している場合にはUNIQUE関数で1つにまとめることができず(氏名の行が異なるため)、複数の行が出力されます。365はデスクトップ版、LibreOfficeは記事作成時の安定バージョンを用いた結果を示しています。サイトポリシー等についてはこちらをご覧ください。(1)検索スポンサーリンク引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。