带有 SUM 和 CHOOSE 的 ARRAYFORMULA
ARRAYFORMULA with SUM and CHOOSE
我有一组值,例如:
14 ; 17 ; 12 ; 14 ; 12 ; 8
您可能会认出一组 DnD 能力分数。我想计算用于这些的创建点数。
所以我想结合SUM和CHOOSE。我试过这个(和我工作的 LibreOffice sheet 一样):
=ARRAYFORMULA(SUM(CHOOSE(C9:C14 - 6; -4; -2; -1; 0; 1; 2; 3; 5; 7; 10; 13; 17)))
我预计 25 (5+13+2+5+2-2),得到 5。由于某种原因,它在第一个值之后立即停止而不做任何求和。
不幸的是,有些函数不适用于 ArrayFormulae,CHOOSE 似乎是其中之一。
不幸的是 Index 也没有,但 VLookup 有所以我们必须创造这个怪物:
=ArrayFormula(SUM(VLOOKUP(
$C:$C - 6,
{1, -4;
2, -2;
3, -1;
4, 0;
5, 1;
6, 2;
7, 3;
8, 5;
9, 7;
10, 10;
11, 13;
12, 17}, 2)))
如果你有空间创建一个可以引用的table,公式当然会简单得多。
另一种方法是自定义函数:
function abilityScoreCost(scores) {
var costs = {
7: -4,
8: -2,
9: -1,
10: 0,
11: 1,
12: 2,
13: 3,
14: 5,
15: 7,
16: 10,
17: 13,
18: 17
}
return scores
.map(function (score) {
return costs[score];
}).reduce(function (x,y) {
return x + y;
});
}
然后您可以用 =abilityScoreCost(C9:C14)
调用
需要说明的是,+Robin Gertenbach 的回答比这个更直观,但是这个有点短:
=ArrayFormula(SUM(HLOOKUP(-4,{-4;-2;-1;0;1;2;3;5;7;10;13;17},C9:C14-6)))
我有一组值,例如:
14 ; 17 ; 12 ; 14 ; 12 ; 8
您可能会认出一组 DnD 能力分数。我想计算用于这些的创建点数。
所以我想结合SUM和CHOOSE。我试过这个(和我工作的 LibreOffice sheet 一样):
=ARRAYFORMULA(SUM(CHOOSE(C9:C14 - 6; -4; -2; -1; 0; 1; 2; 3; 5; 7; 10; 13; 17)))
我预计 25 (5+13+2+5+2-2),得到 5。由于某种原因,它在第一个值之后立即停止而不做任何求和。
不幸的是,有些函数不适用于 ArrayFormulae,CHOOSE 似乎是其中之一。
不幸的是 Index 也没有,但 VLookup 有所以我们必须创造这个怪物:
=ArrayFormula(SUM(VLOOKUP(
$C:$C - 6,
{1, -4;
2, -2;
3, -1;
4, 0;
5, 1;
6, 2;
7, 3;
8, 5;
9, 7;
10, 10;
11, 13;
12, 17}, 2)))
如果你有空间创建一个可以引用的table,公式当然会简单得多。
另一种方法是自定义函数:
function abilityScoreCost(scores) {
var costs = {
7: -4,
8: -2,
9: -1,
10: 0,
11: 1,
12: 2,
13: 3,
14: 5,
15: 7,
16: 10,
17: 13,
18: 17
}
return scores
.map(function (score) {
return costs[score];
}).reduce(function (x,y) {
return x + y;
});
}
然后您可以用 =abilityScoreCost(C9:C14)
需要说明的是,+Robin Gertenbach 的回答比这个更直观,但是这个有点短:
=ArrayFormula(SUM(HLOOKUP(-4,{-4;-2;-1;0;1;2;3;5;7;10;13;17},C9:C14-6)))