Diese Frage ist ein bisschen alt, aber bis heute scheint sie keine Antwort zu haben. Ich habe auch ähnliche Fragen auf einer Reihe von Websites gesehen, aber noch keine Antwort gefunden, die nur integrierte Excel-Funktionen betrifft. Mit VBA ist dies jedoch recht einfach zu lösen. Sie müssen nicht einmal programmieren können, um dies zu tun, da die erforderliche Funktion so einfach ist.
Drücken Sie bei geöffneter Arbeitsmappe einfach Alt + F11 (um den VBA-Editor zu öffnen). Klicken Sie dann auf den Menüpunkt Einfügen > Modul . Geben Sie
im neuen VBA-Modul Folgendes ein:
Public Function FMT$(ByVal Value, ByVal strFormat)
FMT = VBA.Format$(Value, strFormat)
End Function
Dazu wird einfach die VBA-eigene Format
Funktion anstelle der Excel- TEXT
Funktion verwendet. Genau das wollen Sie.
Diese neue Funktion formatiert jedes Datum (oder jede Zahl) gemäß der von Ihnen angegebenen Formatzeichenfolge. Die Formatzeichenfolge wird unter Verwendung der Standardnotation ( en-US ) interpretiert , unabhängig von den regionalen Einstellungen des Betriebssystems.
Um dies in Ihrer Arbeitsmappe zu verwenden, geben Sie einfach =FMT(A1, "yyyymmdd_hhss")
statt =TEXT(A1, "yyyymmdd_hhss")
. (Natürlich können Sie den Zellbezug und die Formatzeichenfolge nach Bedarf ändern.)
Sie können die Funktion übrigens beliebig benennen. Ich habe gewählt, FMT
weil es kurz war und weil die Funktion sowohl Zahlen als auch Datumsangaben formatieren kann. Aber Sie können etwas aussagekräftigeres wählen, wenn Sie möchten. Denken Sie daran, in Ihrem Arbeitsblatt denselben Namen wie im VBA-Code zu verwenden.
Beachten Sie, dass die VBA-Formatzeichenfolgen nicht genau mit den benutzerdefinierten Formatzeichenfolgen von Excel identisch sind (verwenden Sie beispielsweise "n" anstelle von "m" für Minuten), sie sind jedoch sehr ähnlich. Suchen Sie hier nach Details oder suchen Sie in MSDN nach "Formatfunktion (Visual Basic für Applikationen)". Scrollen Sie nach unten, um die verschiedenen Datumsformatbezeichner anzuzeigen.
Methode 2
Ein weiterer Ansatz, der ebenfalls VBA verwendet, jedoch möglicherweise einfacher zu warten ist, ist der folgende:
- Wenden Sie das gewünschte Datumsformat im normalen Dialogfeld "Zellenformat" auf eine Zelle an. Diese Zelle kann sich auf Wunsch auf einem ausgeblendeten Blatt befinden. Sie muss dem Endbenutzer nicht angezeigt werden. Angenommen, Sie haben das Format
yyyymmdd\_hhss
auf Zelle $ A $ 1 angewendet (beachten Sie, dass der Unterstrich wie gezeigt maskiert werden muss).
- Fügen Sie die
GetFormat
Funktion (siehe unten) einem VBA-Modul in Ihrer Arbeitsmappe hinzu.
- Geben Sie
=GetFormat($A$1, TRUE)
in einer anderen Zelle (zB $ B $ 1 )
- Diese Funktion gibt die lokalisierte Version der Formatzeichenfolge zurück. Also auch wenn Sie ursprünglich formatiert $ A $ 1 mit
yyyymmdd\_hhss
, wenn Sie die Arbeitsmappe auf einem Computer öffnen Sie die Französisch Sprache (zum Beispiel) verwenden, wird die Funktion zeigen aaaammjj\_hhss
.
- Verweisen Sie nun einfach auf die zweite Zelle in all Ihren
TEXT
Funktionen. Zum Beispiel: =TEXT(F22, $B$1)
.
Hier ist der VBA-Code:
Public Function GetFormat$(Cell As Range, Optional ByVal UseLocal As Boolean)
If UseLocal Then
GetFormat = Cell.NumberFormatLocal
Else
GetFormat = Cell.NumberFormat
End If
End Function
Auf diese Weise können wir die ursprünglich formatierte Zelle ($ A $ 1) "untersuchen", um die lokalisierte Formatzeichenfolge abzurufen. Diese Zeichenfolge stellt dasselbe Format dar, das Sie angewendet haben, verwendet jedoch für die Interpretation die richtigen Buchstaben für TEXT (z. B. "j" anstelle von "d"), sodass der angezeigte Wert der Datumsangaben in allen Ländereinstellungen konstant bleibt. Wenn Sie nur ein Datumsformat für Ihre gesamte Arbeitsmappe verwenden möchten, müssen Sie die Schritte 1 bis 4 nur einmal ausführen. Wiederholen Sie dann Schritt 5 (die TEXT-Funktion) in allen Zellen, in denen Sie sie aktuell verwenden. Statt jedoch ein Format fest zu codieren, verweisen Sie einfach auf die Zelle, die die lokalisierte Formatzeichenfolge enthält ( $ B $ 1 in den Beispielanweisungen). .
Beachten Sie, dass das zweite Argument GetFormat
der Funktion angibt, ob die lokalisierte Version (abhängig von den regionalen Einstellungen) oder die "Standard" -Version (die immer auf en-US basiert) zurückgegeben werden soll.
Hier sind einige Screenshots, die dies möglicherweise deutlicher machen.
- In der Abbildung sind in Spalte 1 mehrere Darstellungen eines einzelnen Datums mit unterschiedlichen Formaten aufgeführt.
- Beachten Sie, dass in den Zeilen 2 und 3 das Datumsformat "Systemstandard" von Excel verwendet wird. (Diese werden durch ein vorangestelltes Sternchen im Formatierungsdialogfeld angezeigt und geben an, dass das Standard-Datumsformat des Benutzers verwendet werden soll.) Beachten Sie außerdem, dass in Zeile 5 eine in Klammern stehende LCID verwendet wird. Es können verschiedene LCIDs verwendet werden, um andere Sprachen anzugeben.
- In der zweiten Spalte wird das Ergebnis
GetFormat(Cell, FALSE)
für jede Zelle in Spalte 1 angezeigt. (Beachten Sie, dass FALSE
für den zweiten Parameter die Funktion die nicht lokalisierten Formate zurückgibt .)
- Die dritte Spalte zeigt, was
GetFormat(Cell, TRUE)
für jede Zelle in Spalte 2 zurückgegeben wird (dh die lokalisierten Formate).
- Die vierte Spalte zeigt das Ergebnis der TEXT-Funktion unter Verwendung des ursprünglichen Rohdatenwerts und des lokalisierten Ergebnisses von
GetFormat
, um das in Spalte 1 gezeigte Format wiederherzustellen. Beachten Sie jedoch, dass auf diese Spalte KEINE Zahlenformatierung angewendet wurde. Die Werte sind ein direktes Ergebnis der TEXT-Funktion.
Die Ergebnisse für den obigen englischen (US-) Fall sind nicht sehr interessant, aber Sie können sie mit den folgenden Ergebnissen vergleichen, die durch Ändern der Ländereinstellungen meines Betriebssystems in verschiedene andere Ländereinstellungen erzielt wurden. Beachten Sie, dass wir GetFormat
in Kombination mit TEXT
ein konstantes Ergebnis für numerische Formate (die keine Tag- oder Monatsnamen enthalten) in allen Ländereinstellungen beibehalten können. Und indem wir die Sprache mithilfe einer LCID einschränken (wie in Zeile 5), können wir sogar ein konstantes Format beibehalten, wenn wir auch Tag- und Monatsnamen einbeziehen.
Diese Methode funktioniert für die meisten Gebietsschemas, es sollte jedoch beachtet werden, dass die zur Darstellung der hindu-arabischen Ziffern verwendeten Skripte NICHT in allen Gebietsschemas gleich sind. Daher führen regionale Einstellungen wie die des Gebietsschemas Nepali (Indien) zu Datumsformaten, die sich von den Datumsangaben in den USA "unterscheiden". Aber diese haben tatsächlich dasselbe "Format" in Bezug auf die Positionen der Zahlen - sie verwenden nur unterschiedliche Symbole für die Zahlen.