本节提供高级数组公式的示例。
对包含错误值的区域求和
当您尝试对包含错误值(例如 #N/A)的区域求和时,Excel 中的 SUM 函数不起作用。 本示例显示如何对包含错误的命名为“数据”的区域中的值求和。
该公式创建一个新数组,包含除错误值以外的原始值。 从内层函数开始向外运算,ISERROR 函数在单元格区域 (数据) 中搜索错误。 IF 函数在指定的条件计算结果为 TRUE 时返回指定值,在计算结果为 FALSE 时返回另一个值。 在此处,它为所有错误值返回空字符串 (""),因为它们的计算结果为
TRUE,并且返回该区域(数据)中的其他值(因为这些值计算结果为 FALSE,表示它们不包含错误值)。 接着 SUM 函数计算筛选出的数组的总和。
本示例与上面的公式相似,但它返回名为“数据”的区域中的错误值个数,而不是将错误值筛选掉:
该公式创建一个数组,它为包含错误的单元格包含值 1,为不包含错误的单元格包含值 0。 可以简化该公式,并达到相同的结果,方法是移除 IF 函数的第三个参数,如下所示:
如果未指定该参数,IF 函数在单元格不包含错误值时返回 FALSE。 可以进一步简化该公式:
可能需要根据条件对值求和。 例如,此数组公式仅对名为“销售量”的区域中的正值求和:
IF 函数创建正值和 false 值数组。 SUM 函数实际上将忽略 false 值,因为 0+0=0。 在此公式中使用的单元格区域可以由任意数量的行和列组成。
还可以对满足多个条件的值求和。 例如,下面的数组公式计算大于 0 并且小于等于 5 的值:
请注意,如果区域中包含一个或多个非数字单元格,此公式将返回错误。
还可以创建使用 OR 条件的数组公式。 例如,可以对小于 5 和大于 15 的值求和:
IF 函数查找所有小于 5 和大于 15 的值,然后将这些值传递给 SUM 函数。
不能在数组公式中直接使用 AND 和 OR 函数,因为这些函数返回单一结果,TRUE 或 FALSE,而数组函数需要结果数组。 可以通过使用上一公式中显示的逻辑来解决这一问题。 也就是,对满足 OR 或 AND 条件的值执行加法或乘法等算术运算。
本示例演示当您需要对区域中的值求平均值时,如何从该区域中移除零。 下面的公式使用名为“销售量”的数据区域:
IF 函数创建不等于 0 的值数组,然后将这些值传递给 AVERAGE 函数。
计算两个单元格区域中的不同值个数
此数组公式对名为“我的数据”和“您的数据”的两个单元格区域中的值进行比较并返回它们之间不同值的个数。 如果这两个区域中的内容完全相同,此公式将返回 0。 要使用此公式,单元格区域的大小必须相同,其维度也必须相同(例如,如果 MyData 是一个 3 行 5 列区域,YourData 也必须是 3 行 5 列):
此公式创建与正比较的区域大小相同的新数组。 IF 函数使用值 0 和值 1 填充数组(0 表示单元格不匹配,1 表示单元格匹配)。 然后 SUM 函数返回该数组中的值的和。
可以如下所示简化该公式:
与计算区域中的错误值的公式相似,此公式版本可以执行计算是因为 TRUE*1=1 并且 FALSE*1=0。
查找区域中最大值的位置
此数组公式返回名为“数据”的单列区域中的最大值所在的行号:
IF 函数创建与名为“数据”的区域对应的新数组。 如果对应的单元格包含区域中的最大值,则此数组包含该行号。 否则,此数组包含空字符串 ("")。 MIN 函数使用此新数组作为它的第二个参数并且返回与“数据”区域中最大值的行号相对应的最小值。 如果名为“数据”的区域包含完全相同的最大值,则该公式返回第一个值的行号。
如果要返回最大值的实际单元格地址,请使用下面的公式: