1. 엑셀에서 알아내기 - 실패
아래와 같이 통화 표시가 있을 때
B1셀에 =left(a1,1)이라고 하면
₩가 구해지는 것이 아니라 100에서 왼쪽 한 글자인 1이 구해집니다.
다른 것도 마찬가지입니다.
B1셀의 채우기 핸들을 더블 클릭해서 B6셀까지 수식을 복사하면 원하는 것과 는 달리 모두 1이 구해집니다.
2. VBA로 해결 - 성공
가. 구문
속성이므로 Range.NumberFormat 또는 Range.NumberFormatLocal이라고,
Range 다음에 .(점)을 찍고 써서 표시형식을 알아내는데,
숫자뿐만 아니라 통화, 시간 등 모든 표시형식이 가능하며,
NumberFormat과 NumberFormatLocal의 차이는
Local은 사용자의 언어형식으로 표시한다는 것입니다.
나. Sub 프로시저 1 - NumberFormatLocal
① 개발 도구 탭의 Visual Basic 명령을 눌러 VB Editor를 실행합니다.
개발도구 탭이 보이지 않는다면 파일 > 옵션 > 리본 사용자 지정을 누른 후 개발 도구 탭의 왼쪽 체크 상자를 눌러 선택해야 합니다.
② 삽입 - 모듈을 눌러 모듈을 삽입합니다.
삽입 메뉴를 누른 후 모듈을 클릭하는 방법과
'사용자 정의 폼 삽입' 옆의 콤보 상자 버튼을 누른 후 모듈을 클릭하는 두 가지 방법이 있습니다.
그러면 왼쪽 프로젝트 창의 '통화 표시형식1(완성).xlsx 아래에 모듈과 Module1이 생기고, 오른쪽에 빈 코드 창이 열립니다.
③ 통화 표시 알아내기 Sub 프로시저 작성
오른쪽 코드 창에
sub get_currency라고 입력하고 엔터키를 누릅니다.
그러면 같은 줄에 ()가 추가되고, 두 번째 아래 줄에 End Sub가 자동으로 추가됩니다.
위 화면에서 Option Explicit란 '변수를 명시적으로 선언하라'는 의미로
도구 메뉴에서 옵션을 누르면 나오는 옵션 창에서 '변수 선언 요구'에 체크했기 때문에 자동으로 생긴 것입니다.
Sub 문 안에 Debug.Print Range("a1").NumberFormatLocal이라고 입력하고,
실행 메뉴에서 실행을 누르거나, 표준 도구모음에서 실행 아이콘을 클릭하면
직접 실행창에 \#,##0라고 표시됩니다.
원래는 ₩이지만 \로 표시됩니다.
혹시 직접실행창이 보이지 않는다면 보기 메뉴를 누른 다음 직접 실행창을 클릭하면 됩니다.
위 코드의 a1을 a4로 바꾼 다음 실행하면
[$KRW] #,##0라고 표시됩니다.
이상하게 KRW앞에 [$가 있고, 뒤에 닫는 ]가 있습니다.
다. Sub 프로시저 2 - NumberFormat
get_currency 프로시저 3줄을 복사해서 붙여 넣고,
아래와 같이 for ~ next 반복문을 이용해서 1행부터 6행까지의 통화 표시형식을 직접 실행창에 표시하도록 하겠습니다.
Sub get_currency2()
Dim i As Integer
For i = 1 To 6
Debug.Print Range("a" & i).NumberFormat
Next
End Sub
실행하면
통화 기호 1개짜리 표시에서
원화가 이상하게 $로 표시되고,
달러는 ₩$로 표시되며,
엔화는 [$¥-411]라고 표시됩니다.
그리고, 통화 기호 3개짜리는
NumberFormatLocal과 동일하게 표시됩니다.
다시 말해 통화 표시형식이 한 자리로 표시되는 것만 다릅니다.
라. 저장
VB Editor에서 엑셀로 돌아가기 위해서는
파일에서 '닫고 Microsoft Excel로 돌아가기'를 누르거나,
표준 도구모음에서 엑셀 아이콘을 누르면 됩니다.
그리고, 저장은 매크로를 포함하고 있으므로
다른 이름으로 저장을 누른 다음
파일형식을 'Excel 매크로 사용 통합문서(*. xlsm)로 저장해야 합니다.
통화 표시 형식을 발췌하는 것은 다음 편에서 다루도록 하겠습니다.
'EXCEL - VBA' 카테고리의 다른 글
셀 서식의 통화 기호 활용하기(환율 적용하기) (0) | 2024.07.10 |
---|---|
셀 서식의 통화 표시 알아내기 (2) - 사용자 정의 함수(UDF) (0) | 2024.07.09 |
엑셀과 VBA의 Offset 함수가 다르다. (3) (0) | 2024.06.26 |
엑셀과 VBA의 Offset 함수가 다르다. (2) (0) | 2024.06.25 |
데이터(레코드)별로 양식 시트에 기록하기 (0) | 2024.06.05 |