Mehrere Werte in einer Zelle (mit Zeilenumbruch) untereinander ausgeben
#11
Moin

Mit Power Query sind es nur ein paar Schritte.
Code:
let
    Source = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(Source, {{"Spalte1", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Spalte1"),
    #"Split Column by Delimiter1" = Table.SplitColumn(#"Split Column by Delimiter", "Spalte1", Splitter.SplitTextByDelimiter(":", QuoteStyle.Csv), {"Spalte1.1", "Spalte1.2"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter1",{{"Spalte1.1", type text}, {"Spalte1.2", Int64.Type}})
in
    #"Changed Type1"
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

[-] Folgende(r) 1 Nutzer sagt Danke an shift-del für diesen Beitrag:
  • YungKafa
Top
#12
In VBA nur 1:


Code:
Sub M_snb()
   sn = Split(Join(Application.Transpose(Cells(4, 1).CurrentRegion), vbLf), vbLf)
   ReDim sp(UBound(sn), 1)
   
   For j = 0 To UBound(sn)
      st = Split(sn(j), ":")
      sp(j, 0) = st(0)
      sp(j, 1) = st(1)
   Next
   
   Cells(30, 1).Resize(UBound(sp) + 1, 2) = sp
End Sub

Oder:

Code:
Sub M_snb()
   sn = Split(Join(Application.Transpose(Cells(4, 1).CurrentRegion), vbLf), vbLf)
   Cells(30, 1).Resize(UBound(sn) + 1) = Application.Transpose(sn)
   Cells(30, 1).CurrentRegion.TextToColumns , , , , 0, 0, 0, 0, -1, ":"
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • YungKafa
Top
#13
Hallo YungKafa,

hier mein VBA-Vorschlag mit eingebautem Schritt 2:
Sub TransponierenSpezial_V2()
 Dim rngB As Range
 Dim varQ As Variant, varZ As Variant
 Dim varTs As Variant, varTz As Variant
 Dim i As Long, j As Long
 
 Set rngB = Worksheets("Tabelle1").Range("A4") 'Zelle mit dem ersten Datensatz
 
 varQ = Range(rngB, rngB.End(xlDown)).Resize(, 2).Value
 ReDim varZ(1 To 2, 0 To 0)
 For i = 1 To UBound(varQ)
   varTz = Split(varQ(i, 1), Chr(10))
   ReDim Preserve varZ(1 To 2, 1 To UBound(varZ, 2) + UBound(varTz) + 1)
   For j = 0 To UBound(varTz)
     varTs = Split(varTz(j), ":")
     varZ(1, UBound(varZ, 2) - UBound(varTz) + j) = varTs(0)
     If UBound(varTs) = 0 Then
       varZ(2, UBound(varZ, 2) - UBound(varTz) + j) = varQ(i, 2)
     Else
       varZ(2, UBound(varZ, 2) - UBound(varTz) + j) = varTs(1)
     End If
   Next j
 Next i
 rngB.Resize(UBound(varZ, 2), UBound(varZ, 1)).Value = Application.Transpose(varZ)
End Sub
Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • YungKafa
Top
#14
Hallo Günter,

(26.02.2019, 10:24)WillWissen schrieb: Moin,

deiner Beispieltabelle nach kommt Text in Spalten infrage. Wieso lädtst du nicht eine Beispieltabelle wie ich es in #2 geschrieben habe, hoch???
Wenn du von "sehr vielen Daten bearbeiten" schreibst, dürfte das Beispiel nicht unbedingt hilfreich sein.

es wäre für alle Beteiligten viel entspannter, Du würdest Dich einfach zurückhalten , wenn Du es nicht blickst. Wink

Gruß Uwe
Top
#15
(26.02.2019, 14:01)snb schrieb: In VBA nur 1...
Hallo, geschrieben hast du definitiv mehr...
Gruß Jörg
stolzes Mitglied im ----Excel-Verein
Freund einer excellenten Power Query-Abfrage
Top
#16
(26.02.2019, 14:05)Kuwer schrieb: Hallo YungKafa,

hier mein VBA-Vorschlag mit eingebautem Schritt 2:
Sub TransponierenSpezial_V2()
 Dim rngB As Range
 Dim varQ As Variant, varZ As Variant
 Dim varTs As Variant, varTz As Variant
 Dim i As Long, j As Long
 
 Set rngB = Worksheets("Tabelle1").Range("A4") 'Zelle mit dem ersten Datensatz
 
 varQ = Range(rngB, rngB.End(xlDown)).Resize(, 2).Value
 ReDim varZ(1 To 2, 0 To 0)
 For i = 1 To UBound(varQ)
   varTz = Split(varQ(i, 1), Chr(10))
   ReDim Preserve varZ(1 To 2, 1 To UBound(varZ, 2) + UBound(varTz) + 1)
   For j = 0 To UBound(varTz)
     varTs = Split(varTz(j), ":")
     varZ(1, UBound(varZ, 2) - UBound(varTz) + j) = varTs(0)
     If UBound(varTs) = 0 Then
       varZ(2, UBound(varZ, 2) - UBound(varTz) + j) = varQ(i, 2)
     Else
       varZ(2, UBound(varZ, 2) - UBound(varTz) + j) = varTs(1)
     End If
   Next j
 Next i
 rngB.Resize(UBound(varZ, 2), UBound(varZ, 1)).Value = Application.Transpose(varZ)
End Sub
Gruß Uwe

Wahnsinn! Danke für Eure großartige Unterstützung. Ich habe jetzt alle Vorschläge getestet und alle führen zu dem gewünschten Ergebnis. Ich werde es jetzt mit meinen Originaldaten versuchen!
Top
#17
Dann hat sich deine PN wohl erledigt.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Top
#18
Ich brauche doch nochmal Eure Hilfe.

Die von euch vorgeschlagenen Codes erfüllen definitiv meine Anforderung aus dem ersten Post.

Jedoch enthält meine Tabelle noch weitere Informationen, die - in der Ausgangssituation - nur einmal vorkommen. Wenn die Datensätze aus der Ausgangssituation jetzt getrennt werden, möchte ich, dass diese übrigen Informationen kopiert werden, sodass jeder neue Datensatz, diese Informationen ebenfalls enthält.

Beispielv2 ist im Anhang.

An die VBA Profis: Es wäre nett von Euch, wenn ihr in Euren Codes Kommentare an den Stellen einfügen könntet (hier schon mal danke an Uwe), die ich später anpassen muss, um Euren Code an meine Originaldatei anzupassen. Ich bin leider kompletter Laie und verstehe die Codes nicht.

Danke!


Angehängte Dateien
.xlsx   Beispielv2.xlsx (Größe: 8,33 KB / Downloads: 6)
Top
#19
Hallo... Detlef's (shift-del) Idee passt auch hier... keine Anpassung nötig...
Gruß Jörg
stolzes Mitglied im ----Excel-Verein
Freund einer excellenten Power Query-Abfrage
Top
#20
Hallo YungKafa

Keine Ahnung warum du mir immer PNs schreibt. Dies ist ein öffentliches Forum.

Daten markieren.
STRG-A und OK.
Daten abrufen aus Tabelle.
Ansicht -> Erweiterter Editor.
Den bisherigen Code löschen und meinen Code einfügen.
Code:
let
    Source = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(Source, {{"Spalte1", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Spalte1"),
    #"Split Column by Delimiter1" = Table.SplitColumn(#"Split Column by Delimiter", "Spalte1", Splitter.SplitTextByDelimiter(":", QuoteStyle.Csv), {"Spalte1.1", "Spalte1.2"}),
    #"Changed Type2" = Table.TransformColumnTypes(#"Split Column by Delimiter1",{{"Spalte1.1", type text}, {"Spalte1.2", Int64.Type}, {"Spalte2", type text}, {"Spalte3", type text}, {"Spalte4", type text}})
in
    #"Changed Type2"
Schließen und laden in Tabelle/Bestehendes Arbeitsblatt/$H$10.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

[-] Folgende(r) 1 Nutzer sagt Danke an shift-del für diesen Beitrag:
  • YungKafa
Top


Gehe zu:


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