Frage von kikichog, 48

Excel Makro erstellen um Text aus Spalte in Zeile wiedergeben und mit " ; " trennen?

Hallo zusammen,

wahrscheinlich ist das super einfach. aber irgendwie klappt es nicht so wie ich es möchte.

ich habe in Spalte B ab Zeile 2 bis x Wörter stehen. Wie kann ich alle Wörter aus der Spalte B ab Zeile 2 in z.B. Zelle C2 hintereinander, mit " ; " getrennt auflisten?

Expertenantwort
von Iamiam, Community-Experte für Excel, 48

Hab hier mal als Trockenübung auf die Schnelle eine Function gebaut, komme jetzt nicht zum ausprobieren, versuchs einfach mal und schau, ob Du's ggf korrigieren kannst:

VerkettenMitZwischenzeichen(Target, Zwischenzeichen)

'Verkettet ausgewählte Zelle mit Zellinhalten in Spalte unterhalb  mit Zwischenzeichen, funktioniert vermutlich erst ab 3 Werten, keine Leerzellen dazwischen erlaubt

Dim c as xlrange, Fortschritt as string, Zwischenzeichen as string

Fortschritt = ""

For each c in Range(Target, Target.end(xldown).offset(-1, 0))

Fortschritt = Fortschritt & c.value & Zwischenzeichen

next

Fortschritt = Fortschritt & Target.end(xldown).value

Verketten = Fortschritt

end function

Kommentar von Iamiam ,

die erste Zeile muss natürlich heissen:

Function VerkettenMitZwischenzeichen(Target, Zwischenzeichen)

ob das Komma ggf durch ; ersetzt werden muss, musst Du ausprobieren.

Und siehe Kommentar subopt., (danke!)

Kommentar von Suboptimierer ,

Am Ende muss es wahrscheinlich VerkettenMitZwischenzeichen = Fortschritt heißen. Sonst fällt mir nichts auf dem ersten Blick auf.

Ich würde gleich den zu verketteten Bereich übergeben lassen und mit einer If-Abfrage leere Zellen auslassen.

"xlrange" kannte ich bislang nicht. Ich nutze immer "Range".

Kommentar von Iamiam ,

so, nachdem mir ein Termin abgesagt wurde, hab ich es nun doch prüfen können und sieheda (welche Überraschung): es waren doch noch einige Fehler drin! So funktioniert's aber:

Function VerkettenMitZwischenzeichen(Target, Zwischenzeichen)

Dim c As Range, Fortschritt As String: Fortschritt = ""

For Each c In Range(Target, Target.End(xlDown).Offset(-1, 0))

Fortschritt = Fortschritt & c.Value & Zwischenzeichen

Next

VerkettenMitZwischenzeichen = Fortschritt & Target.End(xlDown).Value

End Function

Unbeschadet dessen kann man es aber noch verändern in dem Sinne, wie Suboptimierer geschrieben hat (also Auswahl vorgeben und auf Leerzellen testen (da darf allerdings dann die letzte Markierte nicht leer sein, sonst wirds kompliziert wg des überzähligen Trennzeichens).

Aber zur automatischen Anpassung an zusätzliche Einträge hat auch die vorliegende Fassung ihren Sinn.

Mir fällt übrigens auf, dass End ▼und End nicht zur letzten gleichartigen, sondern zur nächsten gefüllten Zelle gehen. (sollte man wissen, wenn man so eine Fkt einsetzt)

Expertenantwort
von Suboptimierer, Community-Experte für Excel, 32

C2: =B2
C3: =C2 & " ; " & B3

C3 nach unten ziehen.

Kommentar von kikichog ,

das ist schon mal ein guter Ansatz. Danke

jetzt habe ich jedoch nur noch das Problem dass das auf Dauer zu umständlich ist da sich die länger der spalte verändern kann und ich möchte nur in Zelle C2 alle wörter aus Spalte B (ab Zeile 2) haben

Kommentar von Suboptimierer ,

Dann kumulier in Spalte D und zieh den letzten Eintrag aus D in C2:

D2: =B2
D3: =WENN(B3="";"";D2 & " ; " & B3)
C2: =INDIREKT("D"&VERGLEICH("";D2:D10000;0))
Kommentar von PWolff ,

Alternative: Rückwärts gehen

C2: ="WENN(B2="";C3&"";WENN(C3="";B2&"";B2&";"&C3))

und diese Formel über Spalte C nach unten ziehen

Kommentar von Suboptimierer ,

Uff, Prinzip habe ich verstanden, aber C3&"" kann man z. B. zu C3 verkürzen und wenn ich mich nicht täusche, fehlt hinten eine ) und die zweite WENN-Funktion hat einen Parameter zuviel. 

