私は遅いうまく機能しているコードが、少しを持っていると私はそれをより効率的にする方法を知りたいVBA:Worksheet_Changeでのループとオフセット
(答えで更新されたバージョンを探します) 。コードに2つのループが含まれているという事実が、考えられる原因の1つになる可能性があります。もし以下
全体のコードを見つけることができる:コードは、同じID(列1)を有するすべての隣接セルに対して同じ入力値(列13)に挿入され
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
を。例えば、私は希望の場合は、入力ID002またはID003のいずれかでColumn13 3:私は値をunputたら
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
、それは私がこれを行いますどんなアドバイスをいただければ幸い隣接するセルを再計算するために数秒かかりますコードはより速く動作します。
ありがとうございます!
'Offset'コールとワークシートへのアクセスは、おそらくパフォーマンスであなたを殺すものです。必要なすべての値を配列に取り込み、それを処理します。 – Comintern
また、 'rngCellの最後に値を設定することもできます。value = Me.Range(Target.Offset(u、0)、Target.Offset(d、0))。value'、rngCellをduと同じ深さにする –