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

Forumthread: VBA Code Zeilen verbinden

VBA Code Zeilen verbinden
13.02.2016 13:21:01
Tom
Hallo zusammen,
wie bekomme ich die folgende Formatierung per Makro hin?
Ich bekomme eine Liste aus einer Html App exportiert.
Ab der Zeile 9 sind Informationen in den Zellen enthalten.
Jetzt soll per Code immer eine leere Zeile nach einer bereits beschriebene Zeile eingefügt und die Spalten ab B bis N und Q bis R verbunden werden.
Die Spalten O und P sollen nicht verbunden werden.
Die exportierte Liste variiert von 1-200 Zeilen ca.
Vielen Dank für die Unterstützung.
Tom

Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Code Zeilen verbinden
13.02.2016 21:52:25
Daniel
Hi
kannst du mal eine Datei hochladen, diese Datei sollte zwei Tabellenblätter enthalten.
auf dem ersten zeigst du, wie die Daten nach dem Import vorliegen
auf dem zweiten zeigst du, wie die Daten aufbereitet werden sollen (von Hand erstellt, ein paar Zeilen reichen)
denn so ganz eindeutig ist deine Beschreibung noch nicht.
Gruß Daniel

Anzeige
AW: VBA Code Zeilen verbinden
13.02.2016 22:34:45
Tom
Hi Daniel,
ok hab die Tabellenblätter hochgeladen. Das Sheet "export" zeigt wie ich es exportiert bekomme. Das andere Sheet wie ich es dann letztendlich aufbereiten möchte.
https://www.herber.de/bbs/user/103530.xlsx
Gruß Tom

Anzeige
AW: VBA Code Zeilen verbinden
14.02.2016 00:12:14
Daniel
hi
da wurde aber viel mehr gemacht als du beschrieben hast.
Gruß Daniel

AW: VBA Code Zeilen verbinden
14.02.2016 01:11:00
Tom
Ja schon, das andere bekomme ich über aufzeichnen hin, denke ich....

AW: VBA Code Zeilen verbinden
14.02.2016 02:22:01
Daniel
Hi
ok dann mal der Code, der mit deiner Exportdatei das macht, was du in deiner Eingangsfrage beschrieben hat, nämlich folgendes:
1. nach jeder Zeile eine Leerzeile einfügen
2. in jeder Spalte die Textzelle mit der darunter liegenden Leerzelle verbinden, ausser in Spalte A, O und P
Sub Test()
Dim Zeile As Long
Dim Spalte As Long
'--- Leerzeilen einfügen:
With Sheets("Export")
.Range(.Cells(2, 1), .Cells(2, 1).End(xlDown)).Copy
.Cells(2, 1).End(xlDown).Offset(1, 0).PasteSpecial xlPasteAll
.Range(.Cells(1, 1), .Cells(2, 1).End(xlDown)).EntireRow.Sort _
key1:=.Cells(1, 1), order1:=xlAscending, Header:=xlYes
End With
'--- Verbinden
With Sheets("Export")
For Zeile = 2 To .Cells(2, 1).End(xlDown).Row Step 2
For Spalte = 1 To .Cells(1, 2).End(xlToRight).Column
Select Case Spalte
Case 1, 15 To 16
Case Else
.Cells(Zeile, Spalte).Resize(2, 1).MergeCells = True
End Select
Next
Next
End With
End Sub
Gruß Daniel

Anzeige
AW: VBA Code Zeilen verbinden
14.02.2016 10:19:03
Tom
Hi Daniel,
ja das sieht schon mal sehr gut aus. Die Spalte A soll auch noch verbuden werden!?
Und ich würde gerne jede zweite Zeile einfärben, damit es übersichtlicher wird.
Gruß Tom

AW: VBA Code Zeilen verbinden
15.02.2016 10:12:42
Daniel
Hi
die Spalten, welche nicht verbunden werden sollen, sind in Select Case beim ersten Case-Fall definiert.
wenn also die Spalte 1 auch verbunden werden soll, dann einfach die "1," aus dieser Auflistung löschen.
wenn du jede zweite Zeile färben willst, dann meinst du wahrscheinlich jede 4. Zeile, weil in deiner Liste ja immer zwei Excelzeilen eine Logische Zeile bilden.
du müssest am Ende noch folgenden Code hinzufügen:

For Zeile = 2 To .Cells(2, 1).End(xlDown).Row Step 4
.Cells(Zeile, 1).Resize(2, .Usedrange.columns.count).Interior.Color  = RGB(200, 200, 200)
Next

gruß Daniel

Anzeige
AW: VBA Code Zeilen verbinden
15.02.2016 15:01:28
Tom
Hey,
"einfach die "1," aus dieser Auflistung löschen" habe ich auch versucht, aber durch ein einfügen von zusätzlichen Zeilen liest der Code erst einmal die Anzahl der Zeilen, kopiert diese (inkl. dem Inhalt) und schiebt die zusätzlichen Zeilen unter die bereits vorhandenen. Dadurch ist der Wert ist der Spalte A doppelt und Excel meldet einen Fehler.
Danke
gruß tom

