Office: VBA Dictionary nach Jahren aufsteigend sortieren

Helfe beim Thema VBA Dictionary nach Jahren aufsteigend sortieren in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo liebe Excel-Profis, ich eröffne mal einen neuen Thread, da die jetzige Frage doch stärker von meiner Frage im alten Thread abweicht:... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Chas, 4. März 2018.

  1. VBA Dictionary nach Jahren aufsteigend sortieren


    Hallo liebe Excel-Profis,

    ich eröffne mal einen neuen Thread, da die jetzige Frage doch stärker von meiner Frage im alten Thread abweicht: http://www.ms-office-forum.net/forum....php?p=1858058

    Mit der Hilfe von Oge habe ich ein Dictionary, in welchem pro Jahr die Anzahl verschiedener vorkommender Begriffe gezählt werden. In einem weiteren Schritt habe ich zusammengefasst wie viele verschiedene Begriffe pro Jahr vorkommen.

    Die Ausgangslage sah so aus, dass in einer Spalte Datumsangaben und in 2 weiteren Spalten unterschiedliche Anzahlen von Gegenständen stehen.
    Beispiel
    A/B/C
    27.08.2003/Birne, Apfel, Melone/Gurke, Tomate
    ...

    Das Dictionary sieht dann wie folgt aus
    E/F/G
    2003/Birne/1
    2003/Apfel/1
    ...
    2001/Apfel/1
    ...
    2007/Zwiebel/2
    ...

    Und an dieser Stelle findet sich mein Problem. Ich finde keine Möglichkeit das Dictionary anhand der Jahre aufsteigend zu ordnen. Ich habe mehrere Beiträge im Internet gefunden, die sich mit dem Sortieren von Dictionarys beschäftigen, aber keiner führte zum Erfolg.
    Ich habe auch versucht den Ausgabearray zu sortieren, aber auch dies führte zu keinem passenden Ergebnis. Meistens wurden die Jahreszahlen sortiert, jedoch nicht die zugehörigen Einträge (also die Gegenstände und der Counter blieben vom Sortieren unberührt)

    Bei einer vom Code her für mein Verständnis relativ sinnvollen Lösung erhalte ich an der Stelle "Arr(i) = dict.Keys(i)" den Laufzeitfehler 451 "Let-Prozedur der Eigenschaft ist nicht definiert, und Get-Prozedur hat kein Objekt zurückgegeben".
    Hierbei habe ich versucht die Begriffe meines Dictionarys in ein Array einzuspielen, den ich dann mittels der Bubble Sort Methode sortieren wollte....

    Also zusammenfassend: Wie schaffe ich es das ganze aufsteigend nach den Jahren zu sortieren und für jeden einzelnen Wert auch die dazugehörigen Werte mitzunehmen?
    Und in einem nächsten Schritt: ist es möglich innerhalb der Jahre zusätzlich nach der Häufigkeit der Gegenstände zu sortieren?
    Beispiel:
    2000/Apfel/6
    2000/Birne/4
    2000/Melone/2
    ...
    2001/Birne/6
    2001/Apfel/3
    ...
    *confused.gif*

    Ich hoffe ihr könnt mir abermals helfen

    Ich hänge den Code und die zugehörige Datei an.
    Code:
    :)
     
  2. Wieso willst Du das Dictionary sortieren? Du könntest doch auch alles nach der Ausgabe sortieren.

    Ein anderere Ansatz wäre, ADODB in Memory zu verwenden, da kriegt man das Sortieren mit dazu.

    PS Und wozu das ganze, das könnte man IMHO mit Pivot-Tabellen erschlagen.
     
    Storax, 6. März 2018
    #2
  3. Hallo Chas,

    Hatte gerade das selbe Problem und bin auf folgende Lösung(en) gekommen:

    Dieser Fehler (451) tritt auf wenn man die Collection Dict mit "Late Binding" verwendet und dann "dict.Keys(i)" verwendet.

    Also:
    Code:
    Lösung 1.:

    Ändere die einfach Zeile auf:

    Code:
    Lösung 2.:

    "Early Binding" verwenden:

    - Unter "Extras/Verweise" "“Microsoft Scripting Runtime” hinzufügen

    Code:
    In der zweiten Variante hast Du den Vorteil von Intellisense.

    Siehe auch:
    http://www.ms-office-forum.de/forum/...d.php?t=256711
    https://excelmacromastery.com/vba-di...s_Late_Binding

    Ich bin mit der einfachen Lösung 1 glücklich geworden... *Smilie

    LG Fritz
     
    fritzk, 7. März 2018
    #3
  4. VBA Dictionary nach Jahren aufsteigend sortieren

    Storax, 7. März 2018
    #4
  5. Hallo,

    entschuldigt bitte erst einmal die verspätete Rückmeldung.

    Vielen Dank, Fritz!! Lösung 1 löst genau das Problem. Was eine verdammte Klammer ausmachen kann... Genau den von dir verlinkten Beitrag übers Late und Early Binding hatte ich sogar zum Einarbeiten in das Thema Dictionary gelesen, aber nicht mehr auf dem Schirm...
    Auf jeden Fall funktioniert das Sortieren nun endlich. Danke!

    @Storax: Das Problem beim Sortieren nach der Ausgabe bestand halt darin, dass ich hier dann meistens nur eine der Zeilen (die Jahresdaten) sortiert bekommen habe, nicht jedoch die Spalten dahinter. Und der Schritt die Zeilen zu verketten, zu sortieren und anschließend wieder zu trennen erschien mir etwas "unelegant", wäre jedoch meine Notlösung geworden, wenn es anders nicht funktioniert hätte... Da die ganzen Schritte automatisiert ablaufen sollen und ich die sortierten Daten noch weiter verarbeiten muss (auch automatisiert) habe ich auf die Pivottabelle verzichtet.
    Sortierfunktionen, u.a. auch das Sortieren eines Dictionarys, habe ich auch bei Pearson gefunden (http://www.cpearson.com/excel/Collec...ctionaries.htm).
    Als totaler VBA-Anfänger scheint das aber sehr komplex und das Ganze hat auch mit einigen Anpassungen bei mir nicht funktioniert. Zusätzlich zu dem Sortiercode, wird dann auch noch eine weitere Funktion benötigt und der Gesamtcode wird ellenlang.
    Grundsätzlich wäre das ja kein Hindernis, wenn das funktioniert und ich da noch durchblicke, und verstehe, was der Code da macht. Aber der dann von mir gepostete Code schien in meinen Augen logisch und ich hatte soweit auch verstanden was er macht, aber ich habe halt leider den Fehler nicht gefunden, auf den mich Fritz dann hingewiesen hat.

    So und jetzt setze ich mir wieder vor mein hoffentlich letztes Problem, und löse das hoffentlich ohne fremde Hilfe *grins
    Nochmals vielen Dank für eure Hilfe und Unterstützung! *top
     
Thema:

VBA Dictionary nach Jahren aufsteigend sortieren

Die Seite wird geladen...
  1. VBA Dictionary nach Jahren aufsteigend sortieren - Similar Threads - VBA Dictionary Jahren

  2. VBA in einer Zeile zu lang

    in Microsoft Excel Hilfe
    VBA in einer Zeile zu lang: Moin, mein VBA Code ist für eine Zeile zu lang. Kann mir einer helfen wie ich den auf 2 Zeilen aufteilen Kann? arrSchuhDaten = Array(Range("A6"), Range("F6"), Range("J6"), Range("A7"),...
  3. Listbox wird nicht breiter, Schriftgrösse ändert sich

    in Microsoft Excel Hilfe
    Listbox wird nicht breiter, Schriftgrösse ändert sich: Hallo, ich habe ein Formular dessen Breite ich mit der Maus ändern kann. Im Formular habe ich einen Rahmen und darin eine Listbox deren Breite an die Formularbreite angepasst wird....
  4. Kontrollkästchen aktivieren ohne VBA - wenn KK1 angekreuzt dann KK2 auch

    in Microsoft Excel Hilfe
    Kontrollkästchen aktivieren ohne VBA - wenn KK1 angekreuzt dann KK2 auch: Hallo zusammen, erstmal danke für all die Tipps und Kniffe, die ich ohne eigenen Thread gefunden und gelernt habe. Leider finde ich mein Thema nirgendwo... Aktuell habe ich zwei Spalten mit...
  5. Per Hyperlink ausgeblendetes Blatt einblenden

    in Microsoft Excel Hilfe
    Per Hyperlink ausgeblendetes Blatt einblenden: Hola ins Forum, ich bräuchte mal wieder eure Hilfe. Ich habe ein Tabellenblatt das mir als Register dient und wo Hyperlinks eingefügt sind um auf das dazugehörige Blatt zu springen. Diese Blätter...
  6. Bilder über VBA Größe und DPI ändern für Webshop

    in Microsoft Excel Hilfe
    Bilder über VBA Größe und DPI ändern für Webshop: Hallo Excel Spezialisten, Ich habe mir eine recht aufwendige Tabelle gebastelt, aus der ich Daten für meinen Webshop generiere und in einer .csv bereitstelle. Es werden neue Preislisten...
  7. VBA: Platzhalter ersetzen und evtl. leere Zeile einfügen

    in Microsoft Word Hilfe
    VBA: Platzhalter ersetzen und evtl. leere Zeile einfügen: Hallo zusammen, ich habe eine Word-Vorlage mit Platzhaltern, in die ich mit VBA Daten aus einer Excel-Datei einfüge (in eine Excel-Zeile schreibe ich alle Daten für ein neues Word-Dokument). So...
  8. Erstellung eines Dynamischen Kalenders (ggf. VBA)

    in Microsoft Word Hilfe
    Erstellung eines Dynamischen Kalenders (ggf. VBA): Guten Morgen an Alle, ich hoffe, es geht euch soweit gut :) Ich wende mich heute an euch, weil ich gerade vollkommen verzweifle und irgendwie so ganz und garnicht weiterkomme und irgendwie...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden