好的,这可能会让您朝着正确的方向开始:
您首先要存储所有原始单元格值。因此,以下 VBA 代码将 A 列中前 200 行的值存储到一个数组中。您需要先运行此代码,可能是在打开工作簿时:
Dim contents(200) As Variant
Public Sub StoreOriginalValues()
' save all existing values
For r = 1 To 200 ' change for number of rows you have
contents(r) = Worksheets(1).Cells(r, 1).Value
Next
End Sub
存储原始单元格值后,您可以在 Worksheet_Change 事件中放置代码,以便每当用户更改 A 列中的单元格时,您都可以比较原始值和新值并找出差异。然后,您可以将此差异应用于该行中的其余列:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then ' only check for changes in column A
originalvalue = contents(Target.Row)
newvalue = Target.Value
contents(Target.Row) = Target.Value
difference = newvalue - originalvalue
Set chgcell = Cells(Target.Row, Target.Column + 1)
Do While Not IsEmpty(chgcell)
chgcell.Value = chgcell.Value + difference
Set chgcell = chgcell.Offset(0, 1) ' move one column to right
Loop
End If
End Sub
现在这段代码绝不是完美的。例如,它不会检查他们是否输入了有效时间。它也不会检查在该行的其余列中输入的值是否是时间或文本或诸如此类。但就像我说的,我希望它能为你指明正确的方向。