在同一工作簿中的两个工作表中运行超过100,000行数据的循环

nab*_*lah 5 excel vba excel-vba

我目前有代码允许我查看工作表1和工作表2中匹配ID的行.当两个ID匹配时,工作表2信息将粘贴到具有相同ID的工作表1行.我的代码工作不到1,000行,当我测试它时,它会在一分钟内得到结果.

问题是,当我尝试运行1,000,000行时,它会持续运行超过20分钟并且从那时起就永远不会停止运行.我希望有人可以帮助我对代码进行更改,以允许我进行循环并将信息从Sheet 2粘贴到Sheet 1 200,000行.

Sub Sample()


  Dim tracker As Worksheet
    Dim master As Worksheet
    Dim cell As Range
    Dim cellFound As Range
    Dim OutPut As Long

   Set tracker = Workbooks("test.xlsm").Sheets("Sheet1")
   Set master = Workbooks("test.xlsm").Sheets("Sheet2")

   Application.ScreenUpdating = False
    For Each cell In master.Range("A2:A200000")

        Set cellFound = tracker.Range("A5:A43000").Find(What:=cell.Value, LookIn:=xlValues, LookAt:=xlWhole)
        If Not cellFound Is Nothing Then
      matching value

            cellFound.Offset(ColumnOffset:=1).Value2 = cell.Offset(ColumnOffset:=2).Value2


        Else

        End If
        Set cellFound = Nothing
        Debug.Print cell.Address
    Next
    Application.ScreenUpdating = True
    OutPut = MsgBox("Update over!", vbOKOnly, "Update Status")


End Sub
Run Code Online (Sandbox Code Playgroud)

以上是我现在的代码.

Tim*_*ams 6

结合@ paulbica的建议,这对我来说几秒钟.

Sub Sample()

    Dim rngTracker As Range
    Dim rngMaster As Range
    Dim arrT, arrM
    Dim dict As Object, r As Long, tmp

    With Workbooks("test.xlsm")
        Set rngTracker = .Sheets("Tracker").Range("A2:B43000")
        Set rngMaster = .Sheets("Master").Range("A2:C200000")
    End With

    'get values in arrays
    arrT = rngTracker.Value
    arrM = rngMaster.Value

    'load the dictionary
    Set dict = CreateObject("scripting.dictionary")
    For r = 1 To UBound(arrT, 1)
        dict(arrT(r, 1)) = r
    Next r

    'map between the two arrays using the dictionary
    For r = 1 To UBound(arrM, 1)
        tmp = arrM(r, 1)
        If dict.exists(tmp) Then
            arrT(dict(tmp), 2) = arrM(r, 3)
        End If
    Next r

    rngTracker.Value = arrT

End Sub
Run Code Online (Sandbox Code Playgroud)