簡體   English   中英

Excel VBA查找全部

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM