(我最初是在 stackoverflow 上问这个问题的。但是,Excel 公式肯定跨越了“编程”和“超级使用”之间的界限,所以我相信这个交叉发布是合适的。)
Excel 的许多内置函数都可以接受数组参数。有时结果会在帮助中记录,有时则不会。因此:
=IF({1,0,1}, 42, 99)
将返回 {42, 99, 42}。'IF' 的帮助涵盖了数组参数。但是:
=INDEX({2,3,5,7,11}, {2,4})
将返回 {3, 7}。这是直观的,但我找不到记录它的 Microsoft 来源。并且:
=INDEX({1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16}, {1,3},{2,4})
返回{2, 12},这根本不直观。
是否有任何资料涵盖这些不太常见的数组用法?似乎必须有一个,但我在网络搜索中找不到它,因为它需要使用“Excel”、“函数”和“数组”...
(此外,由于我没有创建标签的权力,有人可以用“数组公式”来标记这个问题吗?)
我很习惯使用数组公式,而且一直在用,但我讨厌通过反复试验来弄清楚会发生什么。当我做(简化版的等价物)时,出现了这个特别的问题:
=IF(ISNA(udf()), {1,2,3,4}, {5,6,7,8})
其中 'udf' 返回的是 {1,2,3},而公式的计算结果是 {5,6,7,#N/A}。这让我很惊讶,尽管我能弄清楚发生了什么并解决它。只是我找不到一个权威的资料来说明这一切,这让我很烦恼。
链接到 stackoverflow 上的问题(有几个答案和一些评论,但没有一个可以满足现在的问题):https://stackoverflow.com/questions/3998632/is-there-any-documentation-of-the-behavior-of-built-in-excel-functions-called-wit
编辑:我对此问题的 stackoverflow 版本进行了大幅度编辑,并在那里合并了 Neal 的部分回答。不过,新增部分主要涉及 Excel 公式的“编程”方面,因此我不会在此重复。
答案1
我也不知道有什么有用的东西可以配合你正在做的事情:我不记得看到过使用数组公式的例子(至少在一个数组中人们期望看到单个的东西。你会看到在 INDEX 函数的例子中使用的数组)。
我认为,如果您考虑一下扩展数组会发生什么,那么这相对简单(有没有更好的术语来表达这一点?如果您能想到一个,请进行编辑)。如果您使用数组参数,而函数需要普通参数,则结果是一个具有与数组参数相同数量元素的数组,结果数组的每个元素都是使用单个参数的结果。
所以在你的第一个例子中
=IF({1,0,1}, 42, 99)
你得到一个数组
{ IF(1, 42, 99), IF(0, 42, 99), IF(1, 42, 99)}
结果是
{ 42, 99, 42 }
在你的最后一个例子中
=IF(ISNA({1,2,3}), {1,2,3,4}, {5,6,7,8})
结果是
{ IF(ISNA(1),1,5) , IF(ISNA(2),2,6) , IF(ISNA(3),3,7) ,IF(ISNA(),4,8) }
前三个 ISNA 返回 false,第四个失败,所以结果就是您得到的。我认为这里唯一令人困惑的事情可能是错误值在哪里。
我最初认为错误的结果比由三个正确元素和一个错误元素组成的数组更合乎逻辑,但是,仔细想想,你可以在工作表区域输入一个数组公式来匹配数组中的元素数量。如果你想这样做,错误元素就完全有意义了,可能会帮助你找到错误。
答案2
Charles Williams 发布了他的决策模型网站的链接,其中包含我在 stackoverflow 上他的回答中寻找的信息:
链接本身是:
http://www.decisionmodels.com/optspeedj.htm
(整个网站都是优秀的 Excel 资源,顺便说一句,他的 FastExcel 产品非常好。)