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

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

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

313 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige