Clever-Excel-Forum

Normale Version: Schneller SVERWEIS bzw. INDEX / VERGLEICH
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
(20.07.2017, 20:52)Ego schrieb: [ -> ]Hallo Olli,

wie schon geschrieben würde ich snb's Version nutzen. Seine letzte Version (nicht ADO) benötigt auf meinem Rechner < 17 Sekunden, hat aber den enormen Vorteil, dass die einzelnen Listen nicht sortiert sein müssen.

Achtung! Im Augenblick können sich die Ergebnisse unsere beiden Programme unterscheiden ( aber nicht mit deinen Beispieldaten).

A) Mein Programm durchläuft die Kundenliste und fügt im Ergebnis die passenden Daten der anderen drei Listen hinzu (ähnlich der Formellösung).
Hierbei werden Einträge aus den Einzellisten, die keine entsprechenden Eintrag in der Kundenliste haben ignoriert.

B) snb's Programme fügen passenden Einträge aus den drei Einzellisten zusammen.
Falls in der Kundenliste Kundennummern vorhanden sind, die in den Einzellisten nicht vorkommen, werden sie im Ergebnis nicht ausgewiesen.

!!!Man kann aber beide Programme ohne bemerkbare Erhöhung der Rechenzeit so anpassen, dass sie das gleiche von dir gewünschte Ergebnis liefern.

C) Man könnte die Programme auch so modifizieren dass sowohl alle Einträge aus der Kundenliste als auch alle Einträge aus den Einzellisten berücksichtigt werden.

Hallo Helmut,

vielen Dank für die Info.
Ich denke da wäre die Variante c am sinnvollsten. Denn die Kundenliste umfasst immer alle Kunden.
In den anderen Listen sind mitunter nur Einträge vorhanden für Kunden bei denen es zB auch einen Umsatz oder einen Besuch gab, ansonsten fehlt der Eintrag in diesen Listen.

C) Man könnte die Programme auch so modifizieren dass sowohl alle Einträge aus der Kundenliste als auch alle Einträge aus den Einzellisten berücksichtigt werden.

Kannst du mir eventuell noch weiterhelfen inwieweit man den Code dann modifizieren müsste?

Und generell würde mich einfach interessieren wie dieses Makro eigentlich genau funktioniert, einfach damit ich zukünftig hoffentlich auch selber in der Lage bin das bei kleinen Modifikationen auf die Reihe zu bringen.
Es ist ja eh sehr kurz was die Zeilen angeht. Ich muss nur dazusagen, dass ich leider von Arrays etc. derzeit noch keine Ahnung habe und einfach gerne die Funktionsweise dahinter verstehen würde.
Ich wäre also um ein paar Kommentare im Code sehr dankbar, damit ich weiß wo der Abgleich passiert, wo die Reihenfolge der Spalten definiert wird etc.
Code:
Sub M_snb()

'Hier wird ein Timer gestartet damit man die Ausführungszeit messen kann
  t1 = Timer

'Hier wird .... gemacht 
 Dim sp(3 * 10 ^ 5, 10)
 
'Hier wird das scripting.dictionary eingebunden   
  With CreateObject("scripting.dictionary")

'Hier wird die Anzahl der Blätter definiert, in diesem Fall "Umsatz" / "Artikel" / "Besuche" 
    For j = 1 To 3

'Hier wird .... gemacht
     sn = Sheets(Choose(j, "Umsatz", "Artikel", "Besuche")).Cells(1).CurrentRegion

'Hier wird .... gemacht
     For jj = 2 To UBound(sn)

'Hier wird .... gemacht
       If Not .exists(sn(jj, 1)) Then .Item(sn(jj, 1)) = .Count

'Hier wird .... gemacht        
       y = .Item(sn(jj, 1))

'Hier wird .... gemacht
       For jjj = 1 To 5

'Hier wird .... gemacht
         sp(y, Choose(jjj, 0, 1, 1 + j, 4 + j, 7 + j)) = sn(jj, jjj)

       Next
     Next
   Next

'Hier wird .... gemacht    
   Sheet9.Cells(1).Resize(.Count, 10) = sp

 End With

'Hier wird der Wert aus dem Timer in einer Messagebox ausgegeben
  MsgBox Timer - t1

End Sub


Vielen Dank und ein schönes Wochenende

Olli
Hallo Olli,

zu:
Zitat:Ich denke da wäre die Variante c am sinnvollsten. Denn die Kundenliste umfasst immer alle Kunden.

Wenn die Kundenliste immer alle Kunden umfasst reicht auch Variante A die Variante C würde dann keine zusätzlichen Kunden liefern.
Snb's Programme sollten aber leicht angepasst werden, ich will aber (noch) nicht in seine Programme "rumfuschen".
Bitte nicht zitieren /quoten !
Hallo,

meinst du mit zitieren / Quoten hier im Forum oder im Code?

Einen letzten Versuch / bzw. eine Bitte starte ich nochmals:

Kann mir jemand erklären wir das Makro von snb hier aufgebaut ist?

Also was ich beispielsweise tun müsste um weitere Spalten abzugleichen, wo die Reihenfolge der Spalten definiert wird etc.?

Vielen Dank und lg

Olli
Verwende F8 zum Erfahren was jede Zeile macht.

Verwende im VBEditor view / Locals Window: dort kann man sehen welche Werte die Variablen haben.
Hallo snb,

super - vielen Dank. Man lernt doch immer wieder was dazu. Werde ich gleich entsprechend ausprobieren.
Das mit F8 wusste ich, aber das hier war mir neu:

Zitat:Verwende im VBEditor view / Locals Window: dort kann man sehen welche Werte die Variablen haben.


Vielen Dank nochmals für diese extrem performante Variante von dir!

Lg

Olli
Seiten: 1 2 3