EXCEL-VBA-CSV-Formatierung-Problem
Ich bin ein Excel-VBA-Neuling. Ich entschuldige mich, wenn ich Frage, was zu sein scheint eine offensichtliche Frage.
Ich habe eine CSV-text-Datei, die ich öffne in einem Excel-Arbeitsblatt. Eine Zeile der Datei enthält Informationen zu Datum mit dem Format "YY-MMM', (ie: 9-FEB 10-MAI). Wenn Sie die Excel-Tabelle öffnet sich das Datei-Datum verändert wird, um "mm/dd/yyyy" - format und liest sich wie 02/09/2009 oder 05/10/2009, wo die YY-MMM ist jetzt MM/JJ/2009, (dh: 9-FEB wird 02/09/2009, und die 10-MAI wird 05/10/2009).
Ich würde gerne wissen, ob es möglich ist, formatieren Sie das Feld aus YY-MMM mm/01/JJJJ.
Habe ich versucht zu analysieren, das Feld "Datum" nach dem umwandeln in text mit
Range("B11", "IV11").NumberFormat = "text"
Jedoch, der Wert ist dann eine fortlaufende und nicht-HIERFÜR gültigen.
Habe ich erfolglos auf der Suche nach einer Liste der NumberFormat-Optionen.
Wenn Sie können, zeigen Sie mich in eine Richtung, es wird sehr geschätzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfach zu beantworten, ein Teil Ihrer Frage, hier ist die Liste der Datums-Formatierung Optionen (ohne Zeit):
ziemlich das gleiche für Monat...
Jahren sind einfacher...
kombinieren Sie diese und setzen Sie, was Separatoren, wie Sie in der Ihnen
z.B.
Ich habe gerade versucht ein paar Dinge ausprobiert und ich denke, Ihre beste Wette ist, um das format zu ändern in der text-Datei entsprechen, um ein standard-Datum-Anordnung. Wenn Sie umkehren können (z.B. MMM-YY) du wirst in Ordnung sein, oder teilen Sie Sie in separate Spalten (was, wenn beim import legen Sie fest - als separator als auch als Komma?). Dies ist ein Fall, wo Excel versucht, clever zu sein ist ein Schmerz.
HTH
Wenn Sie derzeit
File > Open
zum öffnen der CSV-Datei, dann versuchenData > Import External Data > Import Data
statt. Dadurch wird der text import-Assistenten, die könnte Ihnen mehr Flexibilität in, wie Sie, die Datei zu importieren. Insbesondere können Sie deklarieren eine Spalte in der Datei als text an, so dass Excel nicht versuchen zu analysieren, den WertAls Simon erklärt hat, Ihre Terminologie für das aktuelle Datum-format ist nicht korrekt.
9-FEB
entsprichtd-mmm
format und02-19-2009
(NB absichtlich geändert, um ein eindeutiges Datum für dieses Beispiel; 02-09-2009 ist der 9. Feb, in der UNS aber 2. Sept in Großbritannien) entsprichtmm-dd-yyyy
Wenn Sie wollten, ändern Sie die
NumberFormat
text für den Bereich beginnend in Zelle B11 und endet in Zelle IV11 dann würden Sie Folgendes verwenden:Range("B11:IV11").NumberFormat = "@"
@ bedeutet-text-format und Sie benötigen den : - operator, um anzuzeigen, einen zusammenhängenden Bereich von Zellen. Ihre original-Beispiel von
Range("B11","IV11")
tatsächlich gibt die union der Zellen B11 und IV11 und somit nur die betroffen, die zwei ZellenEs ist ungewöhnlich, Ihre Daten strukturiert in Zeilen statt Spalten. Anstatt Ihre Termine in Zeile 11, es würde sich eher haben Sie in Spalte K statt, so dass Sie verwenden würde
Range("K2:K65535")
oder nurRows("K")
Meisten der eingebauten Excel-Zeug Sortieren und AutoFilter davon ausgehen, dass Ihre Daten in festgelegten Spalten sowieso. Zeile 1 traditionell enthält die Spaltennamen und dann jede nachfolgende Zeile enthält einen einzelnen Datensatz. Möchten Sie vielleicht zu prüfen, wie Ihre CSV-Datei erstellt wird, um zu sehen, wenn Sie können switich es zu einem mehr nutzbar spaltenbasierte StrukturWenn Sie ein Datum wie
19-FEB
als text in eine Zelle dann, vorausgesetzt, Sie wollen immer das Jahr, Teil zu sein, das laufende Jahr, können Sie es ändern, um den ersten Tag des Monats, inmm/dd/yyyy
format in VBA. In diesem Beispiel werden nur die änderungen einer Zelle, aber Sie können verwenden Sie es als Grundlage für eine breitere Lösung:DateSerial
erstellt ein date-Seriennummer aus dem angegebenen Jahr, Monat und Tag.Year(Date)
extrahiert Jahr Teil aus dem aktuellen system-Datum,Month(strOrigValue)
nimmt den Monat Teil, von den Daten, die bereits in der Zelle, und wir wollen den ersten Tag des MonatsIn der Reihenfolge zu Lesen, in ein Datum, können Sie etwas wie das hier tun:
zwar gibt es Einschränkungen zu, wie excel zu interpretieren, Termine, und welche technischen Grenzen in welche Termine es speichern kann. (möglicherweise müssen Sie Lesen, auf die maximale und minimale Termine, und, wie excel interpretiert zweistellige Jahreszahlen >30 vs <30, u.a.)
Um das Datum zu formatieren, können Sie eine der drei Funktionen:
oder diese
oder diese
Können Sie eine Suche auf google für mehr Dokumentation für jede Funktion. Für die format-Funktion, die Sie wollen zu finden eine gute Referenz -- ich habe gesehen, einige ziemlich unvollständig lieben. MSDN-in der Regel gute, aber nicht immer. Fühlen Sie sich frei, zu stoßen, diese Antwort, wenn Sie mehr details wollen.
Diese davon ausgegangen, dass das 2-stellige Jahr 2000. Sobald Sie am Ende mit Ihrem falschen Datum 9-Feb = 02/02/2009, können Sie konvertieren Sie diese zu dem Datum, das Sie wollen mit der Formel: =DATUM(Tag(B11)+2000; Monat(B11),1)