Text aus einer Spalte in eine Zelle durch Trennzeichen kopieren
#1
Hallo zusammen,

ich bin absoluter Anfänger auf dem Bereich VBA-Programmierung, benötigte aber kurz Hilfe von jemanden, da ich voll auf dem Schlauch stehe.


Ich möchte den Inhalt von S4:S5000 als Text, getrennt durch ", " in die Zelle R2 kopieren.

Leere Zeilen sollen ignoriert werden.

Wie müsste der VBA Code hierfür lauten?

Vielen lieben Dank im Vorfeld!

Viele Grüße
Lars
Top
#2
Schau Dir Split und Join an.
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
[-] Folgende(r) 1 Nutzer sagt Danke an LCohen für diesen Beitrag:
  • Lars1904
Top
#3
Vielen Dank für deine Antwort!

Leider komme ich damit auch noch nicht so recht weiter. Kannst du mir einen Start-Tipp für den Code geben?

Danke!
Top
#4
Hallo,

was steht denn in den Zellen von 4-5000?
Du solltest dir im Klaren darüber sein, dass die Anzahl der Zeichen in einer Zelle beschränkt ist.
Bei mir ist bei 31794 Zeichen in der Zelle Schluß.

Gruß Werner
[-] Folgende(r) 1 Nutzer sagt Danke an Werner.M für diesen Beitrag:
  • Lars1904
Top
#5
Hallo Lars,

Du wirst Schwierigkeiten bekommen, den Text von gut 5000 Zeilen in eine Zelle zu bekommen. Ansonsten könnte das so funktionieren - Spalten und Zellen musst Du noch anpassen:
Code:
Option Explicit

