Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1476to1480
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zeilen in einem File zusammenfassen

Zeilen in einem File zusammenfassen
27.02.2016 16:56:43
Christoph
Ich muss eine Datei bearbeiten in der auf der Zelle A1 die Kundennummer steht und in den Zellen B1 bis L1 die Feldnamen (Code1 bis Code11). Die Datei hat ca. 20000 Einträge. Vereinzelt kommen die Kundennummern mehrfach vor (bis zu 25x).
Ziel der Arbeit ist, dass jede Kundennummer nur noch auf einer Zeile vorkommt und die Einträge in einer Zeile zusammengefasst werden. Ist das ohne VBA Programmierung möglich?

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: eine Beispieldatei wäre hilfreich ...
27.02.2016 17:53:52
...
Hallo Christoph,
... diese muss nur max 50 Datensätze haben. Aber aus ihr sollte der ISTZUSTAND eindeutig ersichtlich sein. Zeige dazu in einer 2 Tabelle dieser Datei mit zwei/drei Datensätzen "händisch" auf, wie Dein Zielergebnis aussehen soll.Dann sehen wir weiter.
Gruß Werner
.. , - ...

So etwas kann doch idR schon die DB-Abfrage ...
27.02.2016 20:12:20
Luc:-?
…liefern, Christoph,
denn dafür stehen ja in vielen SQL-Dialekten Befehle zV.
Gruß, Luc :-?
Besser informiert mit …

AW: mit nur 2 Matrixfunktion(alität)sformeln ...
29.02.2016 14:09:26
...
Hallo auf Christoph,
... auf Basis der AGGREGAT()-Funktion.
Eine davon (in A2) noch relativ davon einfach, die zweite (in 2) schon komplexer. Zusätzlich einer einfache SVERWEIS()- Formel (in B2)
Formel A2 nach unten B2 und G2 zusätzlich nach rechts. Formel B2 natürlich nur bis F2 aber G2 weit genug über Spalte M hinaus:
Ergebnis

 ABCDEFGHIJKLM
1FALLNR1KSTWiederEinGebDatum1OPDatum1Kategorie1OPCODE01OPCODE02OPCODE03OPCODE04OPCODE05OPCODE06OPCODE07
211201080021.02.198112.06.2015Stationär88.74.1049.2148.23    
321201081002.01.192428.10.2015Stationär81.52.10      
431201083013.05.196414.12.2015Stationär34.5134.21.1034.59.20    
541201083021.02.198912.05.2015Stationär34.21.1034.6X.2132.234.09.10   
651302081019.01.200708.05.2015Stationär86.22.1979.37.40     
761201081022.10.195501.07.2015Stationär78.13.1079.32.10     
871302081001.09.201314.01.2015Stationär58.45      
981207080026.10.193121.01.2015Stationär22.221.2222.2X.1122.41.1122.5122.52 
1091204080020.01.200402.02.2015Stationär81.47.1581.47.15     
11101204080005.03.198016.01.2015Stationär77.51      
12111204080020.09.194907.04.2015Stationär81.51      
13121204080030.05.197616.01.2015Stationär77.68      
14131208080006.03.199621.01.2015Stationär76.66.1076.62.10     
15141204080001.06.194213.01.2015Stationär03.09.3403.09.4477.49.2103.09.3403.09.9100.99.2003.09.35
16151204080031.05.193301.12.2015Stationär81.51      

Formeln der Tabelle
ZelleFormel
A2=WENNFEHLER(AGGREGAT(15;6;Original!A$2:A$99/(ZÄHLENWENN(A$1:A1;Original!A$2:A$99)=0)/(Original!A$2:A$99>0); 1); "")
B2=WENN(A2="";"";SVERWEIS($A2;Original!$A:$F;SPALTE(B1); ))
G2=WENNFEHLER(INDEX(Original!$A:$M;KÜRZEN(AGGREGAT(15;6;(ZEILE(Original!$A$2:$A$99)*100+SPALTE(Original!$G$2:$M$99))/(Original!$A$2:$A$99=$A2)/(Original!$G$2:$M$99<>""); SPALTE(A$1))/100;); REST(AGGREGAT(15;6;(ZEILE(Original!$A$2:$A$99)*100+SPALTE(Original!$G$2:$M$99))/(Original!$A$2:$A$99=$A2)/(Original!$G$2:$M$99<>""); SPALTE(A$1)); 100)); "")


