2013-04-11 132 views
0

我有Sheet2,其数据(产品名称)按字母顺序排列,产生26列,另加一列数字数据。在Sheet1上有一个近10,000个产品名称,无论我们在Sheet2上是否有它们,都要进行测试。要一次搜索一个名字是一个热潮,所以我一直在想,如果我们可以在Sheet1中批量搜索数据,并且每个单元格旁边都会显示搜索结果,并在Sheet2中找到该产品的单元格的地址,还是没有找到,如:Excel多字符串搜索

SEARCH STRINGS SEARCH RESULT 

Vodafone   A4 
Mirinda   C105 
Coca-Cola   Y59 
HeroHonda   not found 
Bournvita   S27 
Maggi    not found 

我已经做了一些搜索,找到了上面需要什么类似的代码,发现了以下代码:http://www.excelforum.com/excel-programming-vba-macros/714965-search.html,这确实为一个字符串搜索。可以修改这个脚本来获得想要的结果吗?

Sub DataSearch() 
Dim Data() As Variant 
Dim DstWks As Worksheet 
Dim Food As String 
Dim N As Variant 
Dim R As Long 
Dim Rng As Range 
Dim RngEnd As Range 
Dim SrcWks As Worksheet 

Set SrcWks = Worksheets("Test 2") 
Set DstWks = Worksheets("Test1") 

R = 6 
Food = DstWks.Range("E3") 
N = DstWks.Range("E4") 

    If DstWks.Range("C6") <> "" Then 
    DstWks.Range("C6").CurrentRegion.Offset(0, 1).ClearContents 
    End If 

    Set Rng = SrcWks.Range("A4:E4") 
    Set RngEnd = SrcWks.Cells(Rows.Count, Rng.Column).End(xlUp) 
    Set Rng = IIf(RngEnd.Row < Rng.Row, Rng, SrcWks.Range(Rng, RngEnd)) 

    ReDim Data(1 To Rng.Rows.Count, 1 To Rng.Columns.Count) 
    Data = Rng.Value 

    For I = 1 To UBound(Data, 1) 
     If Data(I, 1) = N And InStr(1, Data(I, 3), Food, vbTextCompare) > 0 Then 
     DstWks.Cells(R, "C").Resize(1, Rng.Columns.Count) = Rng.Rows(I).Value 
     R = R + 1 
     End If 
    Next I 

End Sub 

总是感谢您的宝贵帮助。

+0

terry欢迎来到StackOverflow :)检查此[发表。](http://stackoverflow.com/questions/14578474/copy-to-various-columns-based-on-cell-contents/14584298#14584298)如上所述,通过大数据范围进行迭代搜索可能导致巨大的性能下降。您可以合并*通配符*方法并尝试。我在这里支持数组。 – bonCodigo 2013-04-11 09:17:24

回答

0

我会使用快速和肮脏的东西,如一个hlookup,看看它是否返回一个值,以确定它是否在10,000产品。

例如假定在薄片2中,数据是在存储使得:
- 每个产品记录是在一列
- 不同的产品是在不同的列
- 产品名称是在第1行,从A1
还假设在片1中,
- 产品名称是在列A中,开始与A1
- 有在片材

在表1,把下式中B2(并且随后将它复制所有没有其它数据到B10001的方式): =IF(ISNA(HLOOKUP(A1,Sheet2!$A$1:$Z$1,1)),"not found",ADDRESS(1,MATCH(A1,Sheet2!$A$1:$Z$1,0),1))

+0

非常感谢您的实用解决方案OC2PS,如果我们认为第一行是列标题是字母A-Z,第27列是NUM,我相信它会起作用。每一列只是以字母开头的产品名称,因此整个Sheet2只是产品的名称。这些细节会影响上述公式吗?非常感谢.. – terry 2013-04-11 03:15:09

+0

我不认为这对公式有任何影响。无论您是否选择在工作表中显示它们,由Excel定义的行名和列名都保持不变。您仍然可以使用这些值引用单元格。 – OC2PS 2013-04-11 03:47:10

+0

有没有办法将搜索范围从(A1,Sheet2!$ A $ 1:$ Z $ 1,1)扩展到(A1,Sheet2!$ A $ 1:$ AA $ 5000,1)以包含所有产品名称在搜索过程中?我试过但没有工作,因为肯定是HLOOKUP。如果我们无法扩大搜索范围,是否有其他方法可以做到这一点?非常感激。 – terry 2013-04-11 04:16:38