Excel公式:如何计算匹配列中的匹配值及单元格数量

220 多个excel快捷键速查表,适用Windows和Mac。工作效率提高10倍。免费下载>>>

下载 “excel快捷键速查表” Excel快捷键速查表.zip – 已下载54次 – 3 MB

Excel 公式:计算匹配列中的匹配值

概括

要计算匹配列中的匹配值,可以将SUMPRODUCT 函数与ISNUMBER和MATCH函数一起使用。在所示示例中,J6 中的公式为:

=SUMPRODUCT(ISNUMBER(MATCH(headers,{“A”,“B”},0))*ISNUMBER(MATCH(data,{“z”,“c”},0)))

其中data (B5:G14) 和headers (B4:G4) 被命名为 range。结果是 22,因为在标记为“A”或“B”的列中有 22 个值是“z”或“c”。

解释

在此示例中,目标是计算命名范围 数据中的“z”或“c”值,但仅当列标题为“A”或“B”时。用于执行此计算的公式基于SUMPRODUCT 函数:

=SUMPRODUCT(ISNUMBER(MATCH(headers,{“A”,“B”},0))*ISNUMBER(MATCH(data,{“z”,“c”},0)))

从内到外,请注意 SUMPRODUCT 包含一个参数,它由以下表达式组成:

ISNUMBER(MATCH(headers,{“A”,“B”},0))*ISNUMBER(MATCH(data,{“z”,“c”},0))

该表达式由两部分组成,每部分代表一个逻辑测试。左侧部分测试列标题,右侧测试值。这两部分用乘法(*)连接,因为整体逻辑是与,乘法对应布尔代数中的与。

左侧,MATCH 函数与 ISNUMBER 函数一起使用来匹配目标列:

ISNUMBER(MATCH(headers,{“A”,“B”},0)) // match “A” or “B”

在 MATCH 内部,请注意参数被“反转”以维护现有数据结构:标题值用于lookup_value参数,并且数组参数作为 包含我们正在查找的值的数组常量提供,“A”和“乙”。MATCH 的结果是一个由#N/A 错误或数字组成的数组。数字表示匹配的位置:

