2013-04-11 176 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