Original

 ABCDEFGHIJKLM
1FALLNR1KSTWiederEinGebDatum1OPDatum1Kategorie1OPCODE01OPCODE02OPCODE03OPCODE04OPCODE05OPCODE06OPCODE07
211201080021.02.198112.06.2015Stationär88.74.1049.2148.23    
321201081002.01.192428.10.2015Stationär81.52.10      
431201083013.05.196414.12.2015Stationär34.5134.21.1034.59.20    
541201083021.02.198912.05.2015Stationär34.21.1034.6X.2132.234.09.10   
651302081019.01.200708.05.2015Stationär86.22.1979.37.40     
761201081022.10.195501.07.2015Stationär78.13.10      
861201081022.10.195507.07.2015Stationär79.32.10      
971302081001.09.201314.01.2015Stationär58.45      
1081207080026.10.193121.01.2015Stationär22.221.2222.2X.1122.41.1122.5122.52 
1191204080020.01.200402.02.2015Stationär81.47.1581.47.15     
12101204080005.03.198016.01.2015Stationär77.51      
13111204080020.09.194907.04.2015Stationär81.51      
14121204080030.05.197616.01.2015Stationär77.68      
15131208080006.03.199621.01.2015Stationär76.66.1076.62.10     
16141204080001.06.194213.01.2015Stationär03.09.3403.09.4477.49.2103.09.3403.09.9100.99.20 
17141204080001.06.194207.01.2015Stationär03.09.3580.51.1103.09.3481.0878.49.888.39.1000.99.20


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß Werner
.. , - ...

Anzeige
AW: mit nur 2 Matrixfunktion(alität)sformeln ...
01.03.2016 09:37:21
Christoph
Hallo Werner
Vielen Dank für Deine Unterstützung.
Die Kombination Deiner Formeln führen zum gewünschten Ergebnis.
Alllerdings geht meine Rechner bei der Bearbeitung von ca. 20'000 Datensätzen
mit diesen Formeln komplett in die Knie.
Gibt es nicht doch noch eine etwas weniger rechenintensive Möglichkeit?
Danke Christoph

AW: wie sehn denn angepasste Formeln aus? ...
01.03.2016 13:54:04
...
Hallo Christoph,
... hast den Bereich auf den max notwendigen schon angepasst?
Ist die ganze Aktion eher eine einmalige Angelegenheit oder ist sie ständig notwendig?
Gruß Werner
.. , - ...

AW: wie sehn denn angepasste Formeln aus? ...
02.03.2016 06:06:49
Christoph
Hallo Werner
Den Breich habe ich auf das Maximum angepasst.
Ich muss diese Daten nicht täglich bearbeiten aber immer wieder.
Ich habe mir gestern im Forum noch einmal ähnliche Fragen (und Antworten) angesehen.
Vermutlich wäre doch ein Makro die richtige Lösung?
Danke Christoph

Anzeige
AW: "Maximum" kann verschieden sein ...
02.03.2016 09:31:36
...
Hallo Christoph,
... wenn Du in Der Formel anstelle der 99 die 20000 (aber nicht den gesamten Spaltenbereich) eingesetzt hast und das Ergebnis kann damit nicht performant genug ermittelt werden, dann bleibt als Formellösung nur noch eine Hilfsspaltenlösung oder eben gleich eine (gute!) VBA-Lösung. In diesem Fall bin ich allerdings außen vor.
Dann setze den thread offen und schreibe in den Betreff: "nun VBA-Lösung gesucht ..."
Gruß Werner
.. , - ...

