두 개 이상의 셀에 매크로/VBA 수식을 적용하는 방법

두 개 이상의 셀에 매크로/VBA 수식을 적용하는 방법

나는 다음을 입력했습니다 :

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

메모: 첫 번째 행은 제외됩니다.

관련 정보