나는 다음을 입력했습니다 :
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
. 변경된 셀의 행 번호입니다.
편집: 0으로 나누기 검사를 추가하고 입력한 모든 항목이 문자/기호가 아닌 실제 숫자인지 확인합니다.
답변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
메모: 첫 번째 행은 제외됩니다.