이 질문은 조금 오래되었지만 현재까지는 대답이없는 것 같습니다. 또한 여러 사이트에서 비슷한 질문을 보았지만 기본 제공 Excel 기능과 관련된 답변을 아직 찾지 못했습니다. 그러나 VBA를 사용하면이 문제를 쉽게 해결할 수 있습니다. 필요한 기능이 매우 단순하기 때문에이를 프로그래밍하는 방법을 몰라도됩니다.
통합 문서를 연 상태에서 Alt + F11을 누르면 (VBA 편집기가 열림) 메뉴 항목 삽입 > 모듈을 클릭합니다
. 새 VBA 모듈에서 다음을 입력합니다.
Public Function FMT$(ByVal Value, ByVal strFormat)
FMT = VBA.Format$(Value, strFormat)
End Function
이것이하는 일은 단순히 Format
Excel 기능 대신 VBA 자체 기능을 사용하는 것입니다 TEXT
. 이것이 바로 당신이 원하는 것입니다.
이 새로운 함수는 지정한 형식 문자열에 따라 날짜 또는 숫자 형식을 지정합니다. 운영 체제의 국가 별 설정에 관계없이 표준 ( en-US ) 표기법을 사용하여 형식 문자열을 해석합니다 .
통합 문서에서 이것을 사용하려면 =FMT(A1, "yyyymmdd_hhss")
대신 대신 입력하십시오 =TEXT(A1, "yyyymmdd_hhss")
. 물론 필요에 따라 셀 참조 및 형식 문자열을 변경할 수 있습니다.
그건 그렇고, 원하는대로 함수의 이름을 지정할 수 있습니다. 나는 FMT
그것이 짧고 함수가 숫자와 날짜를 모두 포맷 할 수 있기 때문에 선택했습니다 . 그러나 원하는 경우 더 설명적인 것을 선택할 수 있습니다. VBA 코드에서와 동일한 이름을 워크 시트에 사용해야합니다.
VBA 형식 문자열은 Excel의 사용자 지정 형식 문자열과 정확히 동일하지는 않지만 (예 : 분 동안 "m"대신 "n"사용) 매우 유사합니다. 봐 여기에 대한 자세한 내용은, 또는 "Format 함수 (Visual Basic 응용 프로그램에 대한)"에 대한 MSDN을 검색 할 수 있습니다. 다양한 날짜 형식 지정자를 보려면 맨 아래로 스크롤하십시오.
방법 2
VBA도 사용하지만 실제로 유지 관리가 더 쉬운 다른 방법은 다음과 같습니다.
- 일반 셀 형식 대화 상자를 사용하여 원하는 날짜 형식을 셀에 적용하십시오. 원하는 경우이 셀은 숨겨진 시트에있을 수 있습니다. 최종 사용자에게 표시 할 필요는 없습니다.
yyyymmdd\_hhss
셀 $ A $ 1에 형식 을 적용 했다고 가정합니다 (표시된대로 밑줄을 이스케이프해야합니다).
GetFormat
통합 문서의 VBA 모듈에 함수 (아래 참조)를 추가하십시오 .
=GetFormat($A$1, TRUE)
다른 셀에 입력하십시오 (예 : $ B $ 1 )
- 이 함수는 현지화 된 버전의 형식 문자열 을 반환 합니다. 그래서 원래 포맷에도 불구하고 $ A $ 1 과를
yyyymmdd\_hhss
당신이 (예를 들어) 프랑스의 언어를 사용하는 컴퓨터에서 통합 문서를 열 때, 함수가 표시됩니다 aaaammjj\_hhss
.
- 이제 모든
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를 기반으로 함)을 반환할지 여부를 함수 에 알려줍니다.
보다 명확한 스크린 샷이 있습니다.
- 그림에서 열 1은 다른 형식이 적용된 단일 날짜의 여러 표현을 나열합니다.
- 행 2와 3은 Excel의 "시스템 기본"날짜 형식을 사용합니다. (이것은 형식 대화 상자에서 별표로 표시되며 사용자의 기본 날짜 형식을 사용해야 함을 나타냅니다.) 또한 행 5는 대괄호로 묶인 LCID를 사용하여 월 및 일 이름에 사용되는 언어를 영어 ( 다른 LCID를 사용하여 다른 언어를 지정할 수 있습니다.
- 두 번째 열은
GetFormat(Cell, FALSE)
열 1의 각 셀에 대한 결과를 보여줍니다 ( FALSE
두 번째 매개 변수의 경우 함수가 지역화되지 않은 형식 을 반환 함 ).
- 세 번째 열은
GetFormat(Cell, TRUE)
열 2의 각 셀에 대해 반환되는 내용을 나타냅니다 (예 : 현지화 된 형식).
- 네 번째 열은 원래의 원시 날짜 값을 사용하여 TEXT 함수의 결과와 열 1에 표시된 형식을 재현 한 지역화 된 결과를
GetFormat
보여줍니다. 그러나이 열에는 숫자 서식이 적용되지 않았습니다. 값은 TEXT 함수의 직접적인 결과입니다.
위의 영어 (미국) 사례에 대한 결과는 그리 흥미롭지 않지만 운영 체제의 국가 별 설정을 다른 여러 로케일로 변경하여 얻은 다음 결과와 비교할 수 있습니다. 중요한 참고 사용하여 GetFormat
와 함께 TEXT
우리가 숫자 형식에 대한 일정한 결과 모든 로케일에 걸쳐 (일 또는 월 이름을 포함하지 않는 사람들을) 유지 할 수 있습니다. LCID (5 행에서와 같이)를 사용하여 언어를 제한하면 일과 월 이름도 포함 할 때 일정한 형식을 유지할 수 있습니다.
이 방법은 대부분의 로케일에서 작동하지만 힌두-아라비아 숫자를 나타내는 데 사용되는 스크립트가 모든 로케일에서 동일하지는 않습니다. 따라서 네팔어 (인도) 로케일의 지역 설정과 같은 지역 설정은 en-US 날짜와 다르게 보이는 날짜 형식을 갖게됩니다. 그러나 이들은 실제로 숫자의 위치 측면에서 동일한 "형식"으로되어 있습니다. 숫자에 다른 기호 만 사용합니다.