Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Excel umbasteln, VBA?
#11
Hi,

deine neue Liste ist auch nicht viel besser als deine alte. Du denkst immer noch zu sehr in Papier und Bleistift.

Lass die Routine von snb  über deine ursprüngliche Tabelle laufen. Das sieht dann zwar für den Menschen nicht besonders übersichtlich aus, aber für Maschinen gut zum Auswerten geeignet.

Code:
ArtikelNr KundenNr Datum    Preis
12345     6789     01.01.23 1,23
12345     6789     03.01.23 1,25
12345     1234     01.10.22 11,55
11111     1245     31.08.20 0,99

Je nach Bedarf sollte die Liste ev. z.B. nach Datum sortiert sein.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
[-] Folgende(r) 1 Nutzer sagt Danke an HKindler für diesen Beitrag:
  • BenBrix77
Antworten Top
#12
Ich habe es dann so gelöst. Musste nur vorher die Zeilen nach den ersten 3 Spalten sortieren da der Code nur zusammenhängende Zeilen erkennt. 

Zitat:VBA
Zitat:Sub CombineRows()
    Dim i As Long
    Dim j As Long
    Dim lastRow As Long
   
    'Determine the last row of data
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
   
    'Loop through rows starting from the bottom
    For i = lastRow To 2 Step -1
        'Compare the values in the first three columns
        If Cells(i, 1).Value = Cells(i - 1, 1).Value And _
          Cells(i, 2).Value = Cells(i - 1, 2).Value And _
          Cells(i, 3).Value = Cells(i - 1, 3).Value Then
            'If the values are identical, combine the rows
            For j = 4 To 52
                'Combine non-empty cells in columns D through AY
                If Cells(i, j).Value <> "" Then
                    Cells(i - 1, j).Value = Cells(i - 1, j).Value & " " & Cells(i, j).Value
                End If
            Next j
            'Delete the duplicate row
            Rows(i).Delete
        End If
    Next i
End Sub

Grüße
Antworten Top
#13
Wenn du meinen Vorschlag benützt hätte, wäre ein Pivottable die Lösung gewesen.
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:
  • BenBrix77
Antworten Top
#14
Hallo auch von mir,

ich würde das natürlich mit Powerquery lösen. Das ist quasi gemacht dafür, Datenhaltung aus Kreuztabellen zu normalisieren:
Code:
let
    Quelle = Excel.CurrentWorkbook(){[Name="tbKundenUmsätze"]}[Content],
    #"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Artikelnummer", Int64.Type}, {"Kundennummer", Int64.Type}, {"Menge Januar 2022", Int64.Type}, {"Preis Januar 2022", type number}, {"Menge Februar 2022", Int64.Type}, {"Preis Februar 2022", type number}}),
    #"Entpivotierte Spalten" = Table.UnpivotOtherColumns(#"Geänderter Typ", {"Artikelnummer", "Kundennummer"}, "Attribut", "Wert"),
    #"Spalte nach Trennzeichen teilen" = Table.SplitColumn(#"Entpivotierte Spalten", "Attribut", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, false), {"Attribut.1", "Attribut.2"}),
    #"Geänderter Typ1" = Table.TransformColumnTypes(#"Spalte nach Trennzeichen teilen",{{"Attribut.1", type text}, {"Attribut.2", type date}})
in
    #"Geänderter Typ1"


VIele Grüße
derHöpp
[-] Folgende(r) 1 Nutzer sagt Danke an derHoepp für diesen Beitrag:
  • BenBrix77
Antworten Top


Gehe zu:


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