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

Forumthread: Verbinden von Zelleninhalten durch Schleife

Verbinden von Zelleninhalten durch Schleife
11.06.2018 10:13:04
Zelleninhalten
Hallo,
ich habe folgendes Problem mit dem ich mich schon länger beschäftige. Ich möchte mithilfe eines Makros eine beliebige Anzahl an Spalteninhalten miteinander verbinden. Hierbei sollen die jeweils nebeneinander liegenden Zellen in einer Zeile miteinander verbunden werden und in einer Zielspalte ausgegeben werden.
Die verbundenen Zelleninhalte sollen durch ein Komma getrennt werden.
Es soll immer Spalte A mit Spalte C - Spalte XYZ(Anzahl an Spalten wird über Abfrage eingelesen)verbunden werden.
Die gesuchte Schleife soll also konkret folgendes können:
Verkette A1 mit C1,d1,e1,f1 usw (Hierbei ist A1 immer ein Teil der Verknüpfung; C1 - XYZ1 wird über eine Abfrage des Verwenders eingelesen.)
Bisher konnte habe ich folgenden code gebaut:
'Zusammenfügen der Werte
Dim Rng As Range
Dim OutStr As String
Dim WorkRng As Range
Dim p As Long
For p = 1 To l
'l entspricht der Anzahl der vorhandenen Zeilen. Dieser Wert wird durch eine Abfrage eingelesen
Set WorkRng = Range(Chr(67) & p, Chr(67 + i) & p)
'i entspricht Anzahl Spalten c-xyz
For Each Rng In WorkRng
If Rng.Text "" Then
OutStr = OutStr & Rng.Text & ","
End If
Next
'Letzes Komma Löschen
OutStr = Left(OutStr, Len(OutStr) - 1)
'Ausgabe
Range(Chr(67 + i) & p).Value = OutStr
Next i
Jedoch funktioniert er nur für die erste Zeile und er berücksichtigt leider nicht die Spalte A.
Könntet Ihr mir helfen den Code so anzupassen, dass er die gewünschte Funktion erfüllt?
Schonmal vielen Dank für eure Hilfe,
Thomas
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verbinden von Zelleninhalten durch Schleife
11.06.2018 10:40:12
Zelleninhalten
Hallo Thomas,
1. Die Anforderung ist nicht klar. z.B. gibt es in XL keine Spalte XYZ! Die grösste wäre XFD (Index 16'384)
2. Es ist nicht klar wie I bestimmt wird (Variablentyp, Prüfung etc.)
3. Der Code ist völlig ineffizient. (Eine For-Next- mit einer integrierten For-Each- Schlaufe produziert einen exorbitanten unnötigen Overhead).
4. Die Referenzierung von Range mittels Buchstaben (CHR()) ist schwer lesbar und ineffizient. Besser wäre die Cells(row, column) Notation.
...und zu guter Letzt: Ein Beispielmappe Quelldatenstruktur und erwarteten Zielvorstellungen und ggf. schon vorhandenem lauffähigen VBA-Code wäre wesentlich hilfreicher, als deine textlichen Beschreibungen.
Gruess Hansueli
Anzeige
AW: Verbinden von Zelleninhalten durch Schleife
11.06.2018 11:52:37
Zelleninhalten
Vielen Dank für die Antwort.
Ich habe jetzt ein Beispiel hochgeladen um das Problem zu verdeutlichen. Hierbei ist die Zielspalte grün makiert.
https://www.herber.de/bbs/user/122043.xlsx
In dem Beispiel werden die Zellen A1 mit C1, D1, E1, F1 verkettet und mit einem Komma getrennt. Ausgegeben wird die Verkettung in G1. Anschließend wird die Verkettung für Zeile 2 wiederholt.
Das Makro dass ich suche, soll genau diese Vekettung für alle vorhandenen Zeilen durchführen. Hierbei soll jedoch durch eine Abfrage ermittelt werden wie viele Spalten miteinander verkettet werden sollen. Die veränderbare Spaltenanzahl soll ab der Spalte C beginnen.
Wird eine 1 eingegeben, wird die Zelle A1 und C1 miteinander verkettet und durch ein Komma getrennt. Der verkettete Wert wird in D1 ausgegeben. Die Verkettung wird für alle vorhandenen Zeilen wiederholt.
Wird eine 2 eingegeben, wird die Zelle A1 und C1, D1 miteinander verkettet und durch ein Komma getrennt. Der verkettete Wert wird in E1 ausgegeben. Die Verkettung wird für alle vorhandenen Zeilen wiederholt.
Wird eine 3 eingegeben, wird die Zelle A1 und C1, D1, E1 miteinander verkettet und durch ein Komma getrennt. Der verkettete Wert wird in F1 ausgegeben. Die Verkettung wird für alle vorhandenen Zeilen wiederholt.
Wird eine 4 eingegeben, wird die Zelle A1 und C1, D1, E1, F1 miteinander verkettet und durch ein Komma getrennt. Der verkettete Wert wird in G1 ausgegeben. Die Verkettung wird für alle vorhandenen Zeilen wiederholt. (Entspricht dem Beispiel)
usw.
Ich hoffe durch diese Erklärung wird mein Problem deutlicher. Den vorher geposteten Code kannst du komplett vergessen. Es würde mich sehr freuen wenn du eine Idee hättest für ein Programm, dass dieses Problem lösen könnte. Und sorry dass die ursprüngliche Frage so undeutlich war.
Danke für deine Hilfe.
Thomas
Anzeige
AW: Verbinden von Zelleninhalten durch Schleife
11.06.2018 10:43:13
Zelleninhalten
Hi
naja, da die Spalte A nicht in die Schleife passt, musst du den Wert eben dann direkt zu OutStr hinzufügen.
btw, spreche die Zellen mit Cells an, dann kannst du auch die Spalte als Zahl angeben.
Willst du mit Spaltenbuchstaben arbeiten, dann bekommst du Probleme wenns über Z hinaus geht, dann müsste nämlich "AA" folgen.
for P = 1 to l
OutStr = Cells(p, 1).Value
set WorkRng = Range(Cells(p, 3), Cells(p, 3 + i))
for each rng in WorkRng
if rng.Text  "" Then OutStr = OutStr & "," & Rng.Text
next
Cells(p, 3 + i).Value = OutStr
next
Gruß Daniel
Anzeige
AW: Verbinden von Zelleninhalten durch Schleife
11.06.2018 12:05:07
Zelleninhalten
Danke Daniel,
habe gerade deinen Post gelesen. Genau danach habe ich gesucht.
Perfekt.
AW: Verbinden von Zelleninhalten durch Schleife
11.06.2018 13:12:48
Zelleninhalten
Hallo Daniel,
eine zwei Fragen zu deinem code hätte ich doch noch:
1. Neben Spalte A passt auch Spalte C nicht in die Schleife. Wie kann ich den Wert von Spalte A mit Spalte C verbinden, durch ein Komma trennen und anschließend deine Schleife ab Spalte D durchlaufen lassen.
Ich habe es mit folgender Veränderung versucht, die leider nicht funktioniert

Dim p As Long
Dim outstr As String
Dim workrng As Range
Dim rng As Range
Dim lengh As Long
For p = 1 To lengh
outstr = Cells(p, 3).Value & "," & Cells(p, 1).Value
Set workrng = Range(Cells(p, 4), Cells(p, 3 + AnzahlKomma))
For Each rng In workrng
If rng.Text  "" Then outstr = outstr & "," & rng.Text
Next
Cells(p, 4 + AnzahlKomma).Value = outstr
Next

2. In Spalte C befinden sich formatierte Zahlen. Es sind auf oder absteigende Zahlen mit folgendem Format:
0000001
0000002
0000003
oder
1000000
9999999
9999998
Mein Frage ist, wie kann ich die Formatierung bei dem Zusammenfügen behalten?
Danke für deine Hilfe.
Thomas
Anzeige
AW: Verbinden von Zelleninhalten durch Schleife
11.06.2018 13:21:08
Zelleninhalten
Die erste Frage hat sich erledigt. Der Code Funktioniert doch.
Dim p As Long
Dim outstr As String
Dim workrng As Range
Dim rng As Range
dim lengh as long
dim anzahlspalten as integer
For p = 1 To lenght
outstr = Cells(p, 3).Value & "," & Cells(p, 1).Value
Set workrng = Range(Cells(p, 4), Cells(p, 4 + AnzahlSpalten))
For Each rng In workrng
If rng.Text  "" Then outstr = outstr & "," & rng.Text
Next
Cells(p, 4 + AnzahlKomma).Value = outstr
Next
End Sub
Jetz habe ich nur noch das Problem mit der fehlenden Formatierung. Wäre toll wenn du dafür eine Idee hättest.
Thomas
Anzeige
AW: Verbinden von Zelleninhalten durch Schleife
11.06.2018 13:27:39
Zelleninhalten
Hi
zu frage 1)
verstehe ich nicht. Beschreibe genauer, was du mit "funktioniert nicht" meinst.
gibt's ne Fehlermeldung, wenn ja welche und in welcher Zeile?
wenn nein, wie weicht das Ergebnis von deinem Wunschergebnis ab?
zu frage 2)
mit Cells(p, 3).Text statt Cells(p, 3).Value
mit .Text bekommst du den Formatierten Zellwert so wie er in der Zelle angezeigt wird.
mit .Value bekomms du den unformatierten Zellwert, wie er tatsächlich in der Zelle steht.
die alternative zu .Text wäre, dass du mit Format(Cells(p, 3).Value, "000000") den Zahlenwert im Code selbst auf das gewünschte Format bringst.
Gruß Daniel
Anzeige
AW: Verbinden von Zelleninhalten durch Schleife
11.06.2018 13:44:48
Zelleninhalten
Danke für die schnelle Antwort.
Die erste Frage hatte sich schon erledigt, da der code doch wie gepostet funktioniert hat.
Jetzt funktioniert alles.
Ohne deine Tipps wäre es wohl nichts geworden.:)
lg,
Thomas
AW: Verbinden von Zelleninhalten durch Schleife
11.06.2018 12:43:53
Zelleninhalten
Moin Thomas,
es geht übrigens komplett ohne VBA.
Mit weniger als 10 Mausklicks erreichst du das mit Power Query, -> http://www.excel-ist-sexy.de/power-query-das-add-in/.
Gruß
Günther
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zelleninhalte mit VBA oder Power Query verbinden


