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

VBA mehrereZeilen in eine Zelle kopieren

VBA mehrereZeilen in eine Zelle kopieren
04.03.2021 09:15:39
Laura
Hallo,
ich habe zwei Excel-Dateien. Davon möchte ich, den Text aus Spalte G wo überall eine 0010 (Spalte E) ist in eine andere Excel-Datei kopiert wird. Dabei sollen die Zellen G2,G3 und G4 in eine Zelle zusammengefügt werden. Dies soll dann für jede Nummer erfolgen.
Also so sieht die eine Excel_Datei ungefähr aus:
Spalte E Spalte G
0010 TextBeispiel1
0010 TextBeispiel2
0010 TextBeispiel3
0020 TextBeispiel4
0020 TextBeispiel5
0030 TextBeispiel6
0030 TextBeispiel7
0030 TextBeispiel8
0030 TextBeispiel9
... ...
Also ich möchte eine Abhängigkeit der Ziffern zur jeweiligen Zelle erreichen. Und dies soll dann in eine andere Excel-Datei gepackt werden ab Spalte D33. Die Zahlen in Spalte E sind jedoch unregelmäßig, das heißt es gibt z.b. mal 3x die 0010 und 2x die 0020 usw..
Ich wollte das mit folgendem VBA Code lösen:
set wb = Workbooks("Template1.xlsm")
set ws = wb.Sheets("Register1")
set ws2 = set wb = Workbooks("Template2.xls").Worksheets("Register2")
ws2.Activate
iRow = ws.Cells(Rows.Count,2).End(x1Up).Row
iRow2 = ws2.Cells(Rows.Count,4).End(x1Up).Row
for cell = 33 to iRow
For IntSch = 2 To iRow2
If ws.Cells(cell,2).Value = ws2.Cells(IntSch,5).Value Then
ws.Range(ws.Cells(cell,4), ws.Cells(cell,4)).Value = ws2.Range(ws2.Cells(IntSch,7), ws2.Cells(IntSch,7)).Value
Else
End If
Next IntSch
Next cell
end sub
Das klappt zwar ganz gut, jedoch werden nicht alle Zeilen genommen, sondern immer nur die Letzte Zeile (wie unten fett markiert). Ich will jedoch, das z.b. die drei Zeilen von 0010 in eine Zelle überführt werden, sprich zusammenführen der Zellen. Hat jemand eine Ahnung wie ich das machen könnte? Vielleicht muss man ein Array einbauen?
Spalte E Spalte G
0010 TextBeispiel1
0010 TextBeispiel2
0010 TextBeispiel3
0020 TextBeispiel4
0020 TextBeispiel5
0030 TextBeispiel6
0030 TextBeispiel7
0030 TextBeispiel8
0030 TextBeispiel9
... ...
Vielen Dank erstmal

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Ein Array verwenden
04.03.2021 20:26:03
Luc:-?
Das ist bei größeren Datenmengen immer zu empfehlen, Laura,
allerdings liegt dein Problem eher nicht daran. Ich sehe in deinem Pgm nämlich auf schnellen Blick nirgends, dass die gefundenen Zellen auch zusammengeführt wdn. D.h., du musst die entsprd Zellwerte auch miteinander verbinden (mit vbLf, wenn du mehrere Zeilen in einer Zelle per ZeilenUmbruch erhalten willst), nicht einfach immer durch den aktuellen überschreiben.
Das könntest du auch mit einer entsprd ZellFml, die eine UDF oder ggf die neue XlFkt TEXTVERKETTEN benutzt, auf dem Blatt der anderen Datei realisieren. Mit UDF-ZellFml ginge das so (singulare Matrixfml):
{=VJoin(WENN($E$2:$E$10=C12;$F$2:$F$10;"");ZEICHEN(10);-1)} → DateiPfad b.d.Adressen ergänzen!
Mit beiden unter diesem Link zu findenden UDFs kannst du auch die ID-Nrn, nach denen gesucht wird, zusammenstellen. Die Reihenfolgen richten sich dabei nach den ErstAuftritten auf dem Blatt der QuellDatei.
Du kannst die UDF-Pgmm aber auch als Bspp für eigene Lösungsmöglichkeiten nutzen oder in die eigene Lösung einbauen, indem du sie darin aufrufst (als Fkt!).
Gruß, Luc :-?
„Die universelle Befähigung zur Unfähigkeit macht jede menschliche Leistung zu einem unglaublichen Wunder.“ Stapps ironisches Paradoxon

Anzeige
AW: VBA mehrereZeilen in eine Zelle kopieren
04.03.2021 20:50:39
Daniel
HI
in dem Fall wäre das Dictionary der richtige Weg.
Ein Dicitionary ist im Prinzip ein eindimensionaels Array mit einem Freitext-Index.
dh es würde ein Array erstellt mit drei einträgen als Index ("0010", "0020", "0030") und als Wert könntest du zu jedem Index die Texte sammeln.
also als erstes Sammeln:
dim dic as Object
set dic = createobject("Scripting.Dictionary")
for IntSch = 2 to iRow2
dic(ws2.cells(Intsch, 4)) = dic(ws2.cells(Intsch, 4)) & "; " & ws2.cells(Intsch, 7)
next
und dann aus dem Dictionary in die andere Tabelle schreiben
for cell = 33 to iRow
ws.cells(cell, 4) = dic(ws.cells(cell, 2))
next
variablen, die du bereits verwendest, habe ich einfach übernommend, aber nicht zwingend deren Befüllung, dh das müsstest du in deinem Code noch ergänzen.
das schöne an der Methode ist, sie ist sehr schnell und es ist auch nicht erforderlich, dass deine Tabellen in irgendeiner Form sortiert sind.
Gruß Daniel
Anzeige

384 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige