Если я правильно понимаю, вы можете использовать что-то вроде этого.
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
, то есть номер строки измененной ячейки.
Редактировать: добавлена проверка деления на ноль и проверка того, что все введенные элементы представляют собой цифры, а не буквы / символы.