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

was ist das für ein Format & warum??

was ist das für ein Format & warum?
01.05.2020 10:17:36
Fred
Hallo Excel und VBA Profis,
in meiner Excelmappe funktioniert mal wieder etwas nicht so, wie es sollte.
Ich erstelle aus Datumswerten in einem anderen Blatt eine Unikatliste.
Quellbereich und Zielbereich sind jeweils als "Datumswert" formatiert.
Problem:
Wird die Liste erstellt, werden die Datumswerte anscheinend als Text dargestellt,- obwohl Format Datum.
Gehe ich nun ans Ende des "Textes" und drücke Eingabetaste, wird die Zelle "richtig" dargestellt.
zur Erklärung: https:\/\/www.herber.de/bbs/user/137173.xlsb
Mir ist "richtige" Darstellung der Werte schon wichtig, da diese im späteren Ablauf von einem Diagramm abgefragt werden ....
Kann mal bitte jemand drauf schaun und mir den Grund verraten, warum das so ist wie es ist und wie ich das ändere?
Mit freundlichen Gruß
Fred

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nachfrage
01.05.2020 10:34:55
Werner
Hallo,
willst du tatsächlich nur die Daten aus der Spalte A deines Quellblattes in die Spalte AA deines Zielblattes kopieren?
Wenn ich sehe, dass du zunächst im Zielblatt die Spalten AA bis AP leerst, dann wohl eher nicht.
Also welche Daten sollen vom Quellblatt ins Zielblatt kopiert werden?
Gruß Werner
AW: Nachfrage
01.05.2020 10:56:27
Fred
Hallo Werner,
das was "Probleme" bereitet ist nur der Vorgang der "Datumswerte",- dies müsste unbedingt korrigiert werden.
Ja, im Makro werden noch weitere Unikatlisten erstellt (aus anderen Quellblättern). Um die Mappe entsprechend klein zu halten habe ich mich auf das wesenliche beschränkt.
Die Datums-Unikatliste wird nicht sortiert.
Die "anderen" Unikatlisten werden sortiert ...
Makro
Public Sub Unikate_1()
Dim avntValues As Variant, vntItem As Variant
Dim objDictionary As Object
Worksheets("Head").Range("AA2:AP5000").ClearContents
With Worksheets("Tage_b")
avntValues = .Range("A10:A50").Value
End With
Set objDictionary = CreateObject(Class:="Scripting.Dictionary")
With objDictionary
For Each vntItem In avntValues
.Item(Key:=vntItem) = vbNullString
Next
Worksheets("Head").Cells(2, 27).Resize(.Count, 1).Value = Application.Transpose(.Keys)
Worksheets("Head").Cells(1, 27).Value = "Datum"
End With
Set objDictionary = Nothing
' *********************** Wettbewerb ********************************
With Worksheets("Spiele_b")
avntValues = .Range("C10:C300").Value
End With
Set objDictionary = CreateObject(Class:="Scripting.Dictionary")
With objDictionary
For Each vntItem In avntValues
.Item(Key:=vntItem) = vbNullString
Next
Worksheets("Head").Cells(2, 28).Resize(.Count, 1).Value = Application.Transpose(.Keys)
Worksheets("Head").Cells(1, 28).Value = "Wettbewerb"
End With
Set objDictionary = Nothing
Worksheets("Head").Activate
Worksheets("Head").Range("AC2").FormulaLocal = "=ZÄHLENWENN(accountStatement!$O$6:$O$30000;Head! _
AB2)"
LZ_EX77 = Sheets("Head").Cells(Rows.Count, 28).End(xlUp).Row
With Worksheets("Head")  ' Formeln werden nach unten gezogen
.Range("AC2:AD2").AutoFill Destination:=Range("AC2:AD" & LZ_EX77), Type:=xlFillDefault
End With
' Werte statt Formeln
With Sheets("Head").UsedRange
.Cells = .Cells.Value
End With
'Sortieren
'Parameter Land
LZ_EX100 = Sheets("Head").Cells(Rows.Count, 28).End(xlUp).Row
strBereich = "AB1:AC" & LZ_EX100
strSpalte = "AB" ' nach dieser Spalte sortieren
With ActiveSheet
Range(strBereich).Sort _
Key1:=Range(strSpalte & "1"), Order1:=xlAscending, _
Header:=xlYes
End With
' *********************** Markt ********************************
With Worksheets("accountStatement")
avntValues = .Range("Q6:Q30000").Value
End With
Set objDictionary = CreateObject(Class:="Scripting.Dictionary")
With objDictionary
For Each vntItem In avntValues
.Item(Key:=vntItem) = vbNullString
Next
Worksheets("Head").Cells(2, 31).Resize(.Count, 1).Value = Application.Transpose(.Keys)
Worksheets("Head").Cells(1, 31).Value = "Markt"
End With
Set objDictionary = Nothing
Worksheets("Head").Activate
Worksheets("Head").Range("AF2").FormulaLocal = "=ZÄHLENWENN(accountStatement!$Q$6:$Q$30000;Head! _
AE2)"
LZ_EX177 = Sheets("Head").Cells(Rows.Count, 31).End(xlUp).Row
With Worksheets("Head")  ' Formeln werden nach unten gezogen
.Range("AF2:AG2").AutoFill Destination:=Range("AF2:AG" & LZ_EX177), Type:=xlFillDefault
End With
' Werte statt Formeln
With Sheets("Head").UsedRange
.Cells = .Cells.Value
End With
'Sortieren
'Parameter Land
LZ_EX1100 = Sheets("Head").Cells(Rows.Count, 31).End(xlUp).Row
strBereich = "AE1:AF" & LZ_EX1100
strSpalte = "AE" ' nach dieser Spalte sortieren
With ActiveSheet
Range(strBereich).Sort _
Key1:=Range(strSpalte & "1"), Order1:=xlAscending, _
Header:=xlYes
End With
End Sub
Wenn es nötig ist, könnte auch der Vorgang mit der Unikatliste "Datum" getrennt (im anderen Makro) von den anderen Unikatlisten geschehen.
Gruß
Fred
Anzeige
AW: Nachfrage
01.05.2020 11:25:44
Werner
Hallo,
damit hast du jetzt aber meine Frage nicht beantwortet. Offensichtlich stellst du da ja wohl Spaltenweise Daten aus verschiedenen Blättern zusammen.
Aber egal:
Public Sub Unikate_1()
Dim avntValues As Variant, vntItem As Variant
Dim objDictionary As Object, i As Long
Application.ScreenUpdating = False
Worksheets("Head").Range("AA2:AP5000").ClearContents
With Worksheets("Tage_b")
avntValues = .Range("A10:A50").Value
End With
Set objDictionary = CreateObject(Class:="Scripting.Dictionary")
With objDictionary
For Each vntItem In avntValues
.Item(Key:=vntItem) = vbNullString
Next
Worksheets("Head").Cells(2, 27).Resize(.Count, 1).Value = Application.Transpose(.Keys)
Worksheets("Head").Cells(1, 27).Value = "Datum"
End With
Set objDictionary = Nothing
With Worksheets("Head")
For i = 2 To .Cells(.Rows.Count, "AA").End(xlUp).Row
.Cells(i, "AA") = CDate(.Cells(i, "AA"))
Next i
End With
End Sub
Gruß Werner
Anzeige
AW: Nachfrage / Werner
01.05.2020 11:37:23
Fred
Hallo Werner,
ja!! mit der Ergänzung
With Worksheets("Head")
For i = 2 To .Cells(.Rows.Count, "AA").End(xlUp).Row
.Cells(i, "AA") = CDate(.Cells(i, "AA"))
Next i
End With

werden nun die Daten in Spalte "AA" wie gewünscht angezeigt.
Das Problem ist nun gelöst, kannst du mir vieleicht noch sagen, warum bei meiner ursprünglichen Variante die Werte als Text dargestellt wurden und nicht wie formatiert als Datum?
Auf jedenfall "herzlichen Dank für deine Mühe und Kompetenz" !!
Gruß
Fred
AW: Nachfrage / Werner
01.05.2020 11:56:50
Werner
Hallo,
weiß ich auch nicht so genau. Dürfte aber wohl mit der Zellformatierung in Spalte AA zusammenhängen. Deutsches Datumsformat, VBA spricht aber Englisch.
Was ich eben noch bemerkt habe.
Lösch mal meinen vorher geposteten Codezusatz aus deinem Code wieder raus.
Ändere hier in deinem Code mal das
avntValues = .Range("A10:A50").Value

um in
avntValues = .Range("A10:A50").Value2
So funktioniert es bei mir.
Gruß Werner
Anzeige
AW: Nachfrage / Werner
01.05.2020 13:02:15
Fred
Hallo Werner,
beides klappt !!
Danke für deine Hilfe!!!
Gruß
Fred
Gerne u. Danke für die Rückmeldung. o.w.T.
01.05.2020 13:06:00
Werner
AW: Nachfrage / Werner
01.05.2020 18:13:25
Luschi
Hallo Fred,
die eigentliche Ursache Deines ursprünglichen Problems liegt in dieser Vba-Zeile:
... = Application.Transpose(.Keys)
Hier werden die Dictionary-Key-Inhalte von Variant/Date in Variant/Strings transformiert.
Füge nach 'Next' folgende 2 Befehle hinzu und setze einen Haltepunkt:
vX = .Keys
vY = Application.Transpose(.Keys)
Jetzt kann man sich im Überwachungsfenster das Dilemma der beiden Arrays anschauen.
Bei Verwendung von 'Value2' werden die hinter dem Datum stehenden Double-Zahlen verwendet und da passiert die Transformation von Variant/Double in Variant/Strings eben nicht.
Gruß von Luschi
aus klein-Paris
Anzeige

310 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige