Я ввел следующее:
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
), оно перейдет к остальной части кода, которая заключается в изменении U, V и O с использованием Target.Row
, то есть номера строки измененной ячейки.
Редактировать: Добавлена проверка деления на ноль и проверка того, что все введенные элементы на самом деле являются числами, а не буквами/символами.
решение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
Примечание: Это исключает первую строку.