我输入了以下内容:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$V$2" Then
Range("U2") = Range("V2") * Range("O2")
End If
If Target.Address = "$U$2" Then
Range("V2") = Range("U2") / Range("O2")
End If
End Sub
.....但是,这只适用于单元格 u2 和 v2。我需要此公式一直运行到 U 列和 V 列。
任何帮助都将受到赞赏。
答案1
如果我理解正确的话,您可以使用类似这样的东西。
Private Sub Worksheet_Change(ByVal Target As Range)
'Don't apply to column headers
If Target.Row = 1 Then Exit Sub
'Make changes to anything in Column V (22)
If Target.Column = 22 Then
If IsNumeric(Range("V" & Target.Row)) And IsNumeric(Range("O" & Target.Row)) Then
Range("U" & Target.Row) = Range("V" & Target.Row) * Range("O" & Target.Row)
End If
End If
'Make changes to anything in Column U (21)
If Target.Column = 21 Then
If IsNumeric(Range("U" & Target.Row)) And IsNumeric(Range("O" & Target.Row)) And Range("O" & Target.Row) <> 0 Then
Range("V" & Target.Row) = Range("U" & Target.Row) / Range("O" & Target.Row)
End If
End If
End Sub
每次更改单元格时都会触发此事件。因此,它将检查更改在哪一列 - If Target.Column = 22 Then
... 如果列是 22(列的数字表示V
),它将继续执行其余代码,即使用 (即Target.Row
更改单元格的行号)更改 U、V 和 O。
编辑:添加了除以零检查,并检查以确保所有输入的项目实际上都是数字而不是字母/符号。
答案2
考虑:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 Then Exit Sub
If Intersect(Target, Range("U:V")) Is Nothing Then Exit Sub
Application.EnableEvents = False
If Not Intersect(Target, Range("V:V")) Is Nothing Then
Target.Offset(0, -1).Value = Target.Value / Range("O" & Target.Row).Value
Else
Target.Offset(0, 1).Value = Target.Value / Range("O" & Target.Row).Value
End If
Application.EnableEvents = True
End Sub
笔记: 这排除了第一行。