示例:
Column A = 1
Column B = 0
[用户将Column A
的值更改为0
]
新值:
Column A = 0
Column B = 1
答案 0 :(得分:2)
以下是 A 和 B 列的示例。将此事件宏插入工作表代码区域:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim A As Range, OldValue As Variant, NewValue As Variant, Delta As Variant
Set A = Range("A:A")
If Intersect(Target, A) Is Nothing Then Exit Sub
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
NewValue = Target.Value
Application.Undo
OldValue = Target.Value 'capture previous value
Target.Value = NewValue 'restore new value
If NewValue < OldValue Then
Delta = OldValue - NewValue
Target.Offset(0, 1).Value = Target.Offset(0, 1).Value + Delta
End If
Application.EnableEvents = True
End Sub
如果通过用户操作减小了 A 列中的值,则 B 列(相邻单元格中)中的值将增加同样的数量。
如果 A 列中的值增加,则不会采取任何措施。如果同时更改 A 列中的多个单元格,则不会采取任何措施。
答案 1 :(得分:0)
我有点不喜欢您未付出任何努力来解决您的问题,但是考虑到这是一个很有趣的话题,我为自己准备了一种不错的“实践作业”形式。
此代码产生预期的结果:
Dim oldval As Long
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim ws As Worksheet: Set ws = Sheets("Sheet1")
If Not Intersect(Target, ws.Range("A1:A" & Rows.Count)) Is Nothing Then
If IsNumeric(Target.Value2) Then
oldval = Target.Value2
Else
oldval = 0
End If
End If
End Sub
第一个过程用于存储更改前的原始值^
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A" & Rows.Count)) Is Nothing Then
Target.Offset(0, 1).Value2 = oldval - Target.Value2
End If
End Sub
更改后,在B列中显示差异^
输入数据:
根据A列(预期结果)
答案 2 :(得分:0)
我有这个,它将在workbook_open
的A和B列上加和,然后在A或B更改值时使用它。
这应该转到ThisWorkbook代码区域:
Private Sub Workbook_Open()
Dim i As Integer
For i = 1 To Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
Sheets("Sheet1").Range("C" & i) = Sheets("Sheet1").Range("A" & i) + Sheets("Sheet1").Range("B" & i)
Next i
End Sub
这应该到达工作表代码区域:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Cells(Target.Row, 2) = Cells(Target.Row, 3) - Cells(Target.Row, 1)
End
End If
If Target.Column = 2 Then
Cells(Target.Row, 1) = Cells(Target.Row, 3) - Cells(Target.Row, 2)
End
End If
End Sub