(查找答案更新版本)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 –