Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Range.Merge

Forumthread: VBA: Range.Merge

VBA: Range.Merge
19.02.2020 11:10:03
Axel
Hallo zusammen,
dank der hervorragenden Unterstützung dieses Forums habe ich in der unten stehenden Musterdatei ein funktionierendes Makro einbinden können.
https://www.herber.de/bbs/user/135279.xlsm
Das Makro ist bereits ausgeführt. Ich möchte nun im Tabellenblatt1 in den Spalten A, B und C die jeweils gleichen Blöcke zusammenfassen (Verbinden und Zentrieren).
Grundsätzlich geht das gem. Makroeditor mit Range.Merge, aber wie identifiziere ich die jeweiligen gleichen Werte, also die zusammen zu fassenden Ranges?
Nochmals vielen Dank vorab für eure Hilfe.
Beste Grüße
Axel
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Range.Merge
19.02.2020 12:24:13
Axel
Ich hab mal einen Ansatz gefunden, der einen Denkanstoß für die VBA-Kenner liefern könnte:
Sheets("Tabelle1").Select
Range("A12").Select
Do Until ActiveCell.Value = False
If ActiveCell.Value = ActiveCell.Offset(1, 0).Value Then
ActiveCell.Offset(0, -6).Value = ActiveCell.Offset(1, 0).Value
ActiveCell.Offset(1, 0).Value = Empty
ActiveCell.Offset(2, 0).Select
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
Dieses "Do Until ActiveCell.Value = False" und das als Loop hört sich für mich schon mal gut an. Was danach gemacht wird, verstehe ich nicht und irgenmdwo müsste dann auch noch stehen, dass die Zellen mit dem selben Inhalt verbunden und zentriert werden.
Ich hoffe, das hilft irgendjemandem.
Danke vorab und Gruß
Axel
Anzeige
AW: VBA: Range.Merge
19.02.2020 13:39:54
Axel
Hallo nochmal,
ich habe mal etwas Code zusammenkopiert, der natürlich nicht funktioniert, aber vielleicht jemandem hilft, der sich mit VBA auskennt:
Public Sub Zellen_verbinden()
Tabelle1.Activate
Range("A12").Select
Do Until ActiveCell.Value = False
If ActiveCell.Value = ActiveCell.Offset(1, 0).Value Then
Range("A12:A15").Select 'das müsste vom Makro identifiziert werden
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
ActiveCell.Offset(1, 0).Value = ActiveCell.Offset(1, 0).Value
ActiveCell.Offset(1, 0).Value = Empty
ActiveCell.Offset(2, 0).Select
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
End Sub

Wenn ich irgendwie unterstützen kann, schreibt bitte in diesen Thread.
Vielen Dank an alle Helfer.
Axel
Anzeige
AW: VBA: Range.Merge
20.02.2020 10:55:35
hary
Moin
Probier mal.
Sub Zellen_verbinden()
Dim i As Long, anfang As Long, ende As Long
Tabelle1.Activate
anfang = 12
For i = 12 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 1) = Cells(i + 1, 1) Then
ende = i
Else
Application.DisplayAlerts = False
Range(Cells(anfang, 1), Cells(ende + 1, 1)).MergeCells = True
Range(Cells(anfang, 2), Cells(ende + 1, 2)).MergeCells = True
Range(Cells(anfang, 3), Cells(ende + 1, 3)).MergeCells = True
With Range(Cells(anfang, 1), Cells(ende + 1, 3))
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
anfang = i + 1
End If
Next
Application.DisplayAlerts = True
End Sub

