我更喜欢使用excel数组公式(但如果它只能在VBA中完成,那么就是这样),它从包含特定文本的列数组中复制所有单元格。下图显示了我所追求的以及我所尝试的内容。我已经接近了(感谢类似但不同的问题),但是无法达到我想要的地方。目前,我只获得了第一个细胞而不是所有细胞。在我的实际应用中,我正在搜索大约20,000个单元格,并且将有几百个搜索项。我希望大多数搜索字词能够为我提供大约8到12个具有该值的单元格。
我正在使用的公式:
=INDEX($A$4:$A$10,MATCH(FALSE,ISERROR(SEARCH($C$1,$A$4:$A$10)),0))
答案 0 :(得分:0)
为了有效地完成这项工作,我建议让一个单独的单元格保存结果计数(我使用的单元格C2),其中包含以下公式:
=COUNTIF(A:A,"*"&C1&"*")
然后在单元格C4中并向下复制使用此数组公式(-3
只是因为标题行是第3行。如果标题行是第1行,则它将是-1
):< / p>
=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秒才能完成重新计算。重新计算时间可能会有很大差异,具体取决于工作簿中的其他因素(其他公式,嵌套依赖项,易失性函数的使用等)以及硬件。
或者,您可以使用内置的Filter功能,但我希望这会有所帮助。
答案 1 :(得分:0)
你需要获得ROWS。把它放在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