Zgodnie z tym pytaniem mam następujący problem:
Chcę użyć funkcji programu Excel (nie formatowania komórki), np. TEKST (A1, {date_pattern})
Ale osoba, która odpowiedziała na moje poprzednie pytanie, sprawiła, że wzorzec daty zmienia się zgodnie z regionalnymi ustawieniami systemu Windows.
Jednak mój system operacyjny (Windows 7) jest również w języku angielskim i pakietem Office. Przeglądając moje ustawienia regionalne, pokazuje nawet wzór przy użyciu notacji angielskiej (dd.MM.rrrr)
Chcę wiedzieć, czy jest jakiś sposób na wyłączenie takiego zachowania z Excela, co oznacza, że zawsze chcę używać wzorców angielskich, a nigdy zlokalizowanych, ponieważ nie chcę, aby zachowanie mojego arkusza Excela zmieniało się zgodnie z lokalizacją czytnika.
Prostym przypadkiem byłoby przeformatowanie pewnego pola daty na sposób skoncentrowany na komputerze, taki jak: „yyyymmdd_hhss”. Jest to rozpoznawane uniwersalnie i można je łatwo sortować w górę iw dół. Ale ponieważ jestem we francuskiej części Szwajcarii, powinienem napisać „aaaammjj_hhss”, a jeśli wyślę ten Excel do kolegi w Zurychu, nie będzie on w stanie zobaczyć właściwej daty, ponieważ uzyskał lokalizację w Szwajcarii i Niemczech (jego Excel oczekiwałby „jjjjmmtt_hhss”)
Byliśmy wystarczająco sprytni, aby zainstalować wszystkie okna i biuro w języku angielskim, ale nadal mamy do czynienia z takim problemem, ponieważ ten link do regionalnych ustawień systemu operacyjnego.
Dla mnie zmiana Ustawień systemu Windows nie jest opcją, ponieważ wszystkie inne programy używają tych ustawień.
Odpowiedzi:
To pytanie jest trochę stare, ale do tej pory nie wydaje się, aby miało na nie odpowiedź. Widziałem również podobne pytania na wielu stronach, ale nie znalazłem jeszcze żadnej odpowiedzi, która dotyczyłaby tylko wbudowanych funkcji Excela. Jednak rozwiązanie VBA jest dość łatwe. Nie musisz nawet wiedzieć, jak programować, aby to zrobić, ponieważ wymagana funkcja jest tak prosta.
Po otwarciu skoroszytu po prostu naciśnij klawisze Alt + F11 (aby otworzyć edytor VBA). Następnie kliknij pozycję menu Wstaw > Moduł W nowym module VBA wprowadź następujące dane:
To po prostu używa własnej
Format
funkcji VBA zamiast funkcji ExcelaTEXT
. To jest dokładnie to, czego chcesz.Ta nowa funkcja sformatuje dowolną datę (lub liczbę) zgodnie z podanym ciągiem formatu. Zinterpretuje ciąg formatu przy użyciu standardowej notacji ( en-US ), niezależnie od regionalnych ustawień systemu operacyjnego.
Aby użyć tego w skoroszycie, po prostu wpisz
=FMT(A1, "yyyymmdd_hhss")
zamiast=TEXT(A1, "yyyymmdd_hhss")
. (Oczywiście możesz w razie potrzeby zmienić odwołanie do komórki i formatować ciąg.)Nawiasem mówiąc, możesz nazwać funkcję, jak chcesz. Wybrałem,
FMT
ponieważ był krótki i ponieważ funkcja może formatować zarówno liczby, jak i daty. Ale jeśli chcesz, możesz wybrać coś bardziej opisowego. Pamiętaj tylko, aby użyć w arkuszu tej samej nazwy, co w kodzie VBA.Zauważ, że ciągi formatu VBA nie są dokładnie takie same jak ciągi formatu niestandardowego Excela (na przykład używaj „n” zamiast „m” dla minut), ale są one bardzo podobne. Poszukaj tutaj szczegółów lub wyszukaj w MSDN „Format Function (Visual Basic for Applications)”. Przewiń w dół, aby wyświetlić różne specyfikatory formatu daty.
Metoda 2
Innym podejściem, które również wykorzystuje VBA, ale może być łatwiejsze w utrzymaniu, jest:
yyyymmdd\_hhss
do komórki $ A $ 1 (zwróć uwagę, że znak podkreślenia musi być poprzedzony znakiem jak pokazano).GetFormat
funkcję (pokazaną poniżej) do modułu VBA w swoim skoroszycie.=GetFormat($A$1, TRUE)
do innej komórki (np. $ B $ 1 )yyyymmdd\_hhss
po otwarciu skoroszytu na komputerze przy użyciu języka francuskiego (na przykład), funkcja pokażeaaaammjj\_hhss
.TEXT
funkcjach. Na przykład:=TEXT(F22, $B$1)
.Oto kod VBA:
Dzięki temu możemy „sprawdzić” pierwotnie sformatowaną komórkę (1 A $ 1 USD) w celu pobrania zlokalizowanego ciągu formatu. Ten ciąg będzie reprezentował ten sam format, który zastosowałeś, ale użyje poprawnych liter do interpretacji TEKSTU (na przykład „j” zamiast „d”), więc wyświetlana wartość dat będzie stała we wszystkich lokalizacjach. Jeśli chcesz używać tylko jednego formatu daty dla całego skoroszytu, musisz wykonać kroki 1-4 tylko raz. Następnie powtórz krok 5 (funkcja TEKST) we wszystkich komórkach, w których go obecnie używasz, ale zamiast na stałe kodować format, po prostu odwołaj się do komórki zawierającej zlokalizowany ciąg formatu ( $ B $ 1 w przykładowych instrukcjach) .
Zauważ, że drugi argument
GetFormat
mówi funkcji, czy zwrócić zlokalizowaną wersję (która zależy od ustawień regionalnych) czy wersję „standardową” (która zawsze opiera się na en-US).Oto kilka zrzutów ekranu, które mogą to wyjaśnić.
GetFormat(Cell, FALSE)
dla każdej komórki w kolumnie 1. (Przypomnij, żeFALSE
dla drugiego parametru powoduje, że funkcja zwraca formaty nie zlokalizowane ).GetFormat(Cell, TRUE)
zwraca każda komórka w kolumnie 2. (tj. Zlokalizowane formaty).GetFormat
ponownego odtworzenia formatu pokazanego w kolumnie 1. Zwróć jednak uwagę, że w tej kolumnie nie zastosowano formatowania liczbowego. Wartości są bezpośrednim wynikiem funkcji TEKST.Wyniki powyższego przypadku w języku angielskim (USA) nie są bardzo interesujące, ale można je porównać z następującymi wynikami uzyskanymi przez zmianę ustawień regionalnych mojego systemu operacyjnego na różne inne ustawienia regionalne. Co ważne, pamiętaj, że używając
GetFormat
w połączeniu z,TEXT
jesteśmy w stanie zachować stały wynik dla formatów numerycznych (tych, które nie zawierają nazw dni lub miesięcy) we wszystkich lokalizacjach. A ograniczając język za pomocą LCID (jak w wierszu 5), możemy nawet zachować stały format, uwzględniając również nazwy dni i miesięcy.Ta metoda działa w przypadku większości ustawień narodowych, należy jednak zauważyć, że skrypty używane do reprezentowania liczb hindusko-arabskich NIE są takie same we wszystkich lokalizacjach. Dlatego ustawienia regionalne, takie jak ustawienia nepalskie (Indie), spowodują, że formaty daty będą wyglądały inaczej niż daty w USA. Ale w rzeczywistości są one w tym samym „formacie” pod względem pozycji liczb - po prostu używają różnych symboli dla liczb.
źródło
W przypadku dat można faktycznie zdefiniować format, w którym program Excel używa określonych ustawień regionalnych. Jeśli ustawisz format liczbowy komórki zawierającej twoją datę na coś podobnego
Excel wyświetli twoją datę w ustawieniach regionalnych w USA (hex 409)
Gotcha: Notacja YMD jest zlokalizowana i dlatego na przykład zwraca się do JMT w systemie niemieckim. Być może będziesz musiał dostosować ciąg formatu do swojej sytuacji, ale spodziewam się, że będzie on zachowywał się jak formuły (autotranslate) w systemach używających innego języka (jak się wydaje).
Zobacz tutaj więcej szczegółów: /programming/894805/excel-number-format-what-is-409
i tutaj, aby uzyskać listę ustawień regionalnych: http://support.microsoft.com/kb/221435
źródło
Chociaż to pytanie jest nieco stare, natknąłem się na inne (proste!) Rozwiązanie i piszę tutaj w celu uzupełnienia / odniesienia.
Z powodzeniem wypróbowałem odpowiedź ricovox, ale szukałem rozwiązania bez VBA.
Przetestowałem również rozwiązanie MarinD. Ale, jak wskazano w komentarzach, jeśli musisz zadbać o więcej niż jeden format specyficzny dla kraju, może stać się niewygodny dość szybko.
A teraz moje rozwiązanie: za pomocą natywnych funkcji Excela ROK (), MIESIĄC () i DATA (), zawinięte w TEKST (), aby wstawić zera na początku. Z datą w A1:
=TEXT(YEAR(A1),"0000")&"-"&TEXT(MONTH(A1),"00")&"-"&TEXT(DAY(A1),"00")
podaje mi datę w
YYYY-MM-DD
formacie, niezależnie od tego, czy wymagają tego obecne ustawienia regionalne,YYYY-MM-DD
czyAAAA-MM-JJ
też inne zlokalizowane nazwy na rok / miesiąc / datę.Excel automatycznie tłumaczy swoje natywne formuły.
źródło
Bardzo prostym sposobem na uniknięcie całego bałaganu jest utworzenie listy dni znanych dat i użycie jej w swojej funkcji.
źródło
Prostym sposobem rozwiązania problemu formatu daty regionalnej Excel jest użycie
CHOOSE
funkcji:W tych przykładach otrzymasz Dzień i Miesiąc w literach bez użycia formatów regionalnych, takich jak „Mmmm”, „Dddd” lub „Jjjj”.
źródło
Jeśli data odniesienia znajduje się w komórce A1:
źródło
if(if(if...
każdy format na całym świecie, zarządzanie nim byłoby bardzo trudne.Użyłem teraz logiki podobnej do metody 2 podanej w makrach. Makra działają, ale zwykle, gdy wysyłasz plik z jednej organizacji do drugiej, makra nie przechodzą przez wymianę lub program antywirusowy nie pozwala na ich uruchomienie. Po prostu zmieniłem nazwę komórki ia na dateformat. W tej komórce po prostu wpisałem tekst dd / mm / rrrr. Więc kiedy używam funkcji tekstowej, używam nazwy komórki dla formatu np. = Tekst (C1, dateformat) i wydaje się, że działa (dokładnie w Szwajcarii działa).
Twoje zdrowie...
ZA.
źródło
=TEXT(C1,dateformat)
miałby działać (zdateformat
komórką zawierającądd/mm/yyyy
), kiedy=TEXT(C1, "dd/mm/yyyy")
nie działa? (Czy to działa?)Nie mogę uwierzyć, że nikt nie zaproponował nazwanych formatów jako rozwiązania.
Jeśli sformatujesz datę i
=TEXT(A1,"Short Date")
ją wprowadzisz , automatycznie użyje odpowiedniego formatu w oparciu o ustawienie regionalne, przy zerowych problemach między regionami.„Długa data” jest również dopuszczalnym hasłem i będzie działać płynnie w różnych regionach. Konwertuje również z powrotem na właściwą datę w VBA z cvdate, niezależnie od używanej wersji.
źródło
Wystarczy dodać kolejną elegancką alternatywę imho zaczerpniętą z: Odpowiedź Stackoverflow autorstwa @Taosique
źródło
#VALUE
błędu). Nawet jeśli słowo zaczyna się od „m”, są tutaj więcej niż tylko 2 opcje. Niemcy, Polska i Węgry mają różne kody formatowania, aby wymienić tylko kilka.Wiem, późno na imprezę, ale patrząc na to sam, właśnie znalazłem działające rozwiązanie na ExcelBanter, które nie wymaga VBA.
Najlepszym sposobem jest użycie starego systemu makr Excel v4. Nadal można uzyskać do niego dostęp za pośrednictwem nazwanych zakresów lub arkuszy makr v4. To było również dla mnie doświadczenie edukacyjne; strona w Excelu poza tabelą i jedna na stronie Rona de Bruina były miłymi wprowadzeniami. Ten ostatni zawiera również link do skoroszytu z tym samym rozwiązaniem.
Zasadniczo stara funkcja makr programu Excel v4 GET.WORKSPACE może być używana do uzyskiwania meta informacji o wielu rzeczach, w tym o używanym zlokalizowanym formacie daty. GET.WORKSPACE (37) zwraca tablicę wszystkich znaków używanych dla wszelkiego rodzaju separatorów itp., Gdzie indeks 19-20-21 zawiera literę używaną do formatowania roku, miesiąca i dnia. Tak więc użycie INDEKSU (GET.WORKSPACE (37), 19) zwraca „y” w ustawieniach języka angielskiego, „j” w języku niderlandzkim i „a” w języku hiszpańskim. Połącz to z REPT, aby wygenerować 4-literowy kod i gotowe. Problem w tym, że stare funkcje v4 (takie jak GET.WORKSPACE) mogą być używane tylko przez arkusze makr w stylu v4 i nazwane zakresy.
A zatem:
=REPT(INDEX(GET.WORKSPACE(37),19),4)
=TEXT(A1, MonthFormat)
źródło