gruss hary
Anzeige
gelöst
20.02.2020 11:36:45
Axel
Hi hary,
Du bist der Held des Tages.
Das ist genau, was ich suchte.
Ich hatte in der Zwischenzeit auch schon was ausprobiert, kam aber nicht ins Ziel.
Ich schau mir Deinen Code noch mal genau an und werde versuchen zu verstehen, was wo passiert.
Auf jeden Fall tausend Dank!!!
Gruß
Axel
Anzeige
AW: VBA: Range.Merge
20.02.2020 11:51:03
Axel
hary, ich muss leider noch mal nachfragen.
In der Spalte C funtioniert der Zellverbund noch nicht richtig.
Hast Du eine Idee, wo der Fehler liegt?
Ich bin definitiv überfragt.
Danke und Gruß
Axel
AW: VBA: Range.Merge
20.02.2020 12:05:25
hary
Moin
Was genau funtioniert nicht in SpalteC. es werden doch die Zellen verbunden. Verbundzellen sind gemaess SpalteA.



Tabelle1
 ABC
10ThemaUnterthema1Unterthema2
11
12Leichtleichteram leichtesten
13
14
15
16Schwerschwereram schwersten
17
18
19
20

 verbundene Zellen 
A10:A11
B10:B11
C10:C11
A12:A15
B12:B15
C12:C15
A16:A20
B16:B20
C16:C20

http://excel-inn.de/dateien/vba_beispiele/tabellenanzeige_in_html_addin.zip
http://hajo-excel.de/tools.htm
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 14.02 einschl 64 Bit

gruss hary
Anzeige
AW: VBA: Range.Merge
20.02.2020 12:11:57
Axel
Hi hary,
sorry, vielleicht habe ich mich auch nicht richtig ausgedrückt.
Guck mal, hier noch mal die Datei mit Deinem Makro
https://www.herber.de/bbs/user/135309.xlsm
In Spalte B und C sollen nur die jeweils gleichen Bezeichnungen zusammengefasst werden, unabhängig von Spalte A, es werden aber die Zellen analog der Verbindung aus Spalte A zusammengefasst mit dem jeweils ersten Begriff aus der jeweiligen Verbindung.
Warte, ich lade mal das IST und Soll separat hoch.
gruß
Axel
Anzeige
AW: VBA: Range.Merge
20.02.2020 12:18:58
Axel
hary, bitte guck mal, hier habe ich Ursprungsformat, Format nach Deinem Makro und Zielformat untereinander aufgelistet:
https://www.herber.de/bbs/user/135311.xlsm
So wird es deutlicher.
Und ich danke Dir für Deine Mühe unendlich.
Gruß
Axel
Anzeige
AW: VBA: Range.Merge
21.02.2020 06:47:01
hary
Moin Axel
Sry, aber ich komm meist morgens zum schreiben.
Jetzt sollte es klappen.
Sub Zellen_verbinden()
Dim i As Long, anfang As Long, ende As Long, spalte As Long
Dim bereich As Range
Tabelle1.Activate
For spalte = 1 To 3
anfang = 12
For i = 12 To Cells(Rows.Count, spalte).End(xlUp).Row
If Cells(i, spalte) = Cells(i + 1, spalte) Then
ende = i
Else
Application.DisplayAlerts = False
ende = i
Set bereich = Range(Cells(anfang, spalte), Cells(ende, spalte))
If anfang 

gruss hary
Anzeige
final gelöst
21.02.2020 07:57:39
Axel
Guten Morgen hary,
tausend Dank für Deine Unterstützung.
Ich hab's jetzt eingesetzt und getestet und es funktioniert.
Ohne Dich hätte ich das nie hinbekommen.
Ich weiß Deine Hilfe wirklich zu schätzen.
Schönes Wochenende
Axel
;
Anzeige

Infobox / Tutorial

