2016-11-17 166 views
0

我倾向于使用Excel数组公式(但如果它只能在VBA中完成,那么可以),它复制包含特定文本的列数组中的所有单元格。下面的图片显示了我所追求的和我尝试过的。我越来越接近(感谢类似但不同的问题),但无法完全达到我想要的位置。目前,我只获得第一个单元而不是所有的单元。在我的实际应用中,我正在搜索约20,000个单元格,并将有几百个搜索词。我希望大多数搜索条件能给我提供大约8 - 12个具有该值的单元。Excel数组公式只复制包含字符串的单元格的公式

式我使用:

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

Spredsheet Image

+0

为什么不直接使用内置的过滤器功能? – tigeravatar

+0

@tigeravatar这对于做一对复制和粘贴部分很合适,但我会为数百个搜索条件执行此操作,在我的下一个项目中,这些搜索条件将发生变化。从长远来看,编程解决方案将节省时间。 –

回答

0

为了有效地完成这项工作,我建议具有单独的细胞保持结果计数(I使用的小区C2),其具有以下公式:

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

然后在单元格C4中复制下来使用此数组公式(-3只是因为标题行是行3.如果heade R个行是行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)))) 

我与21000行A列中的数据的平均的每个搜索串30个结果测试了这个和式被复制下来60个细胞在柱C.有了这么多的数据,这需要大约1-2秒才能完成重新计算。根据工作簿中的其他因素(附加公式,嵌套依赖关系,易失性函数的使用等)以及硬件,重新计算时间可能会有很大差异。

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

+0

这似乎工作得很好。我曾在其他类似问题中看到过ROW(),但无法理清如何在这种情况下使用它 –

+0

不要忘记嘀嘀嘀嗒的答案,因为它对你有帮助 – MacroMarc

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移输入

+0

当我在单元格范围C4中使用此公式时: C4我得到:4,6,7,10,这似乎是相对指数。好吧,我现在明白了。 –

+0

so:'= IFERROR(INDEX($ A:$ A,AGGREGATE(15,6,IF(SEARCH($ C $ 1,$ A $ 4:$ A $ 10)> 0,ROW($ A $ 4:$ A $ 10) ),ROW($ C4)-ROW($ A $ 4)+1)),“”)'' – MacroMarc

相关问题