[英]Excel VBA Find All
像往常一樣,在最終屈服並尋求幫助之前,我浪費了很多時間解決問題,因此,非常感謝您的幫助!
我在我的數據的表格Test1
上運行一個while循環,以便將數據復制到參數匹配的表格Test2
上的特定行,但是我目前這樣做的方式是也循環遍歷表格2的每一行-兩者數據表的長度超過50,000行,因此,盡管我的方法對於10行測試非常有效,但要花費數小時才能處理完整的數據。 我想知道是否有人可以簡化我的代碼,理想情況下,以便它可以搜索匹配的行而不是比較每一行?
我嘗試使用Find
但是無法使它與多個參數一起使用。
這是我當前的代碼,我省略了設置參數設置以節省空間的部分,但它們存在於我的工作表中:
While row1 <= lastRow1
Param1 = Sheets("Test1").Cells.Range("A" & row1).Value
Param2 = Sheets("Test1").Cells.Range("B" & row1).Value
Param3 = Sheets("Test1").Cells.Range("D" & row1).Value
Param4 = Sheets("Test1").Cells.Range("E" & row1).Value
Param5 = Sheets("Test1").Cells.Range("F" & row1).Value
Cell_to_copy = Sheets("Test1").Cells.Range("G" & row1).Value
*****THIS IS THE BIT I WANT TO OPTIMISE************
For row2 = 2 To lastRow2
KParam1 = Sheets("Test2").Cells.Range("A" & row2).Value
KParam2 = Sheets("Test2").Cells.Range("B" & row2).Value
KParam3 = Sheets("Test2").Cells.Range("I" & row2).Value
KParam5 = Sheets("Test2").Cells.Range("G" & row2).Value
If (InStr(1, KParam1, Param1) > 0) _
And ((InStr(1, KParam2, Param2) > 0) Or (InStr(1, Param2, KParam2) > 0)) _
And ((InStr(1, KParam3, Param3) > 0) Or (InStr(1, KParam3, Param4) > 0)) _
And (InStr(1, KParam5, Param5) > 0) _
Then
Sheets("Test2").Cells.Range("L" & row2).Value = Cell_to_copy
End If
Next row2
****************************************************
row1 = row1 + 1
Wend
我想更改中間部分,以執行搜索功能來查找與If
查詢匹配的行,然后將Cell_to_copy
復制到該行的Cell L上。
這可能嗎? 如果絕對必要,我可以將來自Test2
的可搜索值連接到單個單元格中,但是我寧願不要避免,因為它會匹配一些誤報。
提前致謝,
喬
好的,規則似乎是
Test1.column A is found inside Test2.column A
Test1.column B is found inside Test2.column B
Test1.column D is found inside Test2.column I
Test1.column E is found inside Test2.column I
Test1.column F is found inside Test2.column G
然后將 Test1.column G 復制到Test2.L
那正確嗎?
為什么不能在Sheet2上使用公式來做到這一點?
也許:Test2.L列公式= =IF(FIND(A:A,Sheet1!A:A)>0,Sheet1!G:G)
該公式需要與其他條件進行OR
才能檢查其他列-午餐后嘗試!
如果沒有,那么確定,在這里,我認為我們需要考慮使用ADO並將工作表視為db表。
如果您顯示源數據的樣子以及所需的結果,我可以嘗試為您編寫示例,但是到目前為止,最好的選擇是讓您學習使用以下鏈接進行釣魚 。
參見此處: MSDN KB:如何將ADO與Visual Basic或VBA中的Excel數據一起使用
並在Excel用戶MVP網站上閱讀: 將Excel視為關系數據源
並閱讀: Office Space:使用ADO查詢Excel電子表格
基本上,任務是將所需的過濾數據讀取到ADO Recordset中,然后使用CopyFromRecordset方法將結果轉儲到Sheet2中
因此,您需要閱讀一些內容,如果您需要示例或更多幫助,請告訴我們
菲利普
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.