Zunächst sollten Sie wissen, dass alle Daten und Zeiten in Excel als Zahlen gespeichert sind und lediglich als Daten angezeigt werden.
So könnte die Zahl 42.000 ein Datum sein, wenn als solches angezeigt wird. Es ist der 42.000ste Tag nach dem 31. Dezember 1899. Das wäre der 27. Dezember 2014.
Hier wird es kompliziert: Wenn Daten nicht als Zahlen, sondern als Text in Excel gespeichert werden. Dann könnte es für einen Excel-Benutzer scheinen, dass es Daten in einer Zelle gibt, obwohl es tatsächlich (nur für Excel) nur Text gibt. Während ein Benutzer den Unterschied zwischen den beiden nur durch Betrachten einer Zelle nicht erkennen kann, besteht der wirkliche Unterschied darin, dass Sie Operationen an den Nur-Text-Daten nicht ausführen und datieren können.
Mit traurig alles, was einen Blick auf zwei kleine Beispiele haben lassen:
(1) Geben Sie in eine Zelle die folgenden: 11.12.2013
. Es besteht die Möglichkeit, dass Excel es als Datum erkennt und es in die Nummer 41,619 umwandelt. Aber du wirst ein Date sehen. Dies liegt daran, dass Excel das Format dieser Zelle automatisch von General
in Date
geändert hat. Aber wenn Sie das Format dieser Zelle zu General
ändern, dann werden Sie die vorgenannte Nummer sehen.
(2) Geben Sie nun Folgendes in eine Zelle ein: 2015-14-11
. Auch hier ist es wahrscheinlich, dass Excel dies nicht als Datum erkennt, sondern nur als Text speichert. Wenn Sie sich das Zahlenformat für diese Zelle ansehen, werden Sie wahrscheinlich immer noch General
sehen und wenn Sie es explizit in Number
ändern, sehen Sie immer noch 2015-14-11
.
Jetzt können Sie wahrscheinlich besser zu den Kommentaren von @vacip oben beziehen. Er/Sie hat versucht, herauszufinden, ob Sie tatsächlich Daten (gespeichert als Zahlen) in Ihrer Quelldatei haben oder ob Sie nur Text in dieser Datei haben, der darauf hindeutet, dass er Daten enthält.
Wenn Excel diese Daten in der Quelldatei als solche erkannt hat, dann ist es einfach, das Format zu ändern, indem einfach die .NumberFormat
für eine Zelle geändert wird. Im Wesentlichen möchten Sie vielleicht in Ihre Quelldatei schauen und prüfen, ob Sie diese Daten als Zahlen anzeigen können (die Tage nach dem 31. Dezember 1899).
Wenn das der Fall ist, dann sollten Sie in der Lage sein, das Zahlenformat in dd-mm-yyyy
zu ändern, und Sie sind fertig. Es ist jedoch wieder wichtig, ob Sie Text in der Zieldatei speichern möchten oder ob Sie dort Daten speichern möchten. Wenn Sie Daten wollen dort speichern, und Sie haben sie als Daten in der Quelldatei dann würde ich vorschlagen, die folgende:
myOutputSheet.Cells(6+r, 2).Value2 = myInputSheet.Cells(6+r, 2).Value2
myOutputSheet.Cells(6+r, 2).NumberFormat = "dd-mm-yyyy"
Doch wenn Sie auf die Übertragung 13.11.2013
in die Zieldatei bestehen, dann werden Sie verwenden möchten die folgende (unter der Bedingung, dass es tatsächlich erkannten Daten in der Quelldatei):
myOutputSheet.Cells(6+r, 2).Value2 = Format(myInputSheet.Cells(6+r, 2).Value2, "dd-mm-yyyy")
Wo es ein bisschen kompliziert werden könnte, ist, wenn Sie Text in der Quelldatei haben. Wenn es Ihnen nichts ausmacht, dass es sich um Text bleibt und Sie wirklich wollen einfach nur die .
für eine -
ändern, dann können Sie die Replace
verwenden, wie oben in einem Kommentar vorgeschlagen:
myOutputSheet.Cells(6+r, 2).Value = Replace(myInputSheet.Cells(6+r, 2).Value, ".", "-")
Doch wenn Sie Text in das haben Quelldatei und Sie Daten in der Zieldatei speichern möchten, dann können Sie Excel bitten, eine Konvertierung mit CDate
zu versuchen, und im Voraus überprüfen, ob der Inhalt einer Zelle möglicherweise als Datum mit IsDate
erkannt werden konnte:
myOutputSheet.Cells(6+r, 2).Value2 = Iif(IsDate(myInputSheet.Cells(6+r, 2).Value, CDate(myInputSheet.Cells(6+r, 2).Value), "no recognizable date")
Sie haben könnten erkannt, dass ich manchmalverwendetund manchmal .Value2
in den obigen Code-Schnipsel. Für weitere Informationen möchten Sie vielleicht Folgendes lesen: What is the difference between .text, .value, and .value2?
BTW: Zeiten werden auch als Nummer gespeichert. Sie werden - tatsächlich - als Bruchteile eines Tages gespeichert. Also, die Zahl 0,5 entspricht einem halben Tag und das wäre 12:00 Uhr mittags. Zur gleichen Zeit, 09.00 Uhr morgens ist 0.375 und 18:00 oder 6 Uhr entspricht 0,75.
Sind die Datumsangaben tatsächliche Daten oder Zeichenfolgen, die wie Daten aussehen? (Sie verstehen den Unterschied, nicht wahr?) Was gibt Ihnen der Parameter '.Value2'? – vacip
@vacip Ich bin ziemlich neu in VBA, aber ich denke, dass sie nur Strings sind. – 4386427
Denk nicht nach. :) Überprüfen Sie die Value2-Eigenschaft. Wenn es eine Zahl zurückgibt (42498 zum Beispiel), dann handelt es sich um tatsächliche Daten. Oder versuchen Sie, sie in Excel manuell in ein anderes Datumsformat zu formatieren. Wenn nichts passiert, sind sie Strings, wenn sie reagieren, sind sie Daten. – vacip