VBA: Zellen zusammenfassen und zentrieren mit Range.Merge


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel, um den VBA-Editor zu öffnen.

  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle Einfügen > Modul.

  3. Code einfügen: Kopiere den folgenden VBA-Code und füge ihn in das neue Modul ein:

    Sub Zellen_verbinden()
        Dim i As Long, anfang As Long, ende As Long
        Dim spalte As Long
        Tabelle1.Activate
        For spalte = 1 To 3
            anfang = 12
            For i = 12 To Cells(Rows.Count, spalte).End(xlUp).Row
                If Cells(i, spalte) = Cells(i + 1, spalte) Then
                    ende = i
                Else
                    If anfang < ende Then
                        Range(Cells(anfang, spalte), Cells(ende + 1, spalte)).Merge
                        With Range(Cells(anfang, spalte), Cells(ende + 1, spalte))
                            .HorizontalAlignment = xlCenter
                            .VerticalAlignment = xlCenter
                        End With
                    End If
                    anfang = i + 1
                End If
            Next i
        Next spalte
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle Zellen_verbinden aus und klicke auf Ausführen.

  5. Überprüfe das Ergebnis: Deine Zellen in den Spalten A, B und C sollten nun entsprechend den gleichen Werten zusammengefasst und zentriert sein.


Häufige Fehler und Lösungen

  • Fehler: "Laufzeitfehler 1004 - Anwendung oder Objekt definiert"

    • Lösung: Stelle sicher, dass du die richtige Tabelle in deinem Code angibst. Wenn dein Tabellenblatt einen anderen Namen hat, ändere Tabelle1 entsprechend.
  • Fehler: Zellen werden nicht korrekt verbunden

    • Lösung: Überprüfe, ob die Werte in den Zellen tatsächlich identisch sind. Manchmal können zusätzliche Leerzeichen oder unterschiedliche Groß-/Kleinschreibung die Übereinstimmung stören.

Alternative Methoden

  • Verwendung von Excel-Funktionen: Anstelle von VBA kannst du auch die Funktion "Bedingte Formatierung" nutzen, um visuelle Hinweise zu geben, wo Zellen zusammengehören, anstatt sie tatsächlich zu verbinden.

  • Power Query: Eine gute Alternative zum Zusammenfassen von Daten ist Power Query, das dir ermöglicht, Daten zu transformieren und zu aggregieren, ohne sie manuell zu verbinden.


Praktische Beispiele

Hier sind einige Codebeispiele zur Verwendung von .Merge in VBA:

  1. Zellen in einem bestimmten Bereich verbinden:

    Range("A1:A5").Merge
  2. Zellen in einer Schleife verbinden:

    For i = 1 To 5
        If Cells(i, 1).Value = Cells(i + 1, 1).Value Then
            Range(Cells(i, 1), Cells(i + 1, 1)).Merge
        End If
    Next i

Tipps für Profis

  • Verwende .MergeCells: Du kannst die Eigenschaft .MergeCells verwenden, um zu überprüfen, ob Zellen bereits verbunden sind, bevor du versuchst, sie erneut zu verbinden.

  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen (z.B. On Error Resume Next), um sicherzustellen, dass dein Makro auch bei unerwarteten Situationen nicht abstürzt.

  • Performance verbessern: Deaktiviere Bildschirmaktualisierung (Application.ScreenUpdating = False) während der Ausführung des Makros, um die Performance zu steigern.


FAQ: Häufige Fragen

1. Frage
Wie kann ich nur bestimmte Zellen verbinden und nicht alle in einem Bereich?
Antwort: Du kannst eine Bedingung in deine Schleife einfügen, um nur Zellen zu verbinden, die einem bestimmten Kriterium entsprechen.

2. Frage
Kann ich auch Zellen verbinden, die nicht nebeneinander liegen?
Antwort: Ja, du kannst die .Union-Methode verwenden, um nicht zusammenhängende Bereiche auszuwählen und zu verbinden.

3. Frage
Wie finde ich bereits verbundene Zellen mit VBA?
Antwort: Du kannst die Eigenschaft MergeCells verwenden, um herauszufinden, ob eine Zelle Teil eines verbundenen Bereichs ist:

If Cells(1, 1).MergeCells Then
    ' Zelle ist verbunden
End If

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige