2015-08-24 47 views
0

我有一个〜50k行的电子表格;其中一列有说明。我想用多个通配符过滤描述列。这显然是Excel中的破解者。我用类似于以下和最终结果是单独每每个标准排序的码:替代通配符搜索多个条件; vba-excel

Sub Product_Sort() 

ActiveSheet.Range("$A$1:$J$47853").AutoFilter Field:=10, Criteria1:= _ 
Array("=*ProductA*", "=*ProductB*", "=*ProductC*", "=*ProductD*"), Operator:=xlOr 

End Sub 

最后,还有一些需要被搜索87个通配符标准。

我想我已经想过一个替代方案...使用现有的排序过滤器,并为数组中的每个搜索添加一个“x”到End(xlToRight)+1列。问题是我不太了解循环来完成这项工作。

有人能帮我解决这个烂摊子吗?另外,如果这个过程还有其他替代方案,那么您可以启发我。


编辑20150825,08:21CDT

的数据,我与有大串的工作可能包含术语相匹配,与EG1产品A的问题是小工具,EG2 ProductC有裤子或eg3有人扔掉了ProductF。在我的数据中有~50K行有这样的条目。

在上面的示例中,根据初始代码,我只搜索ProductA,ProductB,ProductC和ProductD;这将仅给出与例如1和例2的通配符匹配的结果,对于例3可能具有#N/A或#Value。

在尝试总和,匹配和vlookups,我似乎无法找到一种方法来单个条款是我的数组中的通配符(例如ProductC)。我尝试了一个类似于这样的VLookUp:它真的给了我不一致的信息。我碰到了他们本不该去的地方。

希望能够为此问题增加更多信息。

我试过使用http://www.excelguru.ca/forums/showthread.php?270-vLookup-with-wildcards-%28equivalent-of-quot-contains-quot-%29-best-solution,似乎无法得到sum/iferror字符串为我平移。

+0

我想你可以创建一个包含所有过滤器中的一列的工作表,然后使用引用该列的查找公式创建一个辅助列。然后过滤掉。 – Kyle

+0

我正在尝试,似乎无法使其工作。让我试着在问题中发布一个数据的例子。 – Cyril

回答

0

把所有的通配符在一列上的另一个片材和使用以下公式:

=LARGE(IFERROR(MATCH("*"&Sheet2!A$1:A$4&"*",A2,0),0),1) 

确认与CTRL + SHIFT +输入数组公式。 1表示匹配,0表示不匹配。

Sheet2!A $ 1:A $ 4是包含通配符的范围,A2是包含要检查的字符串的当前单元格。您可以自动填充到列的其余部分。

+0

我想弄清楚为什么我会得到零。不熟悉大型游戏,所以在继续前进之前试图了解发生了什么。现在,当使用我的表时:= LARGE(IFERROR(MATCH(“*”&Sheet1!A $ 1:A $ 38&“*”,J2,0),0),1)电子表格是一个导出和autonamed表,所以我的'添加'与通配符列表在Sheet1上。 – Cyril

+0

我认为问题的一部分是匹配具有数组的查找值,它试图匹配我的值。我改变了顺序,看它是否有助于它看起来像这样:= LARGE(IFERROR(MATCH('query_export_results(1)'!J2,“*”&Sheet1!A $ 1:A $ 38&“*”,0), 3),1)大函数似乎可以独立工作,但我遇到了IfError部分的问题。我通过将IfError的值更改为3来进行检查,并且它在全局显示,之前列出了0,这也是没有匹配的情况。试图找出IfError的错误是什么,atm。 – Cyril

+0

原始公式是正确的。您需要在'MATCH'部分的''“''的两个实例之间放置'*'。 – Kyle