Schritt-für-Schritt-Anleitung

Um Zelleninhalte in Excel mithilfe von VBA zu verbinden, kannst du den folgenden Code verwenden. Dieser ermöglicht es, Inhalte von verschiedenen Spalten zusammenzuführen und durch Kommas zu trennen.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu (Einfügen > Modul).
  3. Kopiere den folgenden Code in das Modul:
Sub ZellenVerbinden()
    Dim p As Long
    Dim outStr As String
    Dim workRng As Range
    Dim rng As Range
    Dim anzahlSpalten As Integer
    Dim length As Long

    ' Anzahl der Zeilen und Spalten festlegen
    length = Cells(Rows.Count, 1).End(xlUp).Row
    anzahlSpalten = InputBox("Wie viele Spalten sollen verbunden werden?")

    For p = 1 To length
        outStr = Cells(p, 1).Value ' Spalte A
        Set workRng = Range(Cells(p, 3), Cells(p, 3 + anzahlSpalten - 1)) ' Ab Spalte C

        For Each rng In workRng
            If rng.Text <> "" Then
                outStr = outStr & "," & rng.Text ' Inhalte verbinden
            End If
        Next
        Cells(p, 3 + anzahlSpalten).Value = outStr ' Ausgabe in Zielspalte
    Next
End Sub
  1. Schließe den VBA-Editor und führe das Makro aus (Entwicklertools > Makros > ZellenVerbinden).

