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

Keys in Dictionary

Keys in Dictionary
23.05.2017 18:18:35
Peter
Hallo Excel Experten,
ich habe mir aus einem anderen Forum eine Aufgabe gesucht um diese per Scripting Dictionary zu lösen.
Warum wird mir bei den Keys der Inhalt Jan 14 als 14. Jan dargestellt und nur Mai, Okt, Dez bleiben richtig in der Darstellung?
Woher nimmt VBA den Punkt in der Darstellung?
Ich habe verschiedene Aufbereitungs-Formen ausprobiert, aber alle bringen das gleiche fehlerhafte Ergebnis.
Gruß Peter
https://www.herber.de/bbs/user/113756.xlsm

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Keys in Dictionary
23.05.2017 18:49:40
Rudi
Hallo,
was soll das zusammenbasteln von sDatum?
sDatum=Format(vTemp(lZeile, 1),"MMM YY")
Gruß
Rudi
AW: Keys in Dictionary
23.05.2017 21:13:56
Peter
Hallo Rudi,
leider hat deine Formel keinerlei richtiges Datum ergeben, es bleibt "kraus", wie zuvor.
Das Apostroph an erster Stelle, so wie es Daniel vorschlägt, scheint der richtige Weg zu sein.
Gruß Peter
noch die Formel
23.05.2017 18:54:36
Rudi
=SUMMENPRODUKT((TEXT($A$2:$A$1790;"JJMM")=TEXT(E2;"JJMM"))*$B$2:$B$1790)
Gruß
Rudi
AW: Keys in Dictionary
23.05.2017 18:55:06
ransi
HAllo Peter,
Bei mir klappt das so:
            sDatum = CStr(sDatum & " " & iJahr)
            MyDict(sDatum) = MyDict(sDatum) + CDbl(vTemp(lZeile, 2))
        End If
    Next lZeile
    
    .Range("H2:I" & .Cells(.Rows.Count, 8).End(xlUp).Row).ClearContents
    With .Range("H2").Resize(MyDict.Count)
        .NumberFormat = "@"
        .Value = WorksheetFunction.Transpose(MyDict.keys)
    End With
    .Range("I2").Resize(MyDict.Count) = WorksheetFunction.Transpose(MyDict.items)
End With

ransi
Anzeige
AW: Keys in Dictionary
23.05.2017 21:19:06
Peter
Hallo ransi,
die Lösung mit dem führenden Apostroph, so wie es Daniel vorschlägt, scheint die richtige Lösung zu sein.
Das Apostroph, gepaart, mit Rudis Formel, sDatum = "'" & Format(vTemp(lZeile, 1), "MMM YY"), scheint die beste. richtige Lösung zu sein.
Gruß Peter
Erstaunlich ist eher, dass Mrz auch falsch ...
23.05.2017 18:56:50
Luc:-?
…behandelt wird, Peter,
denn das, was du machst, ist eigentlich eine übliche englische Notationsform für Monat und Tag, nicht Jahr, denn das müsste 4stellig sein oder im englischen Gebrauch mit einem Apostroph beginnen, wenn das Jhdt weggelassen wird. Und VBA ist nunmal English orientated! ;-]
Gruß, Luc :-?
Besser informiert mit …
Anzeige
AW: Erstaunlich ist eher, dass Mrz auch falsch ...
23.05.2017 21:22:02
Peter
Hallo Luc,
wenn ich Daniels Lösung mit dem führenden Apostroph verwende, sieht die Darstellung von Monat und Jahr gut aus, Kombiniert mit Rudis Formel, sDatum = "'" & Format(vTemp(lZeile, 1), "MMM YY"), ist es perfekt.
Gruß Peter
Dann mach's so, bei mir ist das 'JJ zu sehen! ;-]
23.05.2017 22:18:51
Luc:-?
Ich hab's nämlich auch getestet und schreibe ein gekürztes Jahr (fast) immer so.
Luc :-?
AW: Keys in Dictionary
23.05.2017 19:22:33
Daniel
Hi
das Problem düfte entstehen, wenn du die Keys in die Zellen zurückschreibst.
Es sind Texte, aber Excel versucht einen Text in ein Datum zu verwandeln, wenn es der Meinung ist, dass der Text wie ein Datum aussieht.
Da du das ganze per VBA machst, wendet Excel die amerikanischen Regeln an, um ein Datum zu erkennen.
Du verwendest jedoch die deutsche Schreibweise, in der manche Monatsschreibweisen gleich dem Amerikanischen sind und machen nicht. Daher bleibt manchmal der Text erhalten und manchmal wird in ein Datum gewandelt.
Im Prinzip hast du zwei möglichkeiten:
a) deine Keys sollen weiterhin Texte bleiben.
Dann musst du bei der Key-Generierung das Texterkennungszeichen ' voranstellen, damit die Umwandlung in ein Datum auf jeden Fall unterbleibt
b) deine Keys sollen richtige Datumswerte werden. Hierzu generierst du den Key als Datumswert und nimmst den ersten des jeweiligen Monats.
Da die Keys dann echte Datumswerte sind und auch so in die Zellen geschrieben werden, kannst du die gewünschte Schreibweise über das Zahlenformat der Zellen einstellen.
Code für Variante a)
hierzu einfach in dieser Zeile das Hochkomma ergeänzen:

sDatum = "'" & Choose(iMonat, ..."
Code für Variante b)
hier dann der vollständige Code.
als Zahlenformat für die Spalte kannst du dann "MMM JJ" einstellen.
Public Sub Monatswerte_addieren()
Dim MyDict  As Object
Dim vTemp   As Variant
Dim lZeile  As Long
Dim iJahr   As Long
Dim iMonat  As Long
Dim sDatum  As Date
Set MyDict = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = False
With ThisWorkbook.Worksheets("Spalte 1 bis 21") ' den Tabellenblattnamen ggf. anpassen!
vTemp = .Range("A2:B" & .Cells(.Rows.Count, 1).End(xlUp).Row)
For lZeile = LBound(vTemp, 1) To UBound(vTemp, 1)
If vTemp(lZeile, 1)  "" And IsDate(vTemp(lZeile, 1)) Then
sDatum = CDate(Format(vTemp(lZeile, 1), "YYYY-MM-01"))
MyDict(sDatum) = MyDict(sDatum) + CDbl(vTemp(lZeile, 2))
End If
Next lZeile
.Range("H2:I" & .Cells(.Rows.Count, 8).End(xlUp).Row).ClearContents
.Range("H2").Resize(MyDict.Count) = WorksheetFunction.Transpose(MyDict.keys)
.Range("I2").Resize(MyDict.Count) = WorksheetFunction.Transpose(MyDict.items)
End With
Application.ScreenUpdating = True
Set MyDict = Nothing
End Sub
Gruß Daniel
Anzeige
AW: Keys in Dictionary
23.05.2017 21:09:45
Peter
Hallo Daniel,
das Apostroph vor der sDatum-Variablen hat geholfen, die gewünschten Werte bleiben erhalten.
Danke für deine Hilfestellung.
Gruß Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige