(查找答案更新版本)VBA:循環和偏移量Worksheet_Change
我有一個代碼,這是工作的很好,但有點慢,我想知道如何使它更有效。代碼包含兩個循環的事實可能是其中一個可能的原因。
下面你可以找到整個代碼:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Columns.CountLarge > 1 Then Exit Sub
If Not Intersect(Target, Me.Range("TABLE[COLUMN]")) Is Nothing Then
Application.ScreenUpdating = False
Dim rngCell As Range, urg As Range, drg As Range, u As Integer, d As Integer
d = 0
u = 0
Set urg = Target.Cells(1, 1)
Set drg = Target.Cells(Target.Count, 1)
Do While drg.Offset(d, -13) = drg.Offset(d + 1, -13)
d = d + 1
Loop
Do While urg.Offset(u, -13) = urg.Offset(u - 1, -13)
u = u - 1
Loop
For Each rngCell In Me.Range(Target.Offset(u, 0), Target.Offset(d, 0))
Application.EnableEvents = False
rngCell.Value = Target.Value
Application.EnableEvents = True
Next
Application.ScreenUpdating = True
End If
End Sub
該代碼是插入相同的輸入值(第13列)的所有具有相同ID(第1列)的相鄰小區。例如,如果我將在輸入一個3 Column13任ID002或ID003:
Column1 Column2 Column3... Column13 Column13
ID001 1 1 1 > 1
ID002 2 2 2 > 3
ID002 3 3 2 > 3
ID003 4 4 4 > 4
一旦我unput值時,它需要幾秒鐘以重新計算相鄰小區,所以我將理解任何建議,這將使這個代碼工作更快。
非常感謝!
的'Offset'電話和工作表的訪問可能是什麼殺了你的表現 - 你需要的所有值拉成一個陣列,並與工作。 – Comintern
此外,你可以在年底'rngCell設置的值。value = Me.Range(Target.Offset(u,0),Target.Offset(d,0)).value',使rngCell的深度等於du –