有时很难预测 Excel 表达式是否可以转换为数组形式。例如,以下屏幕截图显示了一个表格,顶部有一行日期,后面是引用第一行的四行。前三行(即 Excel 行 3、4 和 5)每个都包含一个数组公式。前两个很好,但第三个使用 EOMONTH() 的公式中断了。然后 Excel 行 6 显示相同的 EOMONTH() 公式,但采用非数组形式。它工作正常。在 B3:B5 和 C7:I7 中,我使用 FORMULATEXT() 显示各个行和单元格中的函数。
我没有看到任何明显的EOMONTH() 的文档这将预示着失败。
有没有办法找出哪些功能有这种限制?(这表面上是我的问题的一般形式,但实际上并没有太大帮助)。
答案1
微软只是决定不扩展所有公式以适用于数组。
有些可能很难,有些可能不合逻辑,或者他们可能没时间,谁知道呢。结果,有一个可以处理数组的函数列表,其余的则不能。我现在没有链接(我会去看看),但确实有一个定义的列表。
对于许多函数,您都可以通过 Google 寻找解决方法,例如,EOMONTH(range,0)
可以使用 而不是 使用DATE(YEAR(range),MONTH(range)+1,0)}
(下个月的第零天只是下个月的第一天的前一天......),OR(cond1,cond2,...)
可以使用而不是IF(cond1+cond2+...>0,..
,并且AND(cond1,cond2,...)
可以使用 替换IF(cond1*cond2*...,...
,因为 Excel 将 视为TRUE
和1
视为FALSE
0。
有些公式(在分析工具库在 Excel 2003 中)也可以与数组,但不是范围- 细微的差别!- -
在范围前添加(减去负号,但没有空格)以使其成为数组:EOMONTH(- -range,0)
答案2
您实际上描述的是EOMONTH
不采用范围并输出数组。
事实上,如果你给出一个数组作为参数的输入,它将生成一个数组作为输出。
对于完整的二维数组,请考虑:
=EOMONTH(INDEX(C2:I2,{1,2,3,4,5,6,7},1),{0;1;2})
请注意,在行参数的数组中使用了逗号,但在列参数的数组中使用了分号。这是为了防止各部分相互重叠。像这样,行将跨列布局,并且呈现给列数组的每个后续行都将溢出到每个后续行中。使用相同的分隔符,您将得到一行结果,其中 Excel 只能显示一个结果,或者它们将分层为三层到一个单元格,或者四层到一个单元格,具体取决于您是获取行还是列。
大多数将范围表示为数组的方法(例如)都CHOOSE({1,2,3,4,5,6,7},C2,D2,E2,F2,G2,H2,I2)
可以解决问题。(但是,将公式放在某个地方,=C2:I2
然后引用它而不是范围是行不通的。因此,使用函数从所需范围生成数组似乎可行,而更直接地使用范围寻址则不行。)
因此,它不会为您执行将范围作为输入,然后在其内部计算中将其转换为“真”数组的操作。但可以形成输入以使其产生可 SPILL 的输出。
答案3
这不起作用。但你可以这样做:
{=DATE(YEAR(C$2:i$2),MONTH(C$2:I$2)+1,0)}