Der Code verbindet die Inhalte von Spalte A und den angegebenen Spalten durch Kommas.


Häufige Fehler und Lösungen

  • Der Code funktioniert nur für die erste Zeile.

    • Achte darauf, dass die Variable length korrekt die Anzahl der Zeilen bestimmt.
  • Die Ausgabe ist nicht wie gewünscht.

    • Überprüfe, ob die Eingabe für anzahlSpalten korrekt ist. Der Code erwartet eine Zahl.
  • Fehlende Formatierung bei Zahlen.

    • Verwende Cells(p, 3).Text anstelle von Cells(p, 3).Value, um das formatierte Ergebnis zu erhalten.

Alternative Methoden

Falls du kein VBA verwenden möchtest, kannst du auch Power Query nutzen, um Zelleninhalte zu verbinden. So funktioniert es:

  1. Wähle die Daten in Excel aus.
  2. Gehe zu Daten > Abrufen und Transformieren.
  3. Klicke auf Aus Tabelle/Bereich.
  4. Im Power Query Editor:
    • Wähle die Spalten aus, die du verbinden möchtest.
    • Klicke auf Transformieren > Spalte zusammenführen.
    • Wähle das Trennzeichen (z.B. Komma) aus.
  5. Klicke auf Schließen & Laden, um die verbundenen Inhalte zurück nach Excel zu übertragen.

Praktische Beispiele

  • Beispiel 1: Verbinde die Zellen A1 mit C1, D1 und E1.
  • Beispiel 2: Verwende das Makro, um die Inhalte für alle Zeilen in einem Arbeitsblatt zu verbinden.

Hierbei kannst du die Inhalte von mehreren Spalten zusammenführen, z.B. durch die Eingabe von 2, um A1 mit C1 und D1 zu verbinden.


Tipps für Profis

  • Nutze Cells(row, column) anstelle von Range, um die Lesbarkeit des Codes zu verbessern.
  • Überlege, ob du die Anzahl der zu verbindenden Spalten dynamisch gestalten möchtest, um Flexibilität zu gewährleisten.
  • Teste den Code immer mit einer Kopie deiner Daten, um unerwünschte Veränderungen zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich die Ausgabe in einer bestimmten Spalte anpassen?
Du kannst die Zielspalte in der Zeile Cells(p, 3 + anzahlSpalten).Value = outStr ändern, um die Ausgabe in eine andere Spalte zu verschieben.

2. Kann ich auch ohne VBA Zellen verbinden?
Ja, du kannst Power Query verwenden, um die Zelleninhalte zusammenzuführen, ohne VBA zu benötigen.

3. Was tun, wenn die Zellen leere Werte enthalten?
Der Code ignoriert leere Zellen automatisch. Möchtest du jedoch spezielle Handhabung, kannst du die If-Bedingung anpassen.

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