Excel VBA: Wenn nicht Intersect(Target, Range)
Schritt-für-Schritt-Anleitung
-
Öffne den VBA-Editor in Excel, indem du Alt + F11
drückst.
-
Wähle das entsprechende Arbeitsblatt im Projektfenster aus, in dem du das Makro implementieren möchtest.
-
Füge den folgenden Code in das Arbeitsblattmodul ein:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Dim zeile1 As Long, zeile2 As Long
Dim i As Integer
Dim j As Integer
If Not Intersect(Target, Range("B5:B26")) Is Nothing Then
For i = 5 To 26
If Cells(i, 2) = Target.Value Then
If Not i = Target.Row Then
zeile1 = Target.Row
zeile2 = i
For j = 2 To 366
Cells(zeile1, j) = Cells(zeile2, j)
Cells(zeile2, j) = ""
Next j
End If
End If
Next i
End If
Application.ScreenUpdating = True
End Sub
-
Speichere die Datei als Makro-aktivierte Arbeitsmappe (.xlsm
).
-
Teste das Makro, indem du eine Zelle innerhalb des Bereichs B5:B26 änderst.
Häufige Fehler und Lösungen
-
Excel stürzt ab: Stelle sicher, dass Application.EnableEvents
deaktiviert ist, bevor du Zellen veränderst, und aktiviere es danach wieder.
Application.EnableEvents = False
' Zellenänderungscode
Application.EnableEvents = True
-
Laufzeitfehler 438: Überprüfe, ob die Variablen zeile1
und zeile2
deklariert sind. Füge Option Explicit
oben im Modul hinzu.
-
Endlosschleife: Wenn dein Makro ständig neu ausgelöst wird, stelle sicher, dass du If Not Intersect(Target, Range("B5:B26")) Is Nothing
korrekt implementierst.
Alternative Methoden
Eine alternative Methode zur Verwendung von Intersect
ist die Verwendung von Application.Intersect
. Diese Methode ist besonders nützlich, wenn du mit mehreren Bereichen gleichzeitig arbeitest:
If Not Application.Intersect(Target, Me.Range("B5:B26")) Is Nothing Then
' Dein Code hier
End If
Praktische Beispiele
Wenn du in der Zelle B5 einen neuen Wert eingibst und dieser Wert bereits in B5:B26 vorhanden ist, wird die gesamte Zeile, die diesem Wert entspricht, in die aktive Zeile kopiert und die ursprüngliche Zeile gelöscht.
Tipps für Profis
-
Verwende Option Explicit
: Dies hilft, unbeabsichtigte Fehler zu vermeiden, da alle Variablen deklariert werden müssen.
-
Debugging: Nutze die Debug.Print
-Anweisung, um Werte während der Ausführung zu überwachen.
Debug.Print "Aktuelle Zeile: " & zeile1
-
Optimierung: Wenn dein Makro große Datenmengen verarbeitet, erwäge, Application.Calculation
auf xlCalculationManual
zu setzen, um die Berechnung zu optimieren.
FAQ: Häufige Fragen
1. Was ist Intersect
in Excel VBA?
Intersect
überprüft, ob sich zwei Bereiche überschneiden. Es gibt Nothing
zurück, wenn sie sich nicht überschneiden.
2. Wie verhindere ich, dass mein Makro in eine Endlosschleife gerät?
Stelle sicher, dass du Application.EnableEvents
deaktivierst, während dein Makro Änderungen an Zellen vornimmt, um zu verhindern, dass das Change-Event erneut ausgelöst wird.
3. Wie deklariere ich Variablen in VBA?
Verwende Dim
, um Variablen zu deklarieren. Zum Beispiel: Dim zeile1 As Long
.
4. Was passiert, wenn ich ActiveCell
anstelle von Target
verwende?
ActiveCell
bezieht sich auf die Zelle, die zur Zeit des Makros aktiv ist. Du solltest Target
verwenden, da es die Zelle repräsentiert, die die Änderung ausgelöst hat.
5. Warum funktioniert mein Code nicht wie erwartet?
Überprüfe die Verwendung von If Not Intersect
und stelle sicher, dass du den richtigen Bereich angibst. Debugging kann helfen, das Problem zu identifizieren.