Sub test()
'Variablendeklarationen
Dim lLastRow%, arrDaten
'Entfernen der Leerzeilen mittels sortieren
'Und Daten in einer Zelle zusammenfassen
'Mit dem Blatt Tabelle2
With Sheets("Tabelle2")
    'In B4 und B5 Startwerte fuer Reihenfolge eintragen
    .Range("B4") = 1
    .Range("B5") = 2
    'Autoausfuellen fuer Reihenfolge der Eintraege
    .Range("B4:B5").AutoFill Destination:=.Range("B4:B10")
    'eventuelle alte Sortiereinstellung entfernen
    .Sort.SortFields.Clear
    'Sortierung definieren - nach Spalte A
    .Sort.SortFields.Add2 Key:=.Range( _
        "A4:A10"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    'Mit der Sortierung A anfangen
    With .Sort
        'Bereich und Einstellungen festlegen
        .SetRange Sheets("Tabelle2").Range("A4:B10")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        'Ausfuehren
        .Apply
    'Ende Mit der Sortierung A anfangen
    End With
    'letzte belegte zeile in Spalte A ermitteln
    lLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    'eventuelle alte Sortiereinstellung entfernen
    .Sort.SortFields.Clear
    'Sortierung definieren - nach Spalte B
    .Sort.SortFields.Add2 Key:=.Range( _
        "B4:B" & lLastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    'Mit der Sortierung B anfangen
    With .Sort
        'Bereich und Einstellungen festlegen
        .SetRange Sheets("Tabelle2").Range("A4:B" & lLastRow)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        'Ausfuehren
        .Apply
    'Ende Mit der Sortierung B anfangen
    End With
'Mit dem Blatt Tabelle2
End With
'Daten in Array aufnehmen
arrDaten = WorksheetFunction.Transpose(Range("A4:A" & lLastRow).Value)
'Array zu einer Zeichenkette zusammenfassen
arrDaten = Join(arrDaten, ",")
'Zeichenkette in A1 eintragen
Range("A1") = arrDaten
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Lars1904
Top
#6
Von den 5000 Zeilen sind in der Regel höchstens 50 befüllt (jeweils Zahlen mit 5 Stellen), von daher sollte der Platz kein Problem sein.

Danke!

@schauan

Vielen Dank für den Code! Sorry, ich bin echt absoluter Anfänger. Tut mir leid für die blöde Nachfrage, aber welche Spalten und Zellen muss ich genau anpassen?

Und vielleicht für mich zum Verständnis: Wofür sind die Sortierungs-Befehle in dem Code?


Tausend Dank!
Top
#7
Hallo,

den Blattnamen mußt du anpassen.
Code:
Public Sub aaa()
Dim i As Long, strWert As String

With Worksheets("Tabelle3")
    For i = 4 To 5000
        If .Cells(i, "S") <> "" Then
            If strWert = vbNullString Then
                strWert = .Cells(i, "S")
            Else
                strWert = strWert & "," & .Cells(i, "S")
            End If
        End If
    Next i
    If Not strWert = vbNullString Then
        .Range("R2") = strWert
    End If
End With
End Sub
[-] Folgende(r) 1 Nutzer sagt Danke an Werner.M für diesen Beitrag:
  • Lars1904
Top
#8
Überragend!!!!! Es klappt! Danke!!!!

Ich habe allerdings noch eine Rückfrage:

ich habe den Code leicht angepasst:

Public Sub aaa()
Dim i As Long, strWert As String
With Worksheets("WEPA")
    For i = 5 To 5000
        If .Cells(i, "Q") <> "" Then
            If strWert = vbNullString Then
                strWert = .Cells(i, "Q")
            Else
                strWert = strWert & ", " & .Cells(i, "Q")
            End If
        End If
    Next i
    If Not strWert = vbNullString Then
        .Range("G3") = strWert
    End If
   
    For i = 5 To 5000
        If .Cells(i, "T") <> "" Then
            If strWert = vbNullString Then
                strWert = .Cells(i, "T")
            Else
                strWert = strWert & ", " & .Cells(i, "T")
            End If
        End If
    Next i
    If Not strWert = vbNullString Then
        .Range("G12") = strWert
    End If
   
End With
End Sub




Wieso werden in G12 nun die Inhalte aus Spalte Q und T angegeben?!

Was muss ich ändern, dass in G3 nur Inhalte aus Spalte Q und in G12 nur Inhalte aus Spalte T stehen?

Vielen lieben Dank!!!!!!
Top
#9
Hallo,

weil du die Variable strWert bei deiner zweiten For Schleife einfach weiter benutzt. Die wird aber in der ersten Schleife ja schon gefüllt. Sprich die Werte aus der ersten For Schleife bleiben drin und die Werte aus der zweiten For Schleife kommen noch dazu.

Du mußt vor der zweiten For Schleife die Variable leeren.
Code:
strWert = ""

Gruß Werner
[-] Folgende(r) 1 Nutzer sagt Danke an Werner.M für diesen Beitrag:
  • Lars1904
Top
#10
Hallöchen,

das mit dem Sortieren ist dafür gedacht, die Leerzeilen schnell auszugrenzen. Beim alphabetischen Sortieren stehen die Leerzellen dann je nach Sortierreihenfolge unterhalb der gefüllten Zellen.
Damit am Ende alles wieder in der ursprünglichen Reihenfolge steht, trage ich neben den Daten eine Zahlenreihe ein.

Anschließend sortiere ich nur den "gefüllten" Bereich anhand der Zahlenreihe und übernehme die Daten in ein Array. Das geht deutlich schneller, als jede Zelle einzeln zu prüfen und zu übernehmen.
Mit Join mach ich aus dem Array dann eine Zeichenkette und die trage ich in die Zelle A1 ein.

Deine Anfängeraufgabe Smile wäre nun, die Zelladressen anzupassen. Mein Datenbereich ist z.B. A4 bis A10, Deiner S4 bis S5000. Also tust Du A4 zu S4 machen und aus A10 S5000. Steht nur A ohne Zahl, dann musst Du nur S draus machen. Gleiches Spiel mit B. Das wird dann zu T und die 10 zur 5000

Im Code müsste man nun nur noch eine dritte Sortierung machen, diesmal über alle Zellen der Spalte B oder dann T, damit die Leerzellen wieder an ihren Platz kommen.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Lars1904
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste