带有SUM和CHOOSE的ARRAYFORMULA

时间:2016-11-03 19:32:40

标签: google-sheets array-formulas

我有一组值,例如:

14 ; 17 ; 12 ; 14 ; 12 ; 8

您可能会识别出一组DnD能力分数。我想计算用于这些的创建点的数量。

所以我想结合SUM和CHOOSE。我试过这个(和我工作的LibreOffice表一样):

=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 。出于某种原因,它在第一个值之后立即停止而没有任何总和。

2 个答案:

答案 0 :(得分:1)

遗憾的是,有些功能无法使用ArrayFormulae,CHOOSE似乎就是其中之一。

不幸的是,索引也没有,但VLookup确实如此,我们必须创造这种怪异:

=ArrayFormula(SUM(VLOOKUP(
  $C$9:$C$14 - 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)))

如果你在某个地方有空间来创建一个可以引用的表,那么当然公式会更简单。

另一种方法是自定义功能:

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)

进行调用

答案 1 :(得分:1)

要明确的是,+ Robin Gertenbach的回答比这更直观,但这有点短:

=ArrayFormula(SUM(HLOOKUP(-4,{-4;-2;-1;0;1;2;3;5;7;10;13;17},C9:C14-6)))