#VALUE!尝试使用 Filter 函数根据多个条件进行筛选时出错

#VALUE!尝试使用 Filter 函数根据多个条件进行筛选时出错
原始名称 匹配名称_0 分数0 匹配索引_0 匹配名称_1 分数1 匹配索引1
AGI 合伙人有限公司 AGI合作伙伴有限责任公司 100 5273 AGI合作伙伴有限责任公司 100 5273
安盛投资管理公司 安盛投资管理公司 100 17995 安盛投资管理公司 100 17995
安本资产管理有限公司 阿伯丁资产管理公司 100 2123 安本资产管理有限公司雇员持股计划 100 2128
阿查里亚资本 资本银行 63.66124359 105080 哈拉资本 62.29887861 84903

如果列名称包含“match_name”且原始名称与 A 列中的名称匹配,我想过滤此范围以返回所有值。过滤范围的大小会有所不同,因此我还添加了 if 语句以删除空值

这是我的公式:

=FILTER(S1:Y5, ISNUMBER(SEARCH("match_name", $S$1:$Y$1)) * ($S$1:S$5=A2) * (IF(S1:Y5<>"", 1, 0)))

但是,无论我做什么,我都会收到错误。我尝试将所有内容分解到过滤器,它包含与过滤器范围相同的行数和列数。

答案1

虽然返回可以是二维数组,但所有支票必须是一维数组,并且所有支票必须具有相同的大小和形状,还必须具有与返回数组相同的行数或相同的列数。

因此,在这种情况下,您将需要执行嵌套过滤器:

=FILTER(FILTER(S1:Y5,ISNUMBER(SEARCH("match_name",S1:Y1))),S1:S5="AGI Partners, LLC")&""

现在它首先过滤到正确的列然后将结果过滤到正确的行。

在此处输入图片描述

至于输出中的空单元格。它们将保留,因为 FILTER 不会返回锯齿状结果集。

答案2

主要问题是最终结果(不是中间结果,尽管有人认为它们“会遵循”)FILTER。要接受它们,最终结果必须是一行 1 和 0。因此是 {1,0,0,1},但不是 {1;0;0;1},因为后者是四行。(请注意后者的分号与前者的逗号。)

至于处理与 A2 进行比较时出现的行问题,您可以简单地将范围包装在函数中TRANSPOSE,将其输出从行转换为列,以便进行真正的(有用的)乘法。但即便如此,不同的大小(五个元素与 S1:Y1 示例范围中的七个元素)意味着您会在 Excel 计算时创建的内部数组中得到 N/A 错误,因此您可能需要一个来IFERROR捕获这些错误并输入 0。

但是,您在标题行中执行的搜索与在 S 列中与 A2 进行比较时所执行的操作不一致...那里没有匹配项,因此告诉您第 2 列和第 5 列是可接受的标题行计算与 A2 比较的结果完全不匹配。它们根本不能这样使用,因为任何“正确”的结果都只能在时钟绘画“每天正确两次”的意义上是正确的。

您真正需要做的是IF对这两部分数据进行比较。例如IF("the header match fails", "", IF("the A2 matching fails", "", do this))

对于标题匹配,当前公式在一定程度上有效,但在上述IF(IF方法中无效。为此,您需要用类似这样的内容包装它SUM,如果结果为 0,则没有标题标签匹配,否则至少有一个匹配。(对于您描述的内容,哪些匹配并不重要。)

但是使用XMATCH像“match_name*”这样的搜索字符串并将“match_mode”设置为“2”(通配符搜索)会更短/更干净/更容易理解。

对于我上面提到的“执行此操作”部分IF(IF,您可以执行一个简单的操作,FILTER其中标准部分可能与您期望的不太一样。相反,请使用SEQUENCE和,COLUMNS如下所示:

SEQUENCE(1,COLUMNS(S1:Y1),1,0)

它将为尽可能多的列提供一个由 1 组成的数组常量(包括列)。

FILTER对于上面的范围,包含标题行不是必要的,上面的匹配无论如何也不会包含它。如果您必须拥有它(因为您的列可能会有所不同),请单独提供它。一个简单INDEX的范围是标题行,扩展方式包括任何合理的列数(假设它们右侧没有任何内容!),行参数为“1”,列参数为SEQUENCECOLUMNS上面一样,这样就很好了。

您当前所做的事情将永远无法解决,因此您必须寻求其他类型的解决方案。

相关内容