So wenden Sie eine Makro-/VBA-Formel auf mehr als nur eine Zelle an

So wenden Sie eine Makro-/VBA-Formel auf mehr als nur eine Zelle an

Ich habe folgendes eingetragen:

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

.....Das funktioniert jedoch nur mit den Zellen u2 und v2. Ich brauche diese Formel, um die gesamte Spalte U und Spalte V abzudecken.

Jede Hilfe wird geschätzt.

Antwort1

Wenn ich das richtig verstehe, könnte man so etwas gebrauchen.

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

Dieses Ereignis wird jedes Mal ausgelöst, wenn eine Zelle geändert wird. Dabei wird geprüft, in welcher Spalte die Änderung erfolgt - If Target.Column = 22 Then... Wenn die Spalte 22 ist (numerische Darstellung für Spalte V), wird mit dem Rest des Codes fortgefahren, der darin besteht, U, V und O mithilfe von zu ändern Target.Row, d. h. der Zeilennummer der geänderten Zelle.

Bearbeiten: Die Prüfung „Dividieren durch Null“ wurde hinzugefügt und es wird geprüft, ob alle eingegebenen Elemente tatsächlich Zahlen und keine Buchstaben/Symbole sind.

Antwort2

Halten:

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

Notiz: Die erste Zeile ist hiervon ausgeschlossen.

verwandte Informationen