Excel 数组公式仅复制包含字符串的单元格

问题描述 投票:0回答:3

我更喜欢使用 Excel 数组公式(但如果它只能在 VBA 中完成,那就这样吧)从包含特定文本的列数组中复制所有单元格。下图显示了我所追求的以及我所尝试过的。我正在接近(感谢类似但不同的问题),但无法完全到达我想要的地方。目前,我只得到第一个单元格,而不是所有单元格。在我的实际应用程序中,我正在搜索大约 20,000 个单元格,并且将有几百个搜索词。我预计大多数搜索词都会为我提供大约 8 - 12 个具有该值的单元格。

我正在使用的公式:

=INDEX($A$4:$A$10,MATCH(FALSE,ISERROR(SEARCH($C$1,$A$4:$A$10)),0))

arrays excel vba search indexing
3个回答
0
投票

为了使这项工作高效进行,我建议使用一个单独的单元格来保存结果计数(我使用单元格 C2),其中包含以下公式:

=COUNTIF(A:A,"*"&C1&"*")

然后在单元格 C4 中并向下复制,使用此数组公式(

-3
只是因为标题行是第 3 行。如果标题行是第 1 行,则为
-1
):

=IF(ROW(A1)>$C$2,"",INDEX($A$4:$A$21000,SMALL(IF(ISNUMBER(SEARCH($C$1,$A$4:$A$21000)),ROW($A$4:$A$21000)-3),ROW(C1))))

我使用 A 列中的 21000 行数据进行了测试,每个搜索字符串平均有 30 个结果,并将公式复制到 C 列中的 60 个单元格。有了这么多数据,大约需要 1-2 秒才能完成重新计算。重新计算时间可能会有很大差异,具体取决于工作簿中的其他因素(附加公式、嵌套依赖项、易失性函数的使用等)以及您的硬件。

或者,您可以只使用内置的过滤器功能,但我希望这会有所帮助。


0
投票

您需要获取行。将其放入 C4 并复制下来。

=IFERROR(AGGREGATE(15,6,  IF(SEARCH($C$1, $A$4:$A$10)>0, ROW($A$4:$A$10)), ROW($C4)-ROW($A$4)+1), "")

数组公式所以使用ctrl-shift-Enter


0
投票

使用FILTER怎么样:

=FILTER($A$4:$A$10,ISNUMBER(SEARCH($C$1,$A$4:$A$10)))

或者...我通常建议使用表格...请参阅https://youtu.be/Ss3AY-oJHDo?si=93FfkMlm7d6lGyiZ..。您可以使用表[列]引用而不是固定单元格引用:

=FILTER(Table1[Array of Strings],ISNUMBER(SEARCH($C$1,Table1[Array of Strings])))

额外:您可以将其用于下拉列表(又名数据验证作为列表)...参见下图...只需将数据验证添加到单元格=$C$5#(注意末尾的“#”,它告诉您使用动态数组的数据验证。

=$C$5#

© www.soinside.com 2019 - 2024. All rights reserved.