{1,2,#N/A,1,2,#N/A}

这个数组中有 6 个项目,因为我们正在测试 6 列。数字代表匹配的列,错误代表不匹配的列。这个数组返回给ISNUMBER 函数:

ISNUMBER({1,2,#N/A,1,2,#N/A}) // convert to TRUE or FALSE

它返回一个这样的数组:

{TRUE,TRUE,FALSE,TRUE,TRUE,FALSE}

请注意,TRUE 值对应于“A”或“B”列。这样就完成了列匹配逻辑。

在表达式的右侧,我们有类似的逻辑来测试值本身:

ISNUMBER(MATCH(data,{“z”,“c”},0))

MATCH 函数再次用于使用相同的反向参数方法检查两个值“z”或“c”。因为命名范围数据包含 60 个值,所以 MATCH 的结果是一个包含 60 个值的数组:

{2,#N/A,2,#N/A,1,1;#N/A,#N/A,2,2,1,2;2,2,#N/A,#N/A,#N/A,#N/A;#N/A,#N/A,1,2,2,2;#N/A,2,#N/A,2,#N/A,1;2,#N/A,2,2,2,2;2,2,#N/A,2,#N/A,2;#N/A,2,#N/A,#N/A,2,#N/A;1,#N/A,1,1,#N/A,1;2,1,2,#N/A,#N/A,2}

ISNUMBER 函数再次将此数组转换为 TRUE 和 FALSE 值:

{TRUE,FALSE,TRUE,FALSE,TRUE,TRUE;FALSE,FALSE,TRUE,TRUE,TRUE,TRUE;TRUE,TRUE,FALSE,FALSE,FALSE,FALSE;FALSE,FALSE,TRUE,TRUE,TRUE,TRUE;FALSE,TRUE,FALSE,TRUE,FALSE,TRUE;TRUE,FALSE,TRUE,TRUE,TRUE,TRUE;TRUE,TRUE,FALSE,TRUE,FALSE,TRUE;FALSE,TRUE,FALSE,FALSE,TRUE,FALSE;TRUE,FALSE,TRUE,TRUE,FALSE,TRUE;TRUE,TRUE,TRUE,FALSE,FALSE,TRUE}

现在上面的原始表达式(在 SUMPRODUCT 内部)可以写成这样:

{TRUE,TRUE,FALSE,TRUE,TRUE,FALSE}*{TRUE,FALSE,TRUE,FALSE,TRUE,TRUE;FALSE,FALSE,TRUE,TRUE,TRUE,TRUE;TRUE,TRUE,FALSE,FALSE,FALSE,FALSE;FALSE,FALSE,TRUE,TRUE,TRUE,TRUE;FALSE,TRUE,FALSE,TRUE,FALSE,TRUE;TRUE,FALSE,TRUE,TRUE,TRUE,TRUE;TRUE,TRUE,FALSE,TRUE,FALSE,TRUE;FALSE,TRUE,FALSE,FALSE,TRUE,FALSE;TRUE,FALSE,TRUE,TRUE,FALSE,TRUE;TRUE,TRUE,TRUE,FALSE,FALSE,TRUE}

请注意,乘法运算符仍然存在,就在第一个数组之后。在 Excel 中,任何数学运算都会自动将 TRUE 和 FALSE 值转换为它们的等效数字 1 和 0。这意味着您可以像这样考虑表达式:

{1,1,0,1,1,0}*{1,0,1,0,1,1;0,0,1,1,1,1;1,1,0,0,0,0;0,0,1,1,1,1;0,1,0,1,0,1;1,0,1,1,1,1;1,1,0,1,0,1;0,1,0,0,1,0;1,0,1,1,0,1;1,1,1,0,0,1}

在计算表达式后,我们有一个像这样的数组:

{1,0,0,0,1,0;0,0,0,1,1,0;1,1,0,0,0,0;0,0,0,1,1,0;0,1,0,1,0,0;1,0,0,1,1,0;1,1,0,1,0,0;0,1,0,0,1,0;1,0,0,1,0,0;1,1,0,0,0,0}

该数组作为array1参数传递给 SUMPRODUCT 函数。然后,只处理一个数组,SUMPRODUCT 将数组中的项相加并返回最终结果:22。

注意:虽然 SUMPRODUCT 可以将多个数组作为单独的参数处理,但您会看到许多将所有逻辑放入单个参数的公式。这样做利用了 Excel 在任何数学运算期间自动将 TRUE 和 FALSE 值强制转换为 1 和 0 的事实。当逻辑被分成单独的数组时,必须采取额外的步骤来转换为 1 和 0。

包含逻辑

在上面显示的示例中,测试逻辑是“等于”。列必须等于“A”或“B”,值必须等于“z”或“c”。但有时您需要使用“包含”逻辑进行测试。例如,测试包含“z”或包含“c”的值。

在 MATCH 函数中反转参数的一个后果是通配符不能与查找值一起使用,因为这些值显示为数组参数。如果您需要使用包含逻辑来测试值,您可以使用SEARCH 函数切换到基于ISNUMBER的另一种方法。例如,要匹配包含“x”或“c”的值,您可以使用如下表达式:

=ISNUMBER(SEARCH(“z”,data))+ISNUMBER(SEARCH(“c”,data))

请注意,我们使用加法运算符(+) 加入每个测试,因为在布尔代数中,加法对应于 OR 逻辑。最终的公式将如下所示:

=SUMPRODUCT(ISNUMBER(MATCH(headers,{“A”,“B”},0))*(ISNUMBER(SEARCH(“z”,data))+ISNUMBER(SEARCH(“c”,data))))

请注意,已添加一组额外的括号 () 来控制操作顺序。

220 多个excel快捷键速查表,适用Windows和Mac。工作效率提高10倍。免费下载>>>

下载 “excel快捷键速查表” Excel快捷键速查表.zip – 已下载54次 – 3 MB

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注