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.

Schneller SVERWEIS bzw. INDEX / VERGLEICH
#21
(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
WIN 10 64-Bit Pro / EXCEL Microsoft Office 365 ProPlus 64-Bit
Antworten Top
#22
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".
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Antworten Top
#23
Bitte nicht zitieren /quoten !
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#24
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
WIN 10 64-Bit Pro / EXCEL Microsoft Office 365 ProPlus 64-Bit
Antworten Top
#25
Verwende F8 zum Erfahren was jede Zeile macht.

Verwende im VBEditor view / Locals Window: dort kann man sehen welche Werte die Variablen haben.
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:
  • friedensbringer
Antworten Top
#26
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
WIN 10 64-Bit Pro / EXCEL Microsoft Office 365 ProPlus 64-Bit
Antworten Top


Gehe zu:


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