happiness (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) happiness

【GoogleSheets】RANK関数で全体の順位を出しつつ、途中でカテゴリごとに計算する

rank関数とifの併用の勉強

要件

  1. 適当にカテゴライズした動物の時速のランキングを作りたい
  2. 途中でカテゴリごとに平均を出したいが、平均欄は無視する
  3. 10位までをだしたい

サンプル

カテゴリ 動物 速さ(km/h) 順位
1 0.1  
  うさぎ 40 6
  ぞう 40 6
  20 10
  平均 25.025  
2 ライオン 74 1
  しまうま 65 5
  22 9
  平均 53.66666667  
3 ダチョウ 70 3
  グレイハウンド 72 2
  カンガルー 70 3
  ぶた 40 6
  ハリネズミ 1  
  平均 50.6  

使う関数

  • RANK関数
    • データ範囲内で比較したときの順位
    • =RANK(対象のセル, 範囲, 降順(0)または昇順(1))
  • IF関数
  • IFERROR関数
    • エラー出たら代わりに
    • IFERROR(出す値, エラー時の値)

記法解説

  • spreadsheetでは、{}で囲うと、複数の対象範囲をまとめて扱える

実際の関数例

=IF(
    // 条件
    IFERROR(
        RANK(
        // 対象のセル
            B1,
            // 範囲(カテゴリごとの平均を取り除くため、複数の範囲を指定している)
            {
                $B$1:$B$4;
                $B$6:$B$8;
                $B$10:$B$14
        }
    ),
    // 平均値のセルはエラー出るのでfalseの判定になるように11を入れる
        11
    ) <= 10,
    // trueだった場合
    RANK(
        B1,
        {
            $B$1:$B$4;
            $B$6:$B$8;
            $B$10:$B$14
    }
    ),
    // falseだった場合
    ""
)

=IF(iferror(RANK(B1,{$B$1:$B$4;$B$6:$B$8;$B$10:$B$14}), 11)<=10,RANK(B1,{$B$1:$B$4;$B$6:$B$8;$B$10:$B$14}),"")