Anzeige
AW: VBA Code Zeilen verbinden
15.02.2016 17:57:47
Daniel
Hi
bist du sicher dass es ein Fehler ist und nicht nur ein Warnhinweis von Excel, weil es jetzt den Inhalte der zweiten Zelle löschen wird?
Den Warnhinweis bzw die Rückfrage ob die Aktion auch wirklich ausgeführt werden soll könnte man vermutlich durch ein vorangestelltes Application.DisplayAlerts = False (vor der Schleife) verhindern, dann stellt Excel diese Rückfragen nicht mehr.
nach der Schleife aktiviert man die Systemrückfragen wieder mit Application.DisplayAlerts = True
die bessere Lösung wäre ja gewesen, dass man diese Zählnummer zum einsortieren der Leerzeilen zusätzlich einfügt und hinterher wieder löscht, aber da die Zählnummer ja schon vorhanden war und du die Spalte A explizit nicht verbinden wolltest, habe ich mir diesen Aufwand gespart und die vorhandene Zählnummer in A verwendet.
Gruß Daniel

Anzeige
AW: VBA Code Zeilen verbinden
16.02.2016 16:36:10
Tom
Hallo,
ok alles soweit zum laufen bekommen. Jetzt soll das Ganze noch mit Rahmen formatiert werden.
Kannst Du mir dabei noch helfen?
Das Ganze sieht bei mir dann so aus:
Sub Test()
Dim Zeile As Long
Dim Spalte As Long
'--- Leerzeilen einfügen:
With Sheets("KSW_ESW Übersicht")
.Range(.Cells(2, 1), .Cells(2, 1).End(xlDown)).Copy
.Cells(2, 1).End(xlDown).Offset(1, 0).PasteSpecial xlPasteAll
.Range(.Cells(1, 1), .Cells(2, 1).End(xlDown)).EntireRow.Sort _
key1:=.Cells(1, 1), order1:=xlAscending, Header:=xlYes
End With
'--- Zeilen färben
With Sheets("KSW_ESW Übersicht")
For Zeile = 2 To .Cells(2, 1).End(xlDown).Row Step 4
.Cells(Zeile, 1).Resize(2, .UsedRange.Columns.Count).Interior.Color = RGB(200, 200, 200)
Next
End With
'--- Zellen verbinden
With Sheets("KSW_ESW Übersicht")
For Zeile = 2 To .Cells(2, 1).End(xlDown).Row Step 2
For Spalte = 1 To .Cells(1, 2).End(xlToRight).Column
Select Case Spalte
Case 29 To 30
Case Else
Application.DisplayAlerts = False
.Cells(Zeile, Spalte).Resize(2, 1).MergeCells = True
Application.DisplayAlerts = True
End Select
Next
Next
End With
End Sub

Gruß Tom

Anzeige
AW: VBA Code Zeilen verbinden
16.02.2016 22:32:58
Daniel
Hi
ich gehe schon davon aus, dass ich dir dabei helfen kann.
Gruß Daniel

AW: VBA Code Zeilen verbinden
17.02.2016 09:13:31
Tom
Moin,
hab das mal so gelöst. Aber eigentlich sollten die Rahmen immer nur bis zum Ende der Liste gezogen werden.
Application.ScreenUpdating = False
For Each Zelle In Range("B8:O500")
With Zelle
.BorderAround Weight:=xlThin
End With
Next
Application.ScreenUpdating = True

gruß tom

Anzeige
AW: VBA Code Zeilen verbinden
17.02.2016 16:33:36
Daniel
Hi
such mal im Archiv nach "letze Zeile" oder im WWW nach "Excel letzte Zeile", da solltest du genügend finden.
Gruß Daniel

AW: VBA Code Zeilen verbinden
22.02.2016 11:54:26
Tom
Hi Daniel,
danke für den Tipp und Deine Unterstützung.
Ich habe es so einigermaßen nach meinen Vorstellungen hinbekommen. Es soll halt nicht die "UsedRange" mit einem Rahmen formiert werden, sondern nur die Zelle die beschrieben ist.
Ich bin noch auf der Suche nach dem Code für das automatische Anpassen der Zeilenhöhe bei verbundenen Zellen. Gibt es einen funktionierenden Code dafür überhaupt? Die einen schreiben es geht die anderen nein geht nicht. Hier im Forum habe ich auch nichts gefunden.
Gruß Tom

Sub Rahmen() '---- Rahmen ziehen
Dim Rahmen As Range
' Bereich festlegen
Set Rahmen = ActiveSheet.UsedRange ' Hier soll der Range dynamisch ermittelt _
werden
With Rahmen
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeLeft).LineStyle = xlContinuous         ' Links
.Borders(xlEdgeTop).LineStyle = xlContinuous          ' Oben
.Borders(xlEdgeBottom).LineStyle = xlContinuous       ' Unten
.Borders(xlEdgeRight).LineStyle = xlContinuous        ' Rechts
.Borders(xlInsideVertical).LineStyle = xlContinuous   ' Innen senkrecht
.Borders(xlInsideHorizontal).LineStyle = xlContinuous ' Innen waagerecht
End With
Set Rahmen = Nothing
End Sub 

Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA Code zum Verbinden von Zellen in Excel


