原始名称 | 匹配名称_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
答案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”,列参数为SEQUENCE
和COLUMNS
上面一样,这样就很好了。
您当前所做的事情将永远无法解决,因此您必须寻求其他类型的解决方案。