Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Union(Range

Forumthread: Union(Range

Union(Range
14.06.2016 11:34:42
Nik

Hallo zusammen..
ich stehe mal wieder etwas auf der Leitung.. Ich möchte gerne Formel durch Werte ersetzen in definierten Bereichen. Das wollte ich so machen:
With ActiveSheet.Union(Range("G12:R20,G22:R34"))
.Cells = .Cells.Value
End With
Was mache ich hier falsch? Hat mir jemand ein Tip?
Vielen lieben Dank und Gruss
Nik

Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Union(Range
14.06.2016 12:02:41
Michael
Hallo Nik,
geht auch ohne Union:
Sub test()
With ActiveSheet.Range("G12:R20", "G22:R34")
.Cells = .Cells.Value
End With
End Sub
Gruß
Michael

Union() ...
14.06.2016 12:39:54
RPP63
... ist eine Methode der Application, nicht eines Worksheets.
Gruss Ralf

AW: Union() ...
14.06.2016 12:55:30
Nik
Okay, probiere ich mal so aus! Vielen lieben Dank für Eure Hilfe!
Gruss
Nik

Anzeige
Funktioniert noch immer nicht! Union() ...
14.06.2016 14:22:28
Nik
Hallo zusammen,
Der Code oben von Michael funktioniert einwandfrei, wenn ich aber den Bereich erweiter wie hier:
Sub test()
With ActiveSheet.Range("G12:R20", "G22:R34", "G36:R37", "G39:R43")
.Cells = .Cells.Value
End With
End Sub
funktioniert er wieder nicht. Ich bin mit meinem Latein echt am Ende. Ich muss einige Bereiche markieren und deren Formeln durch Werte ersetzen. Ich muss prinzipiell alle DBRW-Formeln (TM1-Formeln) ersetzen, welche aber nicht immer am Anfang steht, sondern auch mal verschachtelt in der Mitte. Vielleicht gibt es auch eine andere Lösung?
Vielen lieben Dank und Gruss
Nik

Anzeige
AW: Union(Range
14.06.2016 13:27:26
Daniel
Hi
im Prinzip reicht:
With Range("G12:R20")
.Formula = .Value
End with
das Problem ist, dass das in einem Schritt nur für einen rechteckigen und lückenlosen Zellbereich funktioniert (also alles was mit Zelle_oben_Links / Zelle_unten_Rechts ausreichen beschrieben werden kann)
ist der Zellbereich unterbrochen und besteht aus mehreren Rechteckbereichen, so musst du jeden Bereich separat umwandeln. Diese Rechteckbereiche einer Range sind in deren AREAS hinterlegt, so dass man eine Schleife über die Areas der Range laufen lassen kann:
dim ar as Range
for each ar in Range("G12:R20,G22:R34").areas
ar.formula = ar.value
next
wenn du mit Union arbeiten willst:
dim ar as Range
for each ar in Union(Range("G12:R20"), Range("G22:R34")).areas
ar.formula = ar.value
next
Gruß Daniel

Anzeige
AW: Union(Range
14.06.2016 14:26:58
Nik
Sorry, hab das erst jetzt gesehen, ich probier es grad mal aus! Vielen lieben DANK!
Gruss
Nik

AW: Union(Range
14.06.2016 14:27:03
Nik
Sorry, hab das erst jetzt gesehen, ich probier es grad mal aus! Vielen lieben DANK!
Gruss
Nik

AW: Union(Range
14.06.2016 14:37:01
Nik
Hi Daniel,
funktioniert soweit so gut. Ich habe allerdings noch ein paar Bereiche mehr, die nicht mehr in eine Zeile reinpassen:
Dim ar As Range
For Each ar In Range("G12:R20,G22:R34,G36:R37,G39:R43,G45:R52,G54:R60,G62:R68,G70:R76,G78:R80,G82:R87,G89:R91,G93:R94,G96:R98,G100:R100,G102:R102,G105:R110"), _
Range("U12:AF20,U22:AF34,U36:AF37").Areas
ar.Formula = ar.Value
Next
Ich habe es nicht geschafft die Verbindung auf die nächste Zeile herzustellen, so dass ich noch ein paar Bereiche mehr eintragen kann. Was mache ich hier falsch?
Vielen lieben Dank und Gruss
Nik

Anzeige
"...," & _ nächste Zeile "..." Gruß owT
14.06.2016 14:41:56
Luc:-?
:-?

AW: "...," & _ nächste Zeile "..." Gruß owT
14.06.2016 14:54:02
Nik
Jetzt funktioniert es! :-)
Die eleganteste Lösung wäre halt nach DBRW-Formeln suchen (egal ob die Formel damit beginnt oder auch nur verschachtelt in der Mitte steht) und diese mit Werten ersetzen. Aber das ist nur nice to have wenn sich die Bereiche mal ändern; bin schon happy das es so passt.
DANKE & Gruss
Nik

Anzeige
AW: Union(Range
14.06.2016 14:54:17
Daniel
Hi
in der Range-Funktion darf der Addressstring höchstens 256 Zeichen lang sein (auch wenn die Range aus wesentlich mehr Areas bestehen kann)
Wenn du einen Bereich erstellen willst, dessen Adressstring länger als 256 Zeichen ist, müsstst du aus mehreren Teilbereichen zusammenstetzen (mit Union)
dim rngX as range
dim ar as range
set rngX = Range("G12:R20,G22:R34,G36:R37,G39:R43,G45:R52,G54:R60,G62:R68"))
set rngX = Union(rngX, Range("G70:R76,G78:R80,G82:R87,G89:R91,G93:R94,G96:R98"))
set rngX = Union(rngX, Range("G100:R100,G102:R102,G105:R110"))
for each ar in rngX
...
je nach Struktur lässt sich so ein Bereich auch auch über INTERSECT effektiv erstellen:
set rngX = Intersect(Range("G:R"), Range("12:20,22:34,36:37,39:43,45:52,54:60,62:68,...."))

wenn du die VBA-Befehlszeile in eine neue Editorzeile umberechen willst und dieser Umbruch innerhalb eines Textstrings liegen soll, dann so:
For Each ar in Range("G12:R20,G22:R34,G36:R37,G39:R43,G45:R52" & _
",G54:R60,G62:R68,G70:R76,G78:R80,G82:R87")
Gruß Daniel

Anzeige
AW: Union(Range
14.06.2016 15:07:32
Nik
Hi Daniel,
das ist es, ich bin an diesen 256 Zeichen gescheitert, da hat er mir einen Strich durch die Rechnung gemacht. Danke für die Info! :-)
DANKE und Gruss
Nik

;
Anzeige

Infobox / Tutorial

Nutzung von Union in VBA für Excel


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor in Excel mit ALT + F11.

  2. Erstelle ein neues Modul: Rechtsklick auf „VBAProject (dein Dokument)“ > Einfügen > Modul.

  3. Füge den folgenden Code ein, um einen Bereich mit Union zu erstellen und Formeln durch Werte zu ersetzen:

    Sub ErsetzeFormelnMitWerten()
       Dim rngX As Range
       Dim ar As Range
    
       ' Definiere mehrere Bereiche
       Set rngX = Union(Range("G12:R20"), Range("G22:R34"), Range("G36:R37"))
    
       ' Schleife über jeden Bereich
       For Each ar In rngX.Areas
           ar.Formula = ar.Value
       Next ar
    End Sub
  4. Führe das Makro aus: Markiere die Subroutine und drücke F5, um die Ausführung zu starten.


Häufige Fehler und Lösungen

  • Fehler: „Bereich außerhalb der Grenzen“
    Lösung: Stelle sicher, dass die Zellreferenzen in Union korrekt sind und sich innerhalb des Arbeitsblatts befinden.

  • Fehler: „Method 'Union' nicht gefunden“
    Lösung: Überprüfe, ob du die richtige Syntax verwendest. Union ist eine Methode der Application, nicht eines Worksheets.

  • Fehler: 256-Zeichen-Limit
    Wenn du mehr als 256 Zeichen in einer Range angibst, wird eine Fehlermeldung angezeigt. Nutze stattdessen mehrere Union-Befehle, um Bereiche zusammenzufügen.


Alternative Methoden

Wenn du mit mehreren nicht zusammenhängenden Bereichen arbeitest, kannst du auch die Areas-Eigenschaft verwenden:

Sub ErsetzeFormelnMitWertenAreas()
    Dim ar As Range
    For Each ar In Range("G12:R20,G22:R34").Areas
        ar.Formula = ar.Value
    Next ar
End Sub

Diese Methode ist nützlich, wenn du mit excel vba range union arbeiten möchtest, um Formeln in einem bestimmten Bereich zu ersetzen.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie du vba union effektiv nutzen kannst:

  1. Formeln in einem definierten Bereich ersetzen:

    Sub ErsetzeFormelnInBereich()
       Dim rng As Range
       Set rng = Union(Range("A1:A10"), Range("B1:B10"))
       rng.Formula = rng.Value
    End Sub
  2. Komplexere Union-Operationen:

    Sub KomplexeUnion()
       Dim rngX As Range
       Set rngX = Union(Range("C1:C10"), Range("D1:D10"), Range("E1:E10"))
       For Each ar In rngX
           ar.Value = ar.Formula
       Next ar
    End Sub

Tipps für Profis

  • Verwende Intersect für Überlappungen zwischen Bereichen, um noch präzisere Operationen durchzuführen.

    Dim rngX As Range
    Set rngX = Intersect(Range("G:R"), Range("12:20"))
  • Nutze error handling, um Probleme während der Ausführung zu vermeiden:

    On Error Resume Next
    ' Dein Code hier
    On Error GoTo 0
  • Dokumentiere deinen Code. Füge Kommentare hinzu, um die Funktionalität deiner vba excel union range zu erklären.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Union und Range in VBA?
Union kombiniert mehrere nicht zusammenhängende Bereiche in einen einzigen Range, während Range nur einen zusammenhängenden Bereich beschreibt.

2. Wie kann ich mehrere Bereiche in einer Zeile definieren?
Nutze den „_“-Operator für den Zeilenumbruch in VBA:

Set rngX = Range("G12:R20,G22:R34,G36:R37," & _
                 "G39:R43,G45:R52")

3. Kann ich Union auch für Zellen verwenden, die Formeln enthalten?
Ja, du kannst vba union cells verwenden, um alle Zellen in einem definierten Bereich zu bearbeiten, auch wenn sie Formeln enthalten.

4. Was mache ich, wenn ich mehr als 256 Zeichen in der Range habe?
Teile deine Range in mehrere Union-Befehle auf, um das 256-Zeichen-Limit zu umgehen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige