有没有更好的select比循环减less处理时间?

我正在通过未决数据列表上的values循环,然后更新主列表(如果有任何这些值是新的)。 未决列表通常有100-200 rows的数据,每row有大约10个variables ,需要确保在主列表上更新。 主列表大约有10,000 rows

我已经编写了代码,这些代码将loop未决列表的each row ,将values分配给variables ,然后在主列表上执行find以查找匹配的logging,然后相应地更新它。 我的代码工作正常,正是我想要的,但处理时间约为4分钟,比使用它的人员愿意允许的时间长3分50秒而不抱怨。

是否有替代编码,我可以用来帮助减less处理时间?

我有很长的代码,所以我不打算把它粘贴在这里,而是粘贴snip-it,以便你可以了解我现在正在做什么:

 Application.Screenupdating = False Applicaiton.Enableevents = False Application.Calculation = xlCalculationManual PendingBRow = ThisWorkbook.Sheets("PendingLog").Range("A65000").End(xlUp).Row MasterBRow = ThisWorkbook.Sheets("MasterLog").Range("A65000").End(xlUp).Row For D = 2 To PendingBRow With ThisWorkbook.Sheets("PendingLog").Range("A" & D) PendingRecordNumber = .Value PendingIR = .offset(0, 5).Value PendingVal = .offset(0, 6).Value End With With ThisWorkbook.Sheets("MasterLog").Range("B2:B" & MasterBRow) Set c = .Find(PendingRecordNumber, LookIn:=xlValues) If Not c Is Nothing Then firstAddress = c.Address Do DaysSinceLastWorkedStatic = c.offset(0, 22).Value MasterIRValue = c.offset(0, 16).Value If PendingIR <> 0 Then If PendingIR <> MasterIRValue Then c.offset(0, 16).Value = PendingIR DaysSinceLastWorkedStatic = 0 c.offset(0, 22).Value = DateVal End If End If c.offset(0, 24).Value = POorLA c.offset(0, 25).Value = FinalizedFlag Set c = .FindNext(c) Loop While Not c Is Nothing And c.Address <> firstAddress ' in rare cases a record number could be duplicated on the master list. end if end with ThisWorkbook.Sheets("PendingLog").Range("A" & D).offset(0, 15).Value = DaysSinceLastWorkedStatic Next D 

我考虑过的一个替代scheme是按照logging号过滤主列表,只更新可见行,然后对待处理列表上的每个logging号进行未过滤。 我还没有testing过这个方法。

这个方法能比我所拥有的更好吗?

所以我不知道这是否会是一个答案,但我认为这可能至less会让你看看另一种types的查找/更新代码。

这是用来更新人们计划工作的时间

在这个例子中,我有一个名字B与时间A行。 我将更新的名称和时间粘贴到行H和I中。有时它的全部98次有时候只有5次,并且该程序查看列表find名字,并从I中抽出时间并将其写在B中相应的时间上。

 Option Explicit Sub Update_Holiday() Dim ws As Worksheet Dim SrcRng As Range Dim schRng As Range Dim c As Range Dim search As Range Set ws = ThisWorkbook.Sheets(3) Set SrcRng = ws.Range("H2:H98") Set schRng = ws.Range("A2:A98") For Each c In SrcRng Set search = schRng.Find(c.Value, LookIn:=xlValues, SearchDirection:=xlNext) If Not search Is Nothing Then c.Offset(, 1).Copy search.Offset(, 1) End If Next c End Sub