Microsoft Office Forum [ www.Office-Fragen.de ] >> READONLY <<
Microsoft Office 2003-2019 => Excel => Thema gestartet von: pi_a am Mai 16, 2017, 15:49:43 Nachmittag
-
Hallo :)
ich möchte einen ziemlich großen Datensatz mit 40 Tsd Zeilen vereinfachen. Und zwar möchte ich Duplikate in meinen Daten anhand der ersten ID-Spalte identifizieren und dann diese Zeilen in eine Zeile zusammenfassen.
Eigentlich muss auch nur aufsummiert werden (Zahlen) was in den Spalten N-GO steht und daraus sollte dann eine Zeile entstehen.
Ich habe bereits einen Code gefunden der so etwas leisten kann, aber da ich Anfängerin bin komme ich nicht so ganz mit der Struktur klar, ich hoffe jemand kann mir helfen!
Sub test()
Dim i As Long 'Zeilenzähler
Dim x As Integer 'Zähler um Arr() zu erweitern
Dim flag As Boolean
Dim arr As Variant
Dim arrIndex As Integer
With Sheets("Data_Sum")
arr = Application.Transpose(Range(Financial_id.Cells(1, 1), .Cells(2, 13)))
x = 2
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
flag = False
For arrIndex = LBound(arr, 2) To UBound(arr, 2)
If .Cells(i, 1) = arr(1, arrIndex) Then
If InStr(1, arr(13, arrIndex), .Cells(i, 13)) = 0 Then _
arr(13, arrIndex) = arr(4, arrIndex) & "-" & .Cells(i, 13)
'dann Prüfschleife(Arr) verlassen
flag = True
Exit For
Else
flag = False
End If
Next
If Not flag Then
x = x + 1
ReDim Preserve arr(1 To 13, 1 To x)
arr(1, x) = .Cells(i, 1)
arr(2, x) = .Cells(i, 2)
arr(3, x) = .Cells(i, 3)
arr(4, x) = .Cells(i, 4)
arr(5, x) = .Cells(i, 5)
arr(6, x) = .Cells(i, 6)
arr(7, x) = .Cells(i, 7)
arr(8, x) = .Cells(i, 8)
arr(9, x) = .Cells(i, 9)
arr(10, x) = .Cells(i, 10)
arr(11, x) = .Cells(i, 11)
arr(12, x) = .Cells(i, 12)
arr(13, x) = .Cells(i, 13)
End If
Next
End With
End Sub
Liebe Grüße
pi_a
-
Hallo pi_a
Warum nicht Pivot-Tabelle?
-
Hallo DL,
habe ich versucht, aber das sah bei mir nicht sehr übersichtlich aus. Ich habe ja auch knapp 200 Spalten, das sah so aus als ob ich die dann alle ankreuzen muss?
Ich kenne mich damit auch nicht besonders aus.
LG
-
Dann vielleicht ein Workaround.
Mit SUMMEWENN() in jeder Zeile die Summe ermitteln. Die Formelergebnisse dann als Werte kopieren.
Dann die Spalte mit den Einzelwerten löschen.
Und dann "Duplikate entfernen".
-
In jeder Zeile?
Ich habe allerdings 40.000 :o das wäre dann doch zu aufwendig
Kann man aus dem Code nicht etwas basteln ?
Ich weiß leider auch gar nicht ob irgendwo noch Angaben fehlen im Code ...
LG und danke !
-
In jeder Zeile?
Ich habe allerdings 40.000 :o das wäre dann doch zu aufwendig
Ich kopiere eine Formel in 40000 Zeilen mit einen Doppelklick.
Beim Code müssen dir andere helfen.
-
Ich schaue es mir auf jeden Fall nochmal genauer an, danke dir !
Noch finde ich nämlich keine andere Lösung ...
Falls jd Ideen zum Code hat, würde ich mich freuen!
-
Moin,
nun, ich sage es mal so:Der Code entspricht nicht meinem Programmierstil und ist mir ohne Muster-Datei einfach zu intransparent.
Deinen Anmerkungen nach könnte das aber mit Power Query -> http://www.excel-ist-sexy.de/power-query-das-add-in/ (http://www.excel-ist-sexy.de/power-query-das-add-in/) zu lösen sein; aber auch hier gilt: Eine Musterdatei mit vielleicht 10-20 Zeilen und einem von Hand eingetragenen Wunschergebnis könnten mich animieren, eine Lösung zu suchen, sofern du Power Query einsetzen kannst/darfst.
-
Guten Morgen!
Danke für die Antwort!
Also mich würde so ein Code schon sehr interessieren, muss mich mal, wenn ich Zeit habe in den Aufbau etc einlesen, weil damit bekommt man bestimmt schnell, schöne Lösungen hin :)
Ich hänge hier mal eine Beispiel an wie die Datei gerade aussieht und wie sie danach aussehen sollte (Spalten N bis GO von zwei gleichen IDs sollten in eine Zeile zusammengefasst bzw. alles zusammengefasst sein, da manchmal in allen Spalten etwas steht. Danach die Duplikate gelöscht werden. )
Power Query habe ich leider noch nie benutzt.
LG
pi_a
-
Moin,
die einfachste Lösung könnte vielleicht die Funktion TEILERGEBNIS() sein, hat aber Einschränkungen. Schau einfach einmal selber.
Mit Power Query ist es wahrscheinlich möglich; ich habe die ersten 7 Daten-Spalten einmal in der Lösung dargestellt. "Wahrscheinlich", weil ich nicht sicher bin, ob 185 Spalten toleriert werden.
Mit dem Code darfst du dich alleine beschäftigen (oder ein anderer Helfer, der mehr Zeit und Lust und natürlich VBA-Kenntnisse hat). Mir feken die ersten beiden Punkte. ???