rank関数とifの併用の勉強
要件
- 適当にカテゴライズした動物の時速のランキングを作りたい
- 途中でカテゴリごとに平均を出したいが、平均欄は無視する
- 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}),"")