2016-05-08 13 views
2

Ich lese Daten aus einer Excel-Datei und Schreiben von Daten in eine andere Excel-Datei.Ändern Sie Datum Format mit Ersatz oder ersetzen

Mein Problem ist, dass die Quelle Daten im Format dd.mm.yyyy hat und das Ziel das Format dd-mm-yyyy haben muss.

Also ich suchte SO und fand diese Antwort Replacing one character with another in a string, die vorschlagen, dass ich substitute verwenden kann.

Also habe ich versucht, diesen Code:

For r = 1 To 10 
    myOutputSheet.Cells(6+r, 1).Value = myInputSheet.Cells(r, 1).Value 'Date 
    myOutputSheet.Cells(6+r, 1).Value = substitute(myOutputSheet.Cells(6+r, 1), ".", "-") 
Next 

Es gibt den Fehler:

Microsoft VBScript runtime error: Type mismatch: 'substitute' 

Wie korrigiere ich die -. in ändern?

Update

Ich habe versucht, dies auch:

For r = 1 To 10 
    myOutputSheet.Cells(6+r, 1).Value = myInputSheet.Cells(r, 1).Value 'Date 
    replace(myOutputSheet.Cells(6+r, 1), 2, 1, "-") 
    replace(myOutputSheet.Cells(6+r, 1), 4, 1, "-") 
Next 

aber das gibt den Fehler:

Microsoft VBScript compilation error: Cannot use parentheses when calling a Sub 

Deshalb habe ich versucht:

For r = 1 To 10 
    myOutputSheet.Cells(6+r, 1).Value = myInputSheet.Cells(r, 1).Value 'Date 
    replace myOutputSheet.Cells(6+r, 1), 2, 1, "-" 
    replace myOutputSheet.Cells(6+r, 1), 4, 1, "-" 
Next 

aber das gibt den Fehler:

+0

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

+0

@vacip Ich bin ziemlich neu in VBA, aber ich denke, dass sie nur Strings sind. – 4386427

+0

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

Antwort

8

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.

+0

Danke für die ausführliche Erklärung. Ich werde Ihre verschiedenen Vorschläge ausprobieren, um zu lernen, wie sie funktionieren. Bisher +1 - danke. – 4386427

+0

Wow. Schön erklärt. – vacip