평상시처럼 문제를 해결하기 위해 마침내 도움을 청하기 전에 시간을 낭비했습니다. 그래서 도움을 주시면 대단히 감사하겠습니다!Excel VBA 모두 찾기
내 데이터의 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
을 해당 행의 셀 L에 복사하십시오.
이것이 가능합니까? 내가 절대적으로 필요한 경우 Test2
에서 검색 가능한 값을 하나의 셀로 연결할 수는 있지만 오탐 (false positive)과 일치하므로 피할 수 있다면 오히려 원하지 않습니다. 사전에
감사합니다,
조
http://stackoverflow.com/questions을 필요로하는 경우에 저희에게 알려/8756802/excel-function-to-make-sql-like-queries-on-worksheet-data)을 참조하십시오. 주제를 벗어난 – wakjah
, 미안하지만, 누군가 구식'while ... wend' 루프를 사용하고있는 것은 이번이 처음입니다. –
** Test1 **에서는 50k, ** Test2 **에서는 50k로 각 시트의 행 수 때문에이 25 억 회를 통과해야합니다! 와우! 내가 맞습니까? – glh