Nach dieser Frage habe ich folgendes Problem:
Ich möchte eine Excel-Funktion (nicht die Zellformatierung) wie TEXT (A1, {date_pattern}) verwenden
Die Person, die meine vorherige Frage beantwortet hat, hat jedoch festgestellt, dass sich das Datumsmuster gemäß den regionalen Windows-Einstellungen ändert.
Mein Betriebssystem (Windows 7) ist jedoch in Englisch und die Office-Suite auch. In meinen Ländereinstellungen wird sogar ein Muster in englischer Notation angezeigt (TT.MM.JJJJ).
Ich möchte wissen, ob es eine Möglichkeit gibt, ein solches Verhalten in Excel zu deaktivieren. Dies bedeutet, dass ich immer die englischen und niemals die lokalisierten Muster verwenden möchte, da sich das Verhalten meiner Excel-Tabelle nicht entsprechend der Lokalisierung des Readers ändern soll.
Ein einfacher Fall wäre die Neuformatierung eines Datumsfelds auf eine rechnerzentrierte Weise wie folgt: "yyyymmdd_hhss" Dies wird allgemein anerkannt und kann leicht nach oben und unten sortiert werden. Da ich mich aber im französischen Teil der Schweiz befinde, sollte ich "aaaammjj_hhss" schreiben und wenn ich dieses Excel an einen Kollegen in Zürich sende, kann er das richtige Datum nicht sehen, da er die schweizerdeutsche Lokalisierung hat (sein Excel würde es erwarten) "jjjjmmtt_hhss")
Wir waren schlau genug, um alle Windows- und Office-Programme auf Englisch zu installieren, aber wir haben immer noch Probleme, weil diese Verbindung zu den regionalen Einstellungen des Betriebssystems besteht.
Für mich ist das Ändern der Windows-Einstellungen keine Option, da alle anderen Programme diese Einstellungen verwenden.
Antworten:
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:
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:
yyyymmdd\_hhss
auf Zelle $ A $ 1 angewendet (beachten Sie, dass der Unterstrich wie gezeigt maskiert werden muss).GetFormat
Funktion (siehe unten) einem VBA-Modul in Ihrer Arbeitsmappe hinzu.=GetFormat($A$1, TRUE)
in einer anderen Zelle (zB $ B $ 1 )yyyymmdd\_hhss
, wenn Sie die Arbeitsmappe auf einem Computer öffnen Sie die Französisch Sprache (zum Beispiel) verwenden, wird die Funktion zeigenaaaammjj\_hhss
.TEXT
Funktionen. Zum Beispiel:=TEXT(F22, $B$1)
.Hier ist der VBA-Code:
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.
GetFormat(Cell, FALSE)
für jede Zelle in Spalte 1 angezeigt. (Beachten Sie, dassFALSE
für den zweiten Parameter die Funktion die nicht lokalisierten Formate zurückgibt .)GetFormat(Cell, TRUE)
für jede Zelle in Spalte 2 zurückgegeben wird (dh die lokalisierten Formate).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 mitTEXT
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.
quelle
Für Datumsangaben können Sie tatsächlich ein Format definieren, bei dem Excel ein bestimmtes Gebietsschema verwendet. Wenn Sie das Zahlenformat der Zelle, in der sich Ihr Datum befindet, auf so etwas wie einstellen
Excel zeigt Ihr Datum in einem US-Gebietsschema an (hex 409)
Gotcha: Die YMD-Notation ist lokalisiert und wendet sich daher beispielsweise auf einem deutschen System an JMT. Sie müssen möglicherweise den Format-String an Ihre Situation anpassen, aber ich würde erwarten, dass er sich wie die Formeln (Autotranslate) auf Systemen verhält, die eine andere Sprache verwenden (wie Sie anscheinend wissen).
Weitere Informationen finden Sie hier: /programming/894805/excel-number-format-what-is-409
Eine Liste der Ländereinstellungen finden Sie hier: http://support.microsoft.com/kb/221435
quelle
Obwohl diese Frage etwas alt ist, bin ich auf eine andere (einfache!) Lösung gestoßen und poste hier der Vollständigkeit halber.
Ich habe die Antwort von Ricovox erfolgreich versucht, wollte aber eine Lösung ohne VBA.
Getestete MarinD-Lösung. Wie in den Kommentaren erwähnt, kann es jedoch recht schnell unhandlich werden, wenn Sie mehr als ein länderspezifisches Format berücksichtigen müssen.
Und nun zu meiner Lösung: Verwenden der nativen Excel-Funktionen YEAR (), MONTH () und DATE (), die in TEXT () eingeschlossen sind, um die vorangestellten Nullen aufzufüllen. Mit dem Datum in A1:
=TEXT(YEAR(A1),"0000")&"-"&TEXT(MONTH(A1),"00")&"-"&TEXT(DAY(A1),"00")
gibt mir das Datum im
YYYY-MM-DD
Format, unabhängig davon , ob das aktuelle Gebietsschema erfordertYYYY-MM-DD
oderAAAA-MM-JJ
für Jahr / Monat / Tag oder andere lokalisierten Namen.Excel übersetzt seine nativen Formeln automatisch.
quelle
Eine sehr einfache Möglichkeit, das ganze Durcheinander zu vermeiden, besteht darin, eine Liste von Tagen mit bekannten Daten zu erstellen und diese Liste in Ihrer Funktion zu verwenden.
quelle
Eine einfache Möglichkeit, das Problem mit dem Datumsformat des Excel-Gebietsschemas zu lösen, ist die Verwendung der folgenden
CHOOSE
Funktion:In diesen Beispielen werden Tag und Monat in Buchstaben ohne Verwendung von Gebietsschemaformaten wie "Mmmm" oder "Dddd" oder "Jjjj" angezeigt.
quelle
Wenn sich Ihr Bezugsdatum in Zelle A1 befindet:
quelle
if(if(if...
für jedes einzelne Format auf der ganzen Welt erstellen müssen, ist die Verwaltung sehr schwierig.Ich habe jetzt eine ähnliche Logik wie die Methode 2 verwendet, die mit den Makros angegeben wurde. Die Makros funktionieren, aber normalerweise schaffen es die Makros nicht, wenn Sie eine Datei von einer Organisation an eine andere senden, oder das Antivirus lässt sie nicht laufen. Also habe ich ia cell einfach in dateformat umbenannt. In diese Zelle habe ich einfach den Text TT / MM / JJJJ eingegeben. Wenn ich die Textfunktion verwende, verwende ich den Zellnamen für das Format, zB = Text (C1, Datumsformat) und es scheint zu funktionieren (genau für die Schweiz funktioniert es).
Prost...
EIN.
quelle
=TEXT(C1,dateformat)
(mit derdateformat
Zelle enthaltenddd/mm/yyyy
)=TEXT(C1, "dd/mm/yyyy")
funktionieren würde , wenn nicht funktioniert? (Oder funktioniert es?)Ich kann nicht glauben, dass niemand die genannten Formate als Lösung angeboten hat.
Wenn Sie ein Datum formatieren und eingeben
=TEXT(A1,"Short Date")
, wird automatisch das richtige Format basierend auf der regionalen Einstellung verwendet, wobei zwischen den Regionen keine Probleme auftreten."Long Date" ist auch ein akzeptabler Eintrag und funktioniert nahtlos in allen Regionen. Es wird auch unabhängig von der verwendeten Version mit cvdate wieder in ein geeignetes Datum in VBA konvertiert.
quelle
Lassen Sie sich einfach eine andere imho elegante Alternative entlocken : Stackoverflow answer by @Taosique
quelle
#VALUE
Fehlers). Auch wenn das Wort mit "m" beginnt, gibt es hier mehr als nur zwei Möglichkeiten. Deutschland, Polen und Ungarn haben jeweils unterschiedliche Formatierungscodes, um nur einige zu nennen.Ich weiß, spät zur Party, aber als ich das selbst untersuchte, fand ich gerade eine funktionierende Lösung in ExcelBanter, die kein VBA benötigt.
Der Weg ist, das alte Excel v4-Makrosystem zu verwenden. Sie können weiterhin über benannte Bereiche oder v4-Makroblätter darauf zugreifen. Es war auch für mich eine Lernerfahrung; Eine Excel- Seite und eine Seite auf Ron de Bruins Website waren nette Einführungen. Letzteres enthält auch einen Link zu einer Arbeitsmappe mit derselben Lösung.
Grundsätzlich kann die alte Excel v4-Makrofunktion GET.WORKSPACE verwendet werden, um Metainformationen zu vielen Dingen abzurufen, einschließlich des verwendeten lokalisierten Datumsformats. GET.WORKSPACE (37) gibt ein Array aller Zeichen zurück, die für alle Arten von Trennzeichen usw. verwendet werden, wobei der Index 19-20-21 den Buchstaben enthält, der für die Formatierung von Jahr, Monat und Tag verwendet wird. Wenn Sie also INDEX (GET.WORKSPACE (37), 19) verwenden, werden bei den Spracheinstellungen für Englisch "y", für Niederländisch "j" und für Spanisch "a" zurückgegeben. Kombinieren Sie das mit einem REPT, um den 4-Buchstaben-Code zu generieren und fertig. Das Problem ist jedoch, dass die alten v4-Funktionen (wie GET.WORKSPACE) nur von v4-Makroblättern und benannten Bereichen verwendet werden können.
Somit:
=REPT(INDEX(GET.WORKSPACE(37),19),4)
=TEXT(A1, MonthFormat)
quelle