Schritt-für-Schritt-Anleitung

Um Zellen in Excel mit VBA zu verbinden, kannst du den folgenden Code verwenden. Dieser Code fügt eine leere Zeile nach jeder bestehenden Zeile ein und verbindet die Zellen in den Spalten B bis N sowie Q und R. Die Spalten O und P bleiben unberührt. Hier ist eine schrittweise Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeinDokument)", wähle "Einfügen" und dann "Modul".
  3. Kopiere den folgenden Code in das Modul:
Sub Test()
    Dim Zeile As Long
    Dim Spalte As Long
    '--- Leerzeilen einfügen:
    With Sheets("Export")
        .Range(.Cells(2, 1), .Cells(2, 1).End(xlDown)).Copy
        .Cells(2, 1).End(xlDown).Offset(1, 0).PasteSpecial xlPasteAll
        .Range(.Cells(1, 1), .Cells(2, 1).End(xlDown)).EntireRow.Sort _
        key1:=.Cells(1, 1), order1:=xlAscending, Header:=xlYes
    End With
    '--- Verbinden
    With Sheets("Export")
        For Zeile = 2 To .Cells(2, 1).End(xlDown).Row Step 2
            For Spalte = 1 To .Cells(1, 2).End(xlToRight).Column
                Select Case Spalte
                    Case 1, 15 To 16
                    Case Else
                        .Cells(Zeile, Spalte).Resize(2, 1).MergeCells = True
                End Select
            Next
        Next
    End With
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Führe das Makro aus: Drücke ALT + F8, wähle Test und klicke auf "Ausführen".

Häufige Fehler und Lösungen

  • Fehlermeldung bei verbundenen Zellen: Wenn du versuchst, die Zelle in Spalte A zu verbinden, könnte es zu Konflikten kommen, wenn zusätzliche Zeilen eingefügt werden. Stelle sicher, dass die Zellen in Spalte A nicht doppelt belegt sind.

  • Excel Warnhinweis: Wenn du eine Warnmeldung erhältst, dass der Inhalt der Zelle überschrieben wird, kannst du dies mit Application.DisplayAlerts = False vor der Verbindung der Zellen umgehen. Vergiss nicht, es danach wieder auf True zu setzen.


Alternative Methoden

Eine einfache Möglichkeit, Zellen in Excel zu verbinden, ist das manuelle Zusammenführen. Du kannst die Zellen auswählen, die du verbinden möchtest, und dann auf "Start" > "Verbinden und zentrieren" klicken. Diese Methode ist jedoch nicht für große Tabellen oder wiederholte Aufgaben geeignet.


Praktische Beispiele

Hier ein Beispiel, wie du die Zellen verbinden und die Zeilen einfärben kannst:

Sub FormatAndMerge()
    Dim Zeile As Long
    Dim Spalte As Long
    '--- Zellen einfärben
    With Sheets("KSW_ESW Übersicht")
        For Zeile = 2 To .Cells(2, 1).End(xlDown).Row Step 4
            .Cells(Zeile, 1).Resize(2, .UsedRange.Columns.Count).Interior.Color = RGB(200, 200, 200)
        Next
    End With
    '--- Zellen verbinden
    With Sheets("KSW_ESW Übersicht")
        For Zeile = 2 To .Cells(2, 1).End(xlDown).Row Step 2
            For Spalte = 1 To .Cells(1, 2).End(xlToRight).Column
                Select Case Spalte
                    Case 29 To 30
                    Case Else
                        Application.DisplayAlerts = False
                        .Cells(Zeile, Spalte).Resize(2, 1).MergeCells = True
                        Application.DisplayAlerts = True
                End Select
            Next
        Next
    End With
End Sub

Tipps für Profis

  • Automatische Zeilenhöhe anpassen: Es gibt keinen direkten VBA-Befehl, um die Zeilenhöhe automatisch anzupassen, wenn Zellen verbunden sind. Du kannst jedoch die Höhe manuell anpassen, indem du die RowHeight-Eigenschaft verwendest.
  • Verwende UsedRange: Um nur den relevanten Bereich zu formatieren, anstatt die gesamte Tabelle, kannst du UsedRange verwenden, um die Anzahl der verwendeten Zeilen und Spalten dynamisch zu ermitteln.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass alle Zellen korrekt verbunden sind?
Stelle sicher, dass du die richtigen Zellbereiche in deinem Code angibst und dass keine Leerzellen dazwischen sind.

2. Gibt es eine Möglichkeit, die Formatierung rückgängig zu machen?
Ja, du kannst die Formatierung über den Befehl Unmerge rückgängig machen, um die verbundenen Zellen wieder zu trennen.

3. Wie kann ich den VBA Code anpassen, um mehr Spalten zu verbinden?
Du kannst die Select Case-Anweisung anpassen, um weitere Spalten hinzuzufügen, die verbunden werden sollen.

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