TL;DR —
Unionfügt verstreute Rechtecke zu einem Bezug zusammen, sodass Sie mehrere nicht benachbarte Blöcke auf einmal bearbeiten können. Es ist die Code-Fassung davon, mehrere Bereiche mit gedrückter Strg-Taste anzuklicken. Die wichtigste Regel:Unionfügt aneinander, es entfernt keine Duplikate — überlappende Zellen werden doppelt gezählt, es ist also eine Stapelliste, keine mathematische Vereinigung. Seine nützlichste Form ist das Sammelmuster, das Zellen in einer Schleife einsammelt und sie einmal bearbeitet:
Dim flagged As Range, c As Range
For Each c In ThisWorkbook.Worksheets("Data").Range("B2:B1000")
If c.Value < 0 Then
If flagged Is Nothing Then Set flagged = c Else Set flagged = Union(flagged, c)
End If
Next c
If Not flagged Is Nothing Then flagged.Interior.Color = vbRed ' jeden Treffer in einem Aufruf einfaerben
Jeder Bezug bisher hielt ein Rechteck. Union sprengt diese Grenze: eine einzige
Bereichsvariable kann nun B2, D5:D9 und F1 gleichzeitig halten, und eine einzige Zeile färbt,
leert oder kopiert alle drei. Wo SpecialCells Excel eine nicht zusammenhängende Menge für Sie
auswählen lässt, lässt Union Sie eine gezielt bauen. Diese Anleitung ruht auf einer Idee —
Union ist, wie Sie einen Stapel zusammenstellen, um ihn einmal zu bearbeiten, kein Weg, eine
duplikatfreie Menge zu berechnen. Verstehen Sie das, und sowohl die .Count-Überraschung als auch
der Nothing-Fehler ergeben Sinn.
Was Sie lernen
- Das mentale Modell —
Unionverbindet nicht benachbarte Bereiche zu einem Bezug (Strg-Klick im Code) - Die wichtigste Regel — es fügt aneinander, entfernt keine Duplikate, Überschneidungen zählen also doppelt
- Das Sammelmuster —
If Is Nothing ... Else Unionund warum es einen Laufzeitfehler vermeidet - Stapeloperationen — viele Blöcke in einem Aufruf einfärben, leeren oder kopieren statt in einer Schleife
- Die Grenzen — mindestens zwei Argumente, kein
Nothing, alle Bereiche auf demselben Blatt - Wie sich
Union(∪, verbinden) von Intersect (∩, überschneiden) unterscheidet
Das mentale Modell: Union verbindet nicht benachbarte Bereiche zu einem Bezug
Union nimmt zwei oder mehr Bereiche und gibt einen einzigen Bereich zurück, der alle abdeckt:
Dim multi As Range
Set multi = Union(Range("A1:A3"), Range("C1:C3"), Range("E1"))
multi.Interior.Color = vbYellow ' drei getrennte Bloecke, zusammen hervorgehoben
Dieser Bezug verhält sich bei den meisten Operationen wie jeder andere Bereich — ein
.Interior.Color, ein .ClearContents, ein .Copy fasst jeden Block an. Stellen Sie sich vor, Sie
wählen Zellen von Hand mit gedrückter Strg-Taste: Sie klicken A1:A3, dann C1:C3, dann E1, und nun
bewegen sie sich als Gruppe. Union ist dieser Strg-Klick in Code ausgedrückt, und es ist der einzige
Weg, einer einzigen Operation eine einzige nicht benachbarte Auswahl zu übergeben.
Die wichtigste Regel: Union fügt aneinander, es entfernt keine Duplikate
Hier führt der Name in die Irre. In der Mengenlehre entfernt eine „Vereinigung“ Duplikate. VBAs
Union tut das nicht. Es näht die Bereiche unverändert zusammen, sodass Zellen, die in mehr als
einem Argument vorkommen, doppelt gezählt werden:
Dim u As Range
Set u = Union(Range("A1:A5"), Range("A3:A8"))
Debug.Print u.Count ' gibt 11 aus (5 + 6), NICHT 8 - A3:A5 doppelt gezaehlt
Die Überschneidung A3:A5 ist aus beiden Argumenten enthalten, .Count meldet also 11 für das, was nur
8 verschiedene Zellen sind. Das ist harmlos, solange Sie auf dem Bezug arbeiten — dieselbe Zelle
zweimal einzufärben schadet nicht —, aber es ist ein echter Bug, wenn Sie das Ergebnis mit .Count
zählen, aufsummieren oder irgendwohin geben, das verschiedene Zellen voraussetzt. Die Lehre: Nutzen
Sie Union, um Zellen zum Bearbeiten zusammenzustellen, nie, um zu berechnen, wie viele
verschiedene Zellen Sie haben. Brauchen Sie wirklich eine duplikatfreie Menge, filtern Sie die Daten
stattdessen mit einem AutoFilter.
Das Sammelmuster: einen Bezug in einer Schleife aufbauen
Der wertvollste Einsatz von Union ist, Treffer während einer Schleife einzusammeln und sie am Ende
einmal zu bearbeiten. Aber es gibt einen Haken: Union verlangt mindestens zwei echte Bereiche
und weist Nothing zurück, sodass Union(rngAll, c) in der ersten Iteration scheitert, wenn
rngAll noch leer ist. Das übliche Idiom sichert die erste Zelle ab:
Dim rngAll As Range, c As Range
For Each c In Range("A2:A1000")
If Len(Trim(c.Value)) = 0 Then ' was auch immer Ihre Bedingung ist
If rngAll Is Nothing Then
Set rngAll = c ' erster Treffer - direkt setzen
Else
Set rngAll = Union(rngAll, c) ' spaetere Treffer - den Bezug erweitern
End If
End If
Next c
If Not rngAll Is Nothing Then rngAll.EntireRow.Delete ' ein Delete fuer jeden Treffer
Lesen Sie den Schutz so: den Bezug mit dem ersten Treffer bestücken, dann alle weiteren per Union
daran anfügen. Den Zweig If rngAll Is Nothing wegzulassen ist der häufigste Union-Fehler —
Nothing als Argument zu übergeben löst einen Laufzeitfehler aus, sobald die Schleife ihren ersten
Treffer findet.
Stapeloperationen: ein Aufruf statt einer Schleife pro Zelle
Warum überhaupt einen Bezug zusammenstellen, statt einfach jede Zelle zu bearbeiten, sobald man sie
findet? Tempo. Das Arbeitsblatt einmal pro Zelle anzufassen ist der Hauptgrund, warum Makros kriechen.
Sammeln Sie die Zellen mit Union und führen Sie dann eine Operation auf der ganzen Gruppe aus —
in der Schleife entscheiden, auf den Bereich anwenden:
' Langsam: schreibt bei jeder passenden Zeile ins Blatt
For Each c In rng
If c.Value > 100 Then c.Interior.Color = vbGreen ' ein Blattzugriff pro Treffer
Next c
' Schnell: erst sammeln, dann einmal einfaerben
For Each c In rng
If c.Value > 100 Then _
Set hot = IIf(hot Is Nothing, c, Union(hot, c))
Next c
If Not hot Is Nothing Then hot.Interior.Color = vbGreen ' ein einziger Blattzugriff
Das ist dieselbe Disziplin, die der Leitfaden zu VBA Cell Color fürs Hervorheben empfiehlt: die Ziele sammeln, das Format einmal anwenden. Bei Tausenden Zeilen ist der Unterschied Sekunden gegen Millisekunden.
Die Grenzen: zwei Argumente, kein Nothing, dasselbe Blatt
Drei Einschränkungen erwischen die Leute, und alle drei sind schnell gesagt:
- Mindestens zwei Bereiche.
Unionbraucht zwei oder mehr Argumente, und keines davon darfNothingsein — daher der Sammelschutz oben. - Dasselbe Arbeitsblatt. Jeder Bereich, den Sie vereinen, muss auf demselben Blatt liegen.
Bereiche von zwei Blättern zu kombinieren wirft den
error 1004; brauchen Sie blattübergreifende Arbeit, verarbeiten Sie die Vereinigung jedes Blatts einzeln. - Das Ergebnis hat mehrere Bereiche. Wie bei SpecialCells ist eine
Vereinigung ein nicht zusammenhängender Bezug. Schleifen Sie
For Each area In u.Areas, wenn Sie jeden zusammenhängenden Block brauchen, und denken Sie daran, dass.Countjede Zelle über alle Bereiche summiert (Überschneidungen doppelt gezählt).
Union gegen Intersect: verbinden gegen überschneiden
Union und Intersect sind die beiden Mengenoperatoren auf Bereichen, und
sie sind Gegensätze. Union(A, B) gibt alles zurück, was in A oder B liegt — die kombinierte
Fläche. Intersect(A, B) gibt nur zurück, was in beiden liegt — die Überschneidung, oder
Nothing, wenn sie sich nicht berühren. Union lässt einen Bezug wachsen; Intersect schrumpft ihn auf
den gemeinsamen Teil. Greifen Sie zu Union, um verstreute Zellen zu einem Stapel zusammenzustellen,
und zu Intersect, um zu prüfen oder einzugrenzen — am berühmtesten für die Frage „hat der Benutzer
eine Zelle innerhalb des Bereichs bearbeitet, der mich interessiert?“
Wie ExcelMaster hilft
Union ist trügerisch einfach: den Sammelschutz vergisst man leicht bei der ersten Iteration, die
.Count-Doppelzählung verfälscht still jede Summe, und „nur dasselbe Blatt“ taucht als ein 1004
auf, mit dem Sie nicht gerechnet haben. Keiner davon zeigt sich, bis genau die Eingabe kommt, die ihn
auslöst.
ExcelMaster lässt Sie stattdessen das
Ergebnis beschreiben. Sagen Sie „hebe jede Zeile hervor, in der der Saldo negativ ist“ oder „lösche
alle leeren Zeilen in Spalte A“, und es schreibt die Schleife, bestückt den Bezug mit dem ersten
Treffer, erweitert ihn mit Union und führt eine Operation auf der ganzen Gruppe aus — die schnelle,
abgesicherte Fassung, ohne den Nothing-Absturz oder die Verlangsamung Zelle für Zelle. Sie behalten
die Arbeitsmappe und den Code; Sie sparen sich den Durchlauf, in dem die Schleife das Blatt
zehntausendmal anfasste.
Häufig gestellte Fragen
Was macht die Union-Methode in Excel VBA?
Union verbindet zwei oder mehr Bereiche zu einem einzigen Bezug, der sie alle abdeckt, auch wenn
sie nicht nebeneinander liegen. Sie können dann jeden Block in einer Operation einfärben, leeren,
kopieren oder löschen. Es ist das Code-Äquivalent dazu, mehrere Bereiche auf einem Blatt mit gedrückter
Strg-Taste anzuklicken, sodass sie als eine Auswahl wirken.
Entfernt VBA Union doppelte Zellen?
Nein. Union fügt die Bereiche ohne Duplikatentfernung aneinander, sodass eine Zelle, die in mehr als
einem Argument vorkommt, doppelt gezählt wird. Union(Range("A1:A5"), Range("A3:A8")).Count gibt
11 zurück, nicht 8. Das ist harmlos, wenn Sie auf dem Bezug arbeiten, aber falsch, wenn Sie ihn zählen
oder aufsummieren — nutzen Sie Union, um Zellen zum Bearbeiten zusammenzustellen, nicht, um eine
duplikatfreie Menge zu berechnen.
Warum wirft Union in einer Schleife einen Fehler?
Weil Union mindestens zwei echte Bereiche verlangt und Nothing zurückweist. In der ersten
Iteration ist Ihre Sammelvariable noch Nothing, also scheitert Union(rngAll, c). Sichern Sie es
ab: If rngAll Is Nothing Then Set rngAll = c Else Set rngAll = Union(rngAll, c) — mit dem ersten
Treffer bestücken, dann den Rest vereinen.
Kann Union Bereiche aus verschiedenen Arbeitsblättern verbinden?
Nein. Alle an Union übergebenen Bereiche müssen auf demselben Arbeitsblatt liegen; Blätter zu
mischen wirft den error 1004. Müssen Sie blattübergreifend arbeiten, bauen und verarbeiten Sie für
jedes Blatt eine eigene Vereinigung.
Was ist der Unterschied zwischen Union und Intersect in VBA?
Es sind gegensätzliche Mengenoperationen auf Bereichen. Union gibt alles zurück, was in einem der
beiden Bereiche liegt — die kombinierte Fläche. Intersect gibt nur zurück, was in beiden liegt
— die Überschneidung, oder Nothing, wenn sie sich nicht berühren. Nutzen Sie Union, um verstreute
Zellen zu einem Stapel zusammenzustellen, und Intersect, um zu prüfen, ob ein Bereich innerhalb eines
anderen liegt.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 16.08.2026.
Verwandte Anleitungen: VBA Intersect · VBA SpecialCells · VBA Range · VBA Cell Color · VBA For-Schleife
