Description du problème: Parcourez Excel rangées maximum (environ 10000000) pour trouver l’instr. Après avoir trouvé un instrument, prenez les valeurs et copiez-les dans une autre feuille. Chaque fois que vous recherchez la correspondance qui est instr, copiez la valeur uniquement les correspondances et collez-la sur une feuille différente.
Problème: J'utilise une boucle imbriquée et ma boucle est lente. Pour 10 millions de lignes, cela prend environ 19:37 minutes. Je l'ai chronométré. Donc, première question, existe-t-il différentes façons de le faire ou comment accélérer le processus au lieu de 20 minutes? Est-il possible de comparer 20 millions (chaque feuille, 10 millions de lignes, 10 millions de chaînes) en une minute ou deux? Voici mon code actuel
Sub zym()
Dim x As Long, lastrow As Long, lastrowx As Long, i As Long, ii As Long
Dim ws As Worksheet, ws2 As Worksheet, b As String
Dim j As Long
Set ws = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
Set ws3 = Worksheets("Sheet3")
j = 1
T1 = GetTickCount
lastrow = ws.UsedRange.Rows.Count + 1
lastrowx = ws2.UsedRange.Rows.Count + 1
ReDim sheet1array(1 To lastrow)
ReDim sheet2array(1 To lastrowx)
For i = LBound(sheet1array) To UBound(sheet1array)
b = "-" & ws.Range("A" & i) & "-"
For ii = LBound(sheet2array) To UBound(sheet2array)
If InStr(1, ws2.Range("A" & ii), b) > 0 Then
ws3.Range("A" & j) = ws2.Range("A" & ii)
j = j + 1
End If
Next ii
Next i
Debug.Print "Array Time = " & (GetTickCount - T1) / 1000#
Debug.Print "Array Count = " & Format(ii, "#,###")
End Sub