Excel数组评估和一些技巧

时间:2018-06-05 10:19:56

标签: arrays excel excel-formula evaluation

我在网上遇到了一些数组评估技巧。但我无法理解这个理论。我想有很多像我这样的人想知道这个主题。

  • 什么是数组评估?为什么我们需要它?
  • N( INDEX (.....)) 如何在幕后进行操作?
  • N( IF (1,.....)) 如何在幕后制作?
  • 为什么我们需要在这里使用 N function

2 个答案:

答案 0 :(得分:2)

  1. 写下公式。
  2. 选择它。
  3. 转到功能区并选择公式>评估
  4. 点击评估并自行查看
  5. enter image description here

答案 1 :(得分:0)

这是一个相当开放的问题,在没有源代码的情况下,必须基于经验证据,使用可用的公式工具以及ECMA / ODF文档。

什么是数组评估,为什么需要它?

开放式公式标准在此处描述了通用公式处理模型: http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part2.html#__RefHeading__1017860_715980110

以一个简单的示例为例,下面的公式中ABS函数与许多其他函数一样,采用并返回数字值:

=SUM(ABS(A1:A3))

如果正常输入,则通过将与公式单元格相同的行或列作为交集来解析值参数。因此,如果输入B2,则上面的内容将解析为ABS(A2)

另一方面,如果使用Ctrl + Shift + Enter作为数组公式输入,则在公式周围放置括号{.},并且SUM参数是计算数组返回等于:

的结果

=ABS(A1)+ABS(A2)+ABS(A3)

这种数组求值对减少中间计算以及减少公式长度很有帮助。

但是,一些函数,例如INDEXVLOOKUPHLOOKUPCELLFILTERXMLHYPERLINK可以返回数组。如上面的OpenFormula链接中所指定的,此类函数不会以与ABS相同的方式遍历value参数。要强制使用这些功能的数组,需要使用下一节中的技巧。

N(IF(.))N(INDEX(.))在幕后如何工作?

考虑这对公式(例如,如果C1:C3 = {2;5;7}的结果为=A2+A5+A7):

=SUM(INDEX(A:A,N(INDEX(+C1:C3,))))

=SUM(INDEX(A:A,N(IF({1},C1:C3,))))

让我们专注于第一个公式,并在一些简化的公式版本上运行评估工具:

[1]=+N(INDEX({2;5;7},)) -> +N({2;5;7}) -> +{2;5;7}

[2]=+N(INDEX(C1:C3,)) -> +N($C$1:$C$3) -> +2

[3]=+N({2;5;7}) -> +N(2) -> +2

比较结果:

[1] & [2]: INDEX returns array / reference types

[2] & [3]: N takes reference / value types

[1] & [3]: N(INDEX(,)) returns an array that is passed like a value type

上面一行的结果可能用[{2;5;7}]表示,其中[.]是对数组的“值类型引用”。在公式内,可能需要将这样的结果传递给另一个IF或INDEX函数,以避免出现错误。可以从任何类似的数据类型组合中获得相同类型的结果:

array / reference -> value / reference

另一个示例是在第4个参数中带有IF的AGGREGATE。

我们为什么需要在这里使用N函数?

N函数有效地通过引用传递了数组参数 ,否则IF函数的结果将通过值传递

要对此进行查看,请对公式=N(A1)中的引用参数应用“评估公式”工具,而不会转换为=ABS(A1)等其他函数。

请注意,工作表函数使用的总和类型(XLOPER)可以是本机Excel数据类型的组合:值(数字,文本,逻辑,任意);数组;参考。

可以通过逐步使用引用和数组参数(例如A1和{1})从函数向导和“评估公式”工具中找到数据类型。

有关完整列表(更多链接),请参见:https://chandoo.org/forum/threads/excel-function-reference.35686/