有时候,我们希望将公式应用于一组值而不是一个值,这可以简单地将公式作为数组公式(按Ctrl+Shift+Enter键)来实现 。然而,并不是所有公式都能如此轻松地产生这样的效果,有些公式很“顽强”地抵制任何试图强制让它们返回数组的尝试 。本文将探讨一些技术,除了数组形式的输入外,可以帮助强制达到想要的结果 。
例如,下图1中单元格区域A1:A5是要使用的数据,右侧的数组公式并没有给出想要的结果 。(特别说明:示例纯粹是为了演示我们要解的技术 。)
文章插图
图1
第一个公式使用了INDIRECT函数和ADDRESS函数组合来求单元格区域A1:A5中的数值之和 。显然,诸如下面的非数组公式:
=INDIRECT(ADDRESS(1,1))
解析成:
=INDIRECT(“$A$1”)
结果为:
9.2
因此,我们可能希望使用数组公式将这种公式构造应用于多个单元格 。然而,使用数组输入后的公式:
=SUM(INDIRECT(ADDRESS({1,2,3,4,5},1)))
并不会像你所希望的那样解析,而是转换为:
=SUM(INDIRECT(“$A$1”))
ADDRESS函数仅仅处理了数组中的第一个元素,就像我们将其作为非数组公式输入一样 。
在这种情况下,所需的强制并不是特别复杂,也不需要涉及OFFSET函数或INDEX函数的构造 。实际上,所需要做的就是包含一个小的N函数:
=SUM(N(INDIRECT(ADDRESS({1,2,3,4,5},1))))
解析为:
=SUM(N(INDIRECT({“$A$1″,”$A$2″,”$A$3″,”$A$4″,”$A$5”})))
解析为:
=SUM(N({9.2,1.1,5.5,7.4,3.3})))
即:
=SUM({9.2,1.1,5.5,7.4,3.3})
结果是:
26.5
在这种公式结构中使用N函数并不是为了将其用作函数(广义上,是在可能的情况下将非数字转换为数字),而是因为它具有附带的(也是非常有用的)特性:能够促使其他函数操作一组数值数组,例如此处的ADDRESS函数不能操作数组的情况 。
当然,我们应该意识到我们使用N函数是因为此处的值是由数字组成 。但是,如果我们想使用带有INDIRECT和ADDRESS函数的公式构造生成一个数组,但是其值不是数字,而是文本,并且所得到的数组不被求和而是传递给其他函数,该怎么办?
幸运的是,Excel为提供了一个与N函数具有相似功能的T函数 。与N函数一样,T函数同样具有强制返回数组的特性 。N函数用于数字,T函数用于文本值 。
例如,如果单元格区域A1:A5中的值是“A”、”B“、”C“、”D”、“E”,那么公式:
=LOOKUP(REPT(“z”,255),T(INDIRECT(ADDRESS({1,2,3,4,5},1))))
LOOKUP函数也具有强制返回数组的特性 。公式解析为:
=LOOKUP(REPT(“z”,255),T(INDIRECT({“$A$1″,”$A$2″,”$A$3″,”$A$4″,”$A$5”})))
解析为:
=LOOKUP(REPT(“z”,255),T({“A”,”B”,”C”,”D”,”E”}))
解析为:
=LOOKUP(REPT(“z”,255),{“A”,”B”,”C”,”D”,”E”})
结果为:
E
但是,使用N或T函数强制转换为数组不适用于所有函数,以包含DEC2BIN函数的公式为例:
=SUM(DEC2BIN(A1:A5))
解析为:
=SUM(#VALUE!)
结果为:
#VALUE!
这不是我们想要的结果 。
试着在其中添加N函数:
=SUM(N(DEC2BIN(A1:A5)))
情况并不好,因为DEC2BIN函数拒绝N函数试图强制返回数组的尝试,解析为:
=SUM(N(#VALUE!))
那么,在这些情况下,我们需要寻求替代方法来强制得到我们所需的数组处理 。一种方法是使用OFFSET函数,如下所示:
推荐阅读
- 当同事偷偷修改了你的Excel文件名.....
- 复合饼图的做法,一分钟学会
- 《Excel平安经》
- 这种高难度的Excel多层柱形图,99%的人都不会
- 比Excel透视表好用10倍都不止,“超级”透视表来了!
- 这10个最经典的Excel小技巧,关键时能救急!
- excel技巧:获取最大年增长率对应的值
- excel技巧:在主工作表中汇总多个工作表中满足条件的值
- 这个神秘的Excel日程表功能,你会用吗?
- Excel求和公式这下全了,多表、隔列、多条件求和,一个都不能少!