Ich probiere auch mal mein Glück...

Kommentar von Suboptimierer ,

Achso, die Irritation entstand durch das Trennzeichen " ; " ^^
Die ) steht bei mir in der nächsten Zeile ganz alleine.

Kommentar von PWolff ,

Nun, bei meiner Excel-Version steht ohne das

&""

eine 0 in der Zelle.

Kommentar von Suboptimierer ,
C2: =B2&WENN(C3<>"";" ; ";"")&C3
Kommentar von PWolff ,

Geht auch, erfordert aber, dass Spalte B lückenlos gefüllt ist, sonst haben wir hier leere Einträge zwischen Semikola.

C2: =B2&WENN(UND(B2<>"";C3<>"");";";"")&C3

Kommentar von Suboptimierer ,

Stimmt. Es muss die WENN-Funktion weggelassen werden und pauschal mit " ; " verbunden werden. Das wiederum hat den Nachteil, dass alle leeren Zellen hinter dem letzten Eintrag verknüpft werden.

Deine Formel ist da besser. Sie hat dieses Problem nicht.

Im Grunde muss man da nichts optimieren.

Kommentar von Britzcontrol ,

wie wäre es denn mit:

=B2&WENN(B3>"";";"&B3;"")&WENN(B4>"";";"&B4;"")&WENN(B5>"";";"&B5;"")

in Zelle C2

Gruß aus Berlin

Kommentar von Suboptimierer ,

Das verkettet bei mir im Test nur 4 Zellen. Ich bevorzuge entweder das Makro von IamIam oder, die Vorwärtsformel von mir, die mit indirekt die letzte Zeile ausliest

D2: =B2
D3: =WENN(B3="";"";D2 & " ; " & B3)
C2: =INDIREKT("D"&VERGLEICH("";D2:D10000;0))

oder die Rückwärtsformel von PWolff, bei der man sich das INDIREKT sparen kann:

C2: ="WENN(B2="";C3&"";WENN(C3="";B2&"";B2&";"&C3))

Wie dem auch sei. Es wurde von mehreren Seiten gezeigt, dass es viele Lösungsmöglichkeiten gibt.

Antwort
von Sensoru, 45

kommt ganz darauf an, du kannst dien Datei auch als CSV(Trennzeichen getrennt) separat speichern und in einem Editor(völlig egal welcher) öffnen, dann stehen alle Ergebnisse eine Zeile mit ; getrennt.

Kommt ganz auf deinen Verwendungszweck an :o 

Kommentar von kikichog ,

:D

ja das kenne ich auch

aber ich baue mir grade ein Makro irgendwie zusammen weil ich keine Antwort auf meine Problem sonst finden kann. 

Mein eigentliches Problem ist nämlich. in der spalte B ab Zeile 2 stehen mehrere Email adressen und an die möchte ich eine email schicken, weiß aber nicht wie ich das im Makro angebe muss. Irgendwie bekomme ich immer nur eine Email Adresse in den Empfänger der email rein und nicht alle, die dann auch noch mit " ; " getrennt sind. deswegen versuche ich es jetzt auf eine andere weise

Kommentar von Britzcontrol ,

wie wäre es denn mit:

=B2&WENN(B3>"";";"&B3;"")&WENN(B4>"";";"&B4;"")&WENN(B5>"";";"&B5;"")

in Zelle C2

Gruß aus Berlin

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten