Excel에서 수식의 날짜 패턴에 대해 OS 지역 설정을 사용하지 못하게하는 방법


21

이 질문 에 따르면 다음과 같은 문제가 있습니다.

TEXT (A1, {date_pattern})과 같은 일부 Excel 함수 (셀 형식이 아님)를 사용하고 싶습니다.

그러나 이전 질문에 답한 사람은 Windows 지역 설정에 따라 날짜 패턴이 변경되는 것을 알았습니다.

그러나 내 OS (Windows 7)는 영어와 Office 제품군으로도 제공됩니다. 내 지역 설정을 보면 영어 표기법 (dd.MM.yyyy)을 사용하여 패턴까지 표시됩니다.

지역 및 언어

Excel에서 이러한 동작을 비활성화하는 방법이 있는지 알고 싶습니다. 독자의 지역화에 따라 Excel 시트의 동작이 변경되지 않기 때문에 항상 영어 패턴을 사용하고 지역화 된 패턴을 사용하고 싶지 않음을 의미합니다.

간단한 날짜는 "datemmdd_hhss"와 같이 일부 날짜 필드를 컴퓨터 중심의 방식으로 재 포맷하는 것입니다. "yyyymmdd_hhss"이것은 보편적으로 인식되며 쉽게 정렬 및 정리할 수 있습니다. 그러나 스위스 부분의 프랑스 부분에있는 경우 "aaaammjj_hhss"라고 작성해야하며이 Excel을 취리히의 동료에게 보내면 스위스 독일어 버전을 얻었을 때 올바른 날짜를 볼 수 없었습니다. "jjjjmmtt_hhss")

우리는 영어로 모든 창과 사무실을 설치할만큼 영리했지만 OS 지역 설정에 대한 링크 때문에 여전히 이런 문제에 직면합니다.

다른 모든 프로그램에서이 설정을 사용하고 있기 때문에 Windows 설정 변경은 옵션이 아닙니다.


4
나는 이것이 Excel에서 해결되었다고 믿을 수 없습니다. 이 동작으로 문서의 결과는 파일을 여는 컴퓨터에 전적으로 의존하므로 컴퓨터에 따라 파일 내용이 변경됩니다. 점 (.)을 사용하는 컴퓨터에서 10 진수 값으로 쉼표 (,)를 사용하여 파일을 열 때
공식적으로

답변:


26

이 질문은 조금 오래되었지만 현재까지는 대답이없는 것 같습니다. 또한 여러 사이트에서 비슷한 질문을 보았지만 기본 제공 Excel 기능과 관련된 답변을 아직 찾지 못했습니다. 그러나 VBA를 사용하면이 문제를 쉽게 해결할 수 있습니다. 필요한 기능이 매우 단순하기 때문에이를 프로그래밍하는 방법을 몰라도됩니다.

통합 문서를 연 상태에서 Alt + F11을 누르면 (VBA 편집기가 열림) 메뉴 항목 삽입 > 모듈을 클릭합니다 . 새 VBA 모듈에서 다음을 입력합니다.

Public Function FMT$(ByVal Value, ByVal strFormat)
    FMT = VBA.Format$(Value, strFormat)
End Function

이것이하는 일은 단순히 FormatExcel 기능 대신 VBA 자체 기능을 사용하는 것입니다 TEXT. 이것이 바로 당신이 원하는 것입니다.

이 새로운 함수는 지정한 형식 문자열에 따라 날짜 또는 숫자 형식을 지정합니다. 운영 체제의 국가 별 설정에 관계없이 표준 ( en-US ) 표기법을 사용하여 형식 문자열을 해석합니다 .

통합 문서에서 이것을 사용하려면 =FMT(A1, "yyyymmdd_hhss")대신 대신 입력하십시오 =TEXT(A1, "yyyymmdd_hhss"). 물론 필요에 따라 셀 참조 및 형식 문자열을 변경할 수 있습니다.

그건 그렇고, 원하는대로 함수의 이름을 지정할 수 있습니다. 나는 FMT그것이 짧고 함수가 숫자와 날짜를 모두 포맷 할 수 있기 때문에 선택했습니다 . 그러나 원하는 경우 더 설명적인 것을 선택할 수 있습니다. VBA 코드에서와 동일한 이름을 워크 시트에 사용해야합니다.

VBA 형식 문자열은 Excel의 사용자 지정 형식 문자열과 정확히 동일하지는 않지만 (예 : 분 동안 "m"대신 "n"사용) 매우 유사합니다. 봐 여기에 대한 자세한 내용은, 또는 "Format 함수 (Visual Basic 응용 프로그램에 대한)"에 대한 MSDN을 검색 할 수 있습니다. 다양한 날짜 형식 지정자를 보려면 맨 아래로 스크롤하십시오.

방법 2

VBA도 사용하지만 실제로 유지 관리가 더 쉬운 다른 방법은 다음과 같습니다.

  1. 일반 셀 형식 대화 상자를 사용하여 원하는 날짜 형식을 셀에 적용하십시오. 원하는 경우이 셀은 숨겨진 시트에있을 수 있습니다. 최종 사용자에게 표시 할 필요는 없습니다. yyyymmdd\_hhss$ A $ 1에 형식 을 적용 했다고 가정합니다 (표시된대로 밑줄을 이스케이프해야합니다).
  2. GetFormat통합 문서의 VBA 모듈에 함수 (아래 참조)를 추가하십시오 .
  3. =GetFormat($A$1, TRUE)다른 셀에 입력하십시오 (예 : $ B $ 1 )
  4. 이 함수는 현지화 된 버전의 형식 문자열 을 반환 합니다. 그래서 원래 포맷에도 불구하고 $ A $ 1 과를 yyyymmdd\_hhss당신이 (예를 들어) 프랑스의 언어를 사용하는 컴퓨터에서 통합 문서를 열 때, 함수가 표시됩니다 aaaammjj\_hhss.
  5. 이제 모든 TEXT함수 에서 두 번째 셀을 참조하십시오 . 예를 들면 다음과 같습니다 =TEXT(F22, $B$1)..

VBA 코드는 다음과 같습니다.

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

이를 통해 원래 포맷 된 셀 ($ A $ 1)을 "검사하여"현지화 된 format-string을 검색 할 수 있습니다. 해당 문자열은 적용한 형식과 동일하지만 TEXT에 올바른 문자를 해석하여 (예 : "d"대신 "j") 표시하므로 날짜의 표시된 값은 모든 로케일에서 일정합니다. 전체 통합 문서에 하나의 날짜 형식 만 사용하려는 경우 1-4 단계 만 한 번만 수행하면됩니다. 그런 다음 현재 사용중인 모든 셀에서 5 단계 (TEXT 함수)를 반복하되 포맷을 하드 코딩하는 대신 현지화 된 format-string ( 예제에서 $ B $ 1) 이 포함 된 셀을 참조하면 됩니다. .

두 번째 인수 GetFormat는 지역화 된 버전 (지역 설정에 따라 다름) 또는 "표준"버전 (항상 en-US를 기반으로 함)을 반환할지 여부를 함수 에 알려줍니다.

보다 명확한 스크린 샷이 있습니다.

en-US

  • 그림에서 열 1은 다른 형식이 적용된 단일 날짜의 여러 표현을 나열합니다.
  • 행 2와 3은 Excel의 "시스템 기본"날짜 형식을 사용합니다. (이것은 형식 대화 상자에서 별표로 표시되며 사용자의 기본 날짜 형식을 사용해야 함을 나타냅니다.) 또한 행 5는 대괄호로 묶인 LCID를 사용하여 월 및 일 이름에 사용되는 언어를 영어 ( 다른 LCID를 사용하여 다른 언어를 지정할 수 있습니다.
  • 두 번째 열은 GetFormat(Cell, FALSE)열 1의 각 셀에 대한 결과를 보여줍니다 ( FALSE두 번째 매개 변수의 경우 함수가 지역화되지 않은 형식 을 반환 함 ).
  • 세 번째 열은 GetFormat(Cell, TRUE)열 2의 각 셀에 대해 반환되는 내용을 나타냅니다 (예 : 현지화 된 형식).
  • 네 번째 열은 원래의 원시 날짜 값을 사용하여 TEXT 함수의 결과와 열 1에 표시된 형식을 재현 한 지역화 된 결과를 GetFormat보여줍니다. 그러나이 열에는 숫자 서식이 적용되지 않았습니다. 값은 TEXT 함수의 직접적인 결과입니다.

위의 영어 (미국) 사례에 대한 결과는 그리 흥미롭지 않지만 운영 체제의 국가 별 설정을 다른 여러 로케일로 변경하여 얻은 다음 결과와 비교할 수 있습니다. 중요한 참고 사용하여 GetFormat와 함께 TEXT우리가 숫자 형식에 대한 일정한 결과 모든 로케일에 걸쳐 (일 또는 월 이름을 포함하지 않는 사람들을) 유지 할 수 있습니다. LCID (5 행에서와 같이)를 사용하여 언어를 제한하면 일과 월 이름도 포함 할 때 일정한 형식을 유지할 수 있습니다.

fr-CH

nb- 아니요

ru-RU

이 방법은 대부분의 로케일에서 작동하지만 힌두-아라비아 숫자를 나타내는 데 사용되는 스크립트가 모든 로케일에서 동일하지는 않습니다. 따라서 네팔어 (인도) 로케일의 지역 설정과 같은 지역 설정은 en-US 날짜와 다르게 보이는 날짜 형식을 갖게됩니다. 그러나 이들은 실제로 숫자의 위치 측면에서 동일한 "형식"으로되어 있습니다. 숫자에 다른 기호 만 사용합니다.

네인


1
답을 주셔서 감사합니다 (늦게도)-방법 1은 나에게 가장 좋고 모든 경우에 충분히 간단합니다. 매우 좋고 완전한 답변.
рüффп

첫 번째 방법으로 2015 년 11 월 28 일을 삽입하는 방법을 설명해 주시겠습니까? 어디에서 무엇을 써야합니까 ???????
Ilan

3

날짜의 경우 실제로 Excel에서 특정 로캘을 사용하는 형식을 정의 할 수 있습니다. 날짜를 포함하는 셀의 숫자 형식을 다음과 같이 설정하면

[$-409]m/d/yy h:mm AM/PM;@

Excel은 미국 로케일로 날짜를 표시합니다 (16 진수 409)

Gotcha : YMD 표기법이 현지화되어 독일 시스템에서 JMT로 바뀝니다. 따라서 서식 문자열을 상황에 맞게 조정해야 할 수도 있지만 다른 언어를 사용하는 시스템에서 수식 (자동 번역)과 같이 작동한다고 생각합니다 (알고있는 것처럼).

자세한 내용은 여기를 참조하십시오 : https : //.com/questions/894805/excel-number-format-what-is-409

로케일 목록은 다음을 참조하십시오 . http://support.microsoft.com/kb/221435


2
그러나 그것은 내 질문에 대답하지 않습니다. OS가 "jj / mm / aaaa"를 원하더라도 Excel 시트에 dd / mm / yyyy를 쓸 수 있기를 원합니다. OS 로캘을 변경하려고 시도했지만 출력이 변경되면 Excel이 사용자의 로캘에 따라 적응하지 않습니다. "jj.mm.aaaa"(프랑스어)를 쓰고 로케일을 미국으로 변경하면 Excel에 "jj.03.aaaa"가 표시됩니다.
рüффп

3

이 질문이 조금 오래되었지만 다른 (간단한!) 해결책을 발견하고 완전성 / 참조를 위해 여기에 게시하고 있습니다.

  • ricovox의 답변을 성공적으로 시도했지만 VBA가없는 솔루션을 원했습니다.

  • MarinD의 솔루션도 테스트했습니다. 그러나 의견에서 지적했듯이 둘 이상의 국가 별 형식을 제공 해야하는 경우 다루기가 어려울 수 있습니다.

  • 그리고 이제 내 해결책 : Excel의 기본 YEAR (), MONTH () 및 DATE () 함수를 사용하여 TEXT ()로 감싸서 앞에 0을 채 웁니다. A1의 날짜와 함께 :

    =TEXT(YEAR(A1),"0000")&"-"&TEXT(MONTH(A1),"00")&"-"&TEXT(DAY(A1),"00")

    나에게의 날짜주는 YYYY-MM-DD현재의 로케일이 필요에 상관없이 경우, 형식 YYYY-MM-DD또는 AAAA-MM-JJ년 / 월 / 일 또는 다른 지역화 된 이름.

    Excel은 기본 수식을 자동으로 번역합니다.


1

전체 혼란을 피하는 매우 간단한 방법은 알려진 날짜의 날짜 목록을 작성하고 함수에서 목록을 사용하는 것입니다.


4
예를 포함하여 답변을 확장 할 수 있습니까?
Burgi

1

Excel 로캘 날짜 형식 문제를 해결하는 간단한 방법은 다음 CHOOSE함수 를 사용하는 것입니다.

CHOOSE(WEEKDAY(TODAY());"Dimanche";"Lundi";"Mardi";"Mercredi";"Jeudi";"Vendredi";"Samedi")

CHOOSE(MONTH(TODAY());"Janvier";"Fevrier";"Mars";"Avril";"Mai";"Juin";"Juillet";"Août";"Septembre";"Octobre";"Novembre";"Décembre")

이 예에서는 "Mmmm"또는 "Dddd"또는 "Jjjj"와 같은 로케일 형식을 사용하지 않고 요일과 월을 문자로 표시합니다.


한 언어 (프랑스어)를 관리하는 한 간단하지만 여러 언어를 관리해야하는 경우 수식이 너무 커집니다.
рüффп

나는 하나의 언어 만 관리합니다. CHOOSE를 사용하는 요점은 다른 로케일 버전의 Excel에서 작동하는 하나의 언어 Excel 시트를 정확하게 생성하는 것입니다.
Alexis PERROTTEY

Excel TEXT 기능의 큰 실패는 날짜 형식이 국가 별 설정의 현재 Windows 로캘에 따라 달라진다는 것입니다. 예 = = TEXT (TODAY (); "YYYY-MM-DD") 미국의 경우 = TEXT (TODAY (); "AAAA-MM-JJ") FR의 경우 TEXT를 사용하여 범용 Excel 시트를 만들 수 없습니다. 대신 CHOOSE를 사용하십시오.
Alexis PERROTTEY

결국, 하드 코딩 된 값을 가진 다른 기능을 가진 솔루션은 실제로 날짜 패턴을 하드 코딩하는 것 이상을 지원하지 않습니다. 개인적으로 나는 VBA와 받아 들여진 대답을 가지고 갈 것입니다. 어쨌든 경험을 공유해 주셔서 감사합니다.
рüффп

1

참조 날짜가 A1 셀에있는 경우 :

=IF(RIGHT(TEXT(A1;"dd-mm-yyyy");1)="y";TEXT(A1;"jj-mm-aaaa");TEXT(A1;"dd-mm-yyyy"))

추가 형식을 하나만 관리해야하는 경우에는 좋은 해결 방법입니다. 어쨌든 취리히 또는 영어 나 프랑스어가 아닌 다른 국가의 동료가 여전히 작동하지 않습니다. if(if(if...전 세계의 모든 단일 형식 을 만들어야한다면 관리하기가 매우 어려울 것입니다.
рüффп

맞습니다. 그러나 VBA 매크로를 거치지 않으면 더 나은 것을 찾을 수 없었습니다. Microsoft가 함수와 해당 속성을 번역하는 이유를 이해하지 못합니다 (여기에서 문제와 같이 다른 언어로 열 때 자동으로 번역하지 않기 때문에 더 나쁩니다). 프로그래밍 언어는 없었습니다. 영어만으로 충분했을 것입니다
MarinD

0

이제 매크로와 함께 제공된 방법 2와 유사한 논리를 사용했습니다. 매크로는 작동하지만 일반적으로 한 조직에서 다른 조직으로 파일을 보내면 매크로가 교환을 통해 파일을 만들지 않거나 바이러스 백신이 실행되지 않습니다. 그래서 나는 단순히 ia cell의 이름을 dateformat으로 바꿨습니다. 이 셀에서 나는 단순히 텍스트 dd / mm / yyyy를 입력했습니다. 따라서 텍스트 함수를 사용할 때 예를 들어 = text (C1, dateformat) 형식의 셀 이름을 사용하고 있으며 작동하는 것 같습니다 (스위스의 경우 정확한 작동).

건배...

ㅏ.


1
스위스에서 작동한다고 말하지만“프랑스어 (스위스)”,“독일어 (스위스)”입니까 아니면 영어입니까? 영어라면이 토론에 실제로 도움이되지 않습니다. 영어가 아닌 경우 왜 =TEXT(C1,dateformat)작동 하지 않을 때 ( dateformat셀을 포함하는 dd/mm/yyyy) 작동 하는지 설명 할 수 =TEXT(C1, "dd/mm/yyyy")있습니까? (또는 작동합니까?)
G-Man, 'Reinstate

0

아무도 명명 된 형식을 솔루션으로 제공하지 않았다고 믿을 수 없습니다.

날짜를 형식화하고 입력 =TEXT(A1,"Short Date")하면 지역 간 문제가없는 지역 설정에 따라 자동으로 올바른 형식을 사용합니다.

"Long Date"는 허용 가능한 항목이며 여러 지역에서 원활하게 작동합니다. 또한 사용 된 버전에 관계없이 cvdate를 사용하여 VBA에서 올바른 날짜로 다시 변환합니다.  


Excel 2016에서는 지정된 지역 형식을 유지합니다. 다른 지역 형식과 날짜를 비교하려고하면 비교에 실패합니다. 이것은 나쁘다 아마 버그 일 것이다.
스쿠버 스티브

0

그냥 다른 이럴 우아한 대안 떨어지는 촬영 : @Taosique에 의해 유래 답변

=IF(TEXT(1,"mmmm")="January",[some logic for English system],[some logic for non-English system])

작동하지 않을 수 있습니다. 모든 언어를 모르지만 월의 단어가 일부 언어에서 "m"으로 시작하지 않는 한 전혀 작동하지 않습니다 ( #VALUE오류 렌더링 ). 단어가 "m"으로 시작하더라도 여기에는 두 가지 이상의 옵션이 있습니다. 독일, 폴란드, 헝가리는 각각 서로 다른 형식 코드를 가지고 있습니다.
Ister

필자는 개발자가 자신이 개발하고있는 언어 설정 (예 : 영어 시스템)을 알고 있고 공식을 번역하려는 언어를 알고 있다고 가정합니다. 관심있는 언어에 대해 IF를 확장하는 데 큰 도움이되지 않아야합니다.
GWD

글쎄, 나는 이미 모든 언어에 동시에 적응해야했기 때문에 특정 국가를 나열했습니다. 내장 IF의 한계도 있지만, 회피하기도 쉽습니다. 나는 아이디어가 일반적으로 좋고 VBA가 필요하지 않다는 데 동의합니다.
Ister

0

나는 파티에 늦었지만 알고있다. 그러나 나 자신을 들여다 보면서 나는 해결책을 찾았다. VBA가 필요없는 ExcelBanter .

가는 방법은 이전 Excel v4 매크로 시스템을 사용하는 것입니다. 명명 된 범위 또는 v4 매크로 시트를 통해 계속 액세스 할 수 있습니다. 그것은 나에게도 학습 경험이었습니다. 그리드에서 벗어난 Excel 페이지 와 Ron de Bruin 사이트의 페이지 는 멋진 소개였습니다. 후자는 또한 동일한 솔루션을 가진 통합 문서에 대한 링크가 있습니다.

기본적으로 이전 Excel v4 매크로 함수 GET.WORKSPACE는 사용중인 현지화 된 날짜 형식을 포함하여 많은 정보에 대한 메타 정보를 가져 오는 데 사용할 수 있습니다. GET.WORKSPACE (37)는 모든 종류의 구분 기호 등에 사용되는 모든 문자의 배열을 반환합니다. 인덱스 19-20-21은 연도, 월 및 일 형식에 사용 된 문자를 보유합니다. 따라서 INDEX (GET.WORKSPACE (37), 19)를 사용하면 영어 설정에서는 "y", 네덜란드어에서는 "j", 스페인어에서는 "a"를 반환합니다. 이것을 REPT와 결합하여 4 문자 코드를 생성하면 완료됩니다. 문제는 GET.WORKSPACE와 같은 이전 v4 함수는 v4 스타일 매크로 시트와 명명 된 범위에서만 사용할 수 있다는 것입니다.

그러므로:

  • 명명 된 범위를 만들고 이름을 "MonthFormat"으로 지정하십시오.
  • 공식을 줘 =REPT(INDEX(GET.WORKSPACE(37),19),4)
  • 텍스트 수식 에서이 MonthFormat 이름을 사용하여 형식을 지정하십시오. =TEXT(A1, MonthFormat)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.