Nun VBA Lösung gesucht
02.03.2016 10:40:33
Christoph
Kann mir einer der VBA Profis ggf. helfen das Problem zu lösen?
Danke Christoph

AW: thread offen ! owT
02.03.2016 10:48:09
...
Gruß Werner
.. , - ...

Anzeige
bitte zu testen
04.03.2016 04:52:49
Michael
Hi zusammen,
ich habe ein Blatt "Test" angelegt zum Vergleich mit dem Ergebnis...
Der Algorithmus ist nicht besonders fix, aber den kompletten Bereich als Array einlesen wollte ich nicht, und Arrays á 1000 Zeilen sind zwar meist nicht problematisch (dann kann man immer mal eines wegschreiben und neu laden), aber auf die Schnelle war mir das zu viel "Gfrett" mit dem sicheren Handling mehrmals vorkommender Zeilen über die Arraygrenzen hinweg.
Deshalb habe ich das mal hintenangestellt und eine "halbgute" Lösung entwickelt: die Idee ist, die Spalte A jeweils solange zu durchsuchen wie gleiche oder ungleiche Zeilen vorhanden sind und den Bereich dann wenigstens am Stück statt zeilenweise zu kopieren - mit Sonderbehandlung der "Gleichen", deren Werte ich in einen String verpacke und wieder aufdrösle.
Ein paar Testdaten mit teils mehrfachen [in A17] =wenn(zufallszahl() gingen bis Zeile 2251 bzw. Nr. 1352 - die Kopie im "Test" stimmt zumindest von der Nummerierung (bzw. der Anzahl der Zeilen), die einzelnen Werte scheinen auch zu passen: 6030 im Original, 6030 im "Test" (dort bis Spalte AX geprüft).
Dauer: rund 10 Sekunden auf alter 4-Core-CPU.
Die Datei mit den ursprünglichen Werten & Makro: https://www.herber.de/bbs/user/104084.xlsm
(das Makro gehört sich "gesäubert" von nicht benutzten Variablen und debugging-Zeug, aber jetzt nicht mehr, es ist spät)
Happy Exceling,
Michael

Anzeige
AW: mal sehen was Christoph feststellt ...
04.03.2016 08:18:20
...
Hallo Michael,
... ich werde/kann sie jedenfalls nicht testen. Erstens hab ich ich nicht die Originaldatenmenge und dann bin ich zur Zeit vorübergehend ganz auf "Abstinenz" bzgl. Makros gegangen. Was jedoch nichts mit Dir oder Makros an sich zu tun hat.
Gruß Werner
.. , - ...

AW: mal sehen was Christoph feststellt ...
04.03.2016 17:03:00
Michael
Hi Werner,
danke für (wenigstens) Deine Rückmeldung.
Ich habe noch mit "richtigen" Arrays herumgespielt, und das läuft auch, bis auf ein paar hakelige Feinheiten, aber ich habe keinen Bock mehr, mich weiter zu vertiefen, wenn Christoph sich nicht meldet.
Schöne Grüße,
Michael
P.S.: wie heißt Dein Verein? Anonyme Algorithmiker oder die Blauen Subs?
Laß Dich nicht ärgern, ich gehe jetzt Skat spielen und Süffeln, das paßt zum Wetter.

Anzeige
AW: mal sehen was Christoph feststellt ...
04.03.2016 17:46:54
Christoph
Hallo Michael und Werner
Entschuldigt, dass ich mich erst jetzt melde. Ich war heute den ganzen Tag auf einen Kongress und hatte echt keine Zeit.
Ich werde erst am Montag wieder im Büro sein und habe auch nur dort die Originaldaten. Ich mache das Montag gerade als erstes und werde euch Feedback geben, ob es klappt.
Vielen Dank für eure Unterstützung und ein schönes WE
Christoph

AW: dazu noch folgender Hinweis ...
04.03.2016 19:20:13
...
Hallo Christoph,
... Morgen schon dürfte dieser thread deaktiviert im Archiv gelandet sein. Du und jeder kann ihn zwar noch lesen, aber man nicht mehr darauf antworten. Wenn Du also noch Fragen etc. hast, dann müsstest Du einen neuen thread aufmachen und in dessen Betreff z.B. schreiben: "Fortsetzungsthread ..."
Und im Text solltest Du den Link (https://www.herber.de/forum/archiv/1476to1480/t1478432.htm) auf diesen thread angeben.
Gruß Werner
.. , - ...

Anzeige
AW: hab noch keinen Verein gegründet ...
04.03.2016 19:15:55
...
Hallo Michael,
... bin nur einem anonym beigetreten ;-)
Skat spielen würde ich auch gern mal wieder. Wünsche gut Blatt gehabt zu haben. War es Bierlachs oder nach Altenburger Regeln?
Wie auch immer schönes WE.
Gruß Werner
.. , - ...

Optimiert
06.03.2016 17:45:53
Michael
Hallo zusammen,
der Thread ist geschlossen, dennoch nimmt er die Antwort vielleicht noch an...
Ich habe das Ding noch optimiert und die Bearbeitung auf 2 Sekunden gedrückt.
Das Makro:
Option Explicit
Sub GanzNeu()
Dim a As Variant, b As Variant, c As Variant
Dim i&, j&, k&, maxz&, z&
Dim letzter
Dim s$
Dim gefunden As Boolean
Dim shO As Worksheet, shT As Worksheet
Dim maxw&, w&
Dim t As Single
t = Timer
Set shO = Sheets("Original")
Set shT = Sheets("Test2")
shT.Cells.Clear
maxz = shO.Range("A" & shO.Rows.Count).End(xlUp).Row
shO.Range("A1").CurrentRegion.Copy shT.Range("A1")
Application.CutCopyMode = False
'shT.Range("A1").CurrentRegion.RemoveDuplicates _
'   Columns:=Array(1, 2, 3, 4), Header:=xlYes
shT.Range("A1").CurrentRegion.RemoveDuplicates _
Columns:=1, Header:=xlYes
a = shO.Range("A1:A" & maxz + 1)
b = shO.Range("G1:Q" & maxz + 1)
c = shO.Range("R1:R" & maxz + 1) ' muß eine leere Spalte sein, evtl. weiter rechts
s = ""
z = 3
gefunden = False
letzter = -1
maxw = 0
For i = 3 To maxz
If a(i, 1) = letzter Then
gefunden = True
If w = 0 Then
For k = 1 To 11
If b(i - 1, k)  "" Then
w = w + 1
Else
Exit For
End If
Next
End If
For k = 1 To 11
If b(i, k)  "" Then
s = s & "'" & b(i, k) & "!"
Else
Exit For
End If
Next
'   Stop
Else
If gefunden Then
'    Stop
c(z - 1, 1) = s
s = ""
a(z - 1, 1) = w
w = 0
End If
z = z + 1
gefunden = False
End If
letzter = a(i, 1)
a(i, 1) = 0
Next
'shT.Range("R1:R" & z) = c
'shT.Range("S1:S" & z) = a
'MsgBox ""
For k = 2 To z
If c(k, 1)  "" Then
b = Split(c(k, 1), "!")
If UBound(b) > 0 Then
shT.Cells(k, a(k, 1) + 7).Resize(1, UBound(b)) = b
End If
End If
Next
MsgBox (Timer - t) * 1000 & "ms"
End Sub
Unausgesprochene Voraussetzung: die Daten sind nach Spalte A sortiert.
Schöne Grüße,
Michael

Anzeige
AW: Optimiert
07.03.2016 08:45:18
Christoph
Hallo Michael
Super!!! Vielen Dank.
Auch mit meine aktuell 16'000 Datensätzen läuft das Makro super schnell.
Gruss Christoph

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige