Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1784to1788
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

Scripting.Dictionary

Scripting.Dictionary
11.10.2020 11:48:48
Helmut

Schönen Sonntag :-)
für meine Soll-Lösung habe ich eine VBA Lösung.
Meine Frage ist, ob und wie das Soll Ergebnis mit Scripting.Dictionary zu lösen ist.
Meine Versuche sind gescheitert, vielleicht kann mir jemand helfen :-)
Besten Dank und Gruß
Helmut
https://www.herber.de/bbs/user/140801.xlsx

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
benutze doch SummeWenn(...)
11.10.2020 11:58:16
Matthias
Hi
Tabelle1

 LM
1produktTotal 1
2a197
3b56
4c175
5d92
6e60

Formeln der Tabelle
ZelleFormel
M2=SUMMEWENN($A$2:$A$17;L2;$D$2:$D$17)
M3=SUMMEWENN($A$2:$A$17;L3;$D$2:$D$17)
M4=SUMMEWENN($A$2:$A$17;L4;$D$2:$D$17)
M5=SUMMEWENN($A$2:$A$17;L5;$D$2:$D$17)
M6=SUMMEWENN($A$2:$A$17;L6;$D$2:$D$17)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
Gruß ...
Anzeige
AW: Scripting.Dictionary
11.10.2020 12:18:04
ralf_b
wozu das Rad neu erfinden? Wo ist deine VBA Lösung?
Warum mit Scripting Dictionary? Gibts dafür einen Grund? Vorteile"
AW: Scripting.Dictionary
11.10.2020 12:36:29
Daniel
Sollte die Datenmengen größer und die Anzahl der gewünschten Ergebnisse zahlreicher werden, ist SummeWenn halt irgendwann zu langsam.
Wenn dann auch eine Pivottabelle nicht ins Konzept passt, ist das dictionary ein guter Weg, das ganze zu beschleunigen.
Gruß Daniel
AW: Scripting.Dictionary
11.10.2020 12:42:56
Daniel
Hi
Wie sehen den dein aktuelles Soll-Makro aus?
Wie sehen deine bisherigen Versuche mit Dictionary aus?
Wo liegen deine Probleme?
Was genau sind die Vorgaben, bzw was ist Vorhanden und was ist gesucht? Dh, sind die Produkte in Spalte L vorgegeben oder müssen dies auch von dem Makro ermittelt werden?
Gruß Daniel
Anzeige
AW: Scripting.Dictionary
11.10.2020 12:54:24
Helmut
Hallo,
aus den Spalten A bis I soll die Tabelle wie in Spalten L bis P generiert werden.
Mein Makro spielt dabei keine Rolle, dass es mehrere Wege gibt-auch PQ- ist mir klar.
Es ist einfach ein Lernprozess mit Scripting.Dictionary und ich habe es nur für eine
Summenspalte geschafft. Deshalb meine Bitte um Hilfe für mehrere Spaltensummen.
Gruß Helmut
AW: Scripting.Dictionary
11.10.2020 13:14:22
Nepumuk
Hallo Helmut,
in Dictionary wird der Index der Daten im Array gespeichert:
Option Explicit

Public Sub Summe()
    Dim avntValues As Variant, avntSumm() As Variant
    Dim ialngIndex As Variant, ialngRow As Long, ialngTemp As Long
    Dim objDicitionary As Object
    Set objDicitionary = CreateObject(Class:="Scripting.Dictionary")
    With Worksheets("Tabelle1")
        avntValues = .Range(.Cells(2, 1), .Cells(.Rows.Count, 9).End(xlUp)).Value
    End With
    With objDicitionary
        For ialngRow = LBound(avntValues, 1) To UBound(avntValues, 1)
            If Not .Exists(Key:=avntValues(ialngRow, 1)) Then
                Call .Add(Key:=avntValues(ialngRow, 1), Item:=ialngIndex)
                Redim Preserve avntSumm(4, ialngIndex)
                avntSumm(0, ialngIndex) = avntValues(ialngRow, 1)
                avntSumm(1, ialngIndex) = avntSumm(1, ialngIndex) + avntValues(ialngRow, 4)
                avntSumm(2, ialngIndex) = avntSumm(2, ialngIndex) + avntValues(ialngRow, 6)
                avntSumm(3, ialngIndex) = avntSumm(3, ialngIndex) + avntValues(ialngRow, 8)
                avntSumm(4, ialngIndex) = avntSumm(4, ialngIndex) + avntValues(ialngRow, 9)
                ialngIndex = ialngIndex + 1
            Else
                ialngTemp = .Item(Key:=avntValues(ialngRow, 1))
                avntSumm(1, ialngTemp) = avntSumm(1, ialngTemp) + avntValues(ialngRow, 4)
                avntSumm(2, ialngTemp) = avntSumm(2, ialngTemp) + avntValues(ialngRow, 6)
                avntSumm(3, ialngTemp) = avntSumm(3, ialngTemp) + avntValues(ialngRow, 8)
                avntSumm(4, ialngTemp) = avntSumm(4, ialngTemp) + avntValues(ialngRow, 9)
            End If
        Next
    End With
    Set objDicitionary = Nothing
    With Worksheets("Tabelle1")
        .Cells(2, 12).Resize(ialngIndex, 5) = Application.Transpose(avntSumm)
    End With
End Sub

Gruß
Nepumuk
Anzeige
Danke Nepumuk, funktioniert ...
11.10.2020 13:25:08
Helmut
.. werde es mir in Ruhe anschauen und hoffentlich auch verstehen :-)
Danke auch an Matthias L, ralf_b und Daniel !
Gruß
Helmut
AW: Scripting.Dictionary
11.10.2020 13:26:59
Daniel
Hi
Wo ist da das Problem?
Variante a)
Für jede Spalte ein eigenes Dictionary, welche du natürlich im dem selben Key befüllst.
Variante b)
Jedes Item eines Dictionarys kann nicht nur ein Einzelwertung sein, sondern auch ein Array um mehrere Werte aufzunehmen.
Hier wird es allerdings etwas komplizierter.
Wenn der Key das erste mal verwendet wird, muss man das Array neu anlegen.
Bei späteren Verwendungen muss man das Array aus dem Dictionary herausholen, befüllen und wieder zurückschreiben, also in etwa so. if dic.exists(Product) then arr = dic(Product) Else Dim arr(1 to 3) End if arr(1) = arr(1) + esterSplatenwert arr(3) = arr(3) + dritterSpaltenwert dic(Product) = arr Beim erstellen des Ergebnisarrays für die Ausgabe muss man das natürlich berücksichtigen.
Gruß Daniel
Anzeige
Wo ist da das Problem?
11.10.2020 13:49:27
Helmut
..vor dem Bildschirm :-)
Siehe meine Antwort an Nepumuk,Thema somit erledigt-Danke
Gruß
Helmut

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige