我正在尝试从主表中过滤一些数据并根据用户偏好对其进行分类。这是数据示例以及我想要实现的目标?
主表:
目标:
我想迭代“测试”列并将任何行与 *apple & *touch 匹配,然后将整行复制到另一张表中。因此,期望过滤后的表格如下所示。
我进行了一些搜索并得出了这个公式:
=IFERROR(INDEX(A3:A11,SMALL(IF(ISNUMBER(SEARCH("*touch*",A3:A11,1)),ROW(A3:A11),""),ROW(A1))),"")
我得到的结果如下图
我需要帮助的两个问题:
- 该公式跳过第一个匹配,仅从第二个匹配开始填充。
- 我如何缩小搜索范围,以便结果匹配同时包含“apple”和“touch”的行?
答案1
如果您有 Excel 365,则可以使用 FILTER 函数。
就像是:
=FILTER(A2:C11,(A2:A11 = "*apple*")*(A2:A11 = "*touch*"))
答案2
最简单的解决方案是启用数据过滤。这适用于所有版本的 Excel。
单击要过滤的标题列。假设测试在 A1 中,则单击 A1。从开始下的功能区中,转到排序和过滤...并选择过滤。该行的所有单元格中都会出现一个下拉框。单击 A1 中的下拉框,选择文本过滤器 -> 包含...,然后输入要包含的单词。
应用过滤器后,您将获得过滤结果。所有过滤掉的行将被隐藏,而不是删除。您可以撤消过滤器并应用新过滤器,甚至可以向此过滤器添加更多过滤条件(可选,从另一列添加)。
如果您对结果满意,请选择跨所有单元格的选择,复制它,然后在新的工作表上粘贴数据。
答案3
Jos Woolley
关于通配符的使用,如Máté Juhász
的答案中所述,是正确的。但是,在以下过程中可以使用:
=FILTER(A3:C11, IFERROR( SEARCH("*apple*",A3:A11), 0) * IFERROR( SEARCH("*touch*",A3:A11), 0))
他的想法FILTER
非常好。只需使用一两个额外的技巧来创建要乘以的字符串即可。
SEARCH
将生成数字和/或错误。由于其性质,它生成的任何数字都必须 >=1。Excel 将解释任何非零数值,因此TRUE
所有“发现”都将以这种方式显示。IFERROR
可以将错误(对于不匹配的行)替换为 0,从而FALSE
给出FILTER
其预期的 TRUE/FALSE 值字符串(或 1/0 值... 两者都将被使用)。
附注:公式失败的原因是它只能返回单个值,而不是所有值。所以它永远不会起作用。此外,只对问题的编写很重要,它确实返回找到的第一个值,而不是跳过第一个并返回第二个值。
要使公式有效,您需要将SMALL
函数中的最后一个参数调整为数组常量或生成常量的东西。但是……您怎么知道要要求它返回多少个项目?嗯……也许使用一个COUNTIF
来计算匹配项?它将使用通配符,因此您可以这样做,这不会是一场噩梦,但仍然会增加难度。
当然,有人可能会说IFERROR(SEARCH())
这也是一个额外的难度级别。所以……可能只对大型数据集有意义,因为每种方法创建的两个内部创建和使用的数组常量的大小限制将决定哪种方法更好。在这种情况下,我认为 Excel 不会对COUNTIF
上面的公式创建的数组设置任何这样的限制,因此对于大型数据集(最多可能超过 2,000 行),修改COUNTIF
后的公式SMALL
可能会更好。