안녕하세요.
표시 형식 기능 중 숫자를 한글이나 한자로 나타내는 기능이 있습니다.
견적서 같은 문서를 작성할 때 기록된 숫자를 변조할 수 없도록 이중으로 표시하는 기능이죠.
숫자를 영어로 나타내는 방법도 알아보겠습니다.
실습 파일 다운로드
[B2] 셀에 나타낼 숫자를 입력했습니다.
[D2] 셀에 한글로 나타내 보겠습니다.
[D2] 셀에 커서를 두고 =(이퀄)을 입력한 뒤 [B2] 셀을 선택해 수식을 나타냅니다.
[D2] 셀에 커서를 두고 단축키 <Ctrl + 1>을 눌러 셀 서식 대화상자를 나타냅니다.
[범주]에서 '기타'를 선택한 뒤 '숫자(한글)'을 선택합니다.
[확인]을 누릅니다.
숫자를 한글이나 한자로 나타내는 방법은 엑셀에서 기본 기능으로 제공하기 때문에 쉽습니다.
숫자를 영어로 나타내는 방법은 엑셀에 없습니다.
사용자 정의 함수를 만들어 사용해야 합니다.
찾는 사람이 여럿 있는지 구글 검색을 해보니 Microsoft 지원 웹사이트에 답변이 있습니다.
실습 파일에 사용자 정의 함수로 등록해 두었습니다.
단축키 <Alt + F11>을 눌러 VBE를 실행합니다.
Option Explicit
'Main Function
Function SpellNumber(ByVal MyNumber)
Dim Dollars, Cents, Temp
Dim DecimalPlace, Count
ReDim Place(9) As String
Place(2) = " Thousand "
Place(3) = " Million "
Place(4) = " Billion "
Place(5) = " Trillion "
' String representation of amount.
MyNumber = Trim(Str(MyNumber))
' Position of decimal place 0 if none.
DecimalPlace = InStr(MyNumber, ".")
' Convert cents and set MyNumber to dollar amount.
If DecimalPlace > 0 Then
Cents = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & "00", 2))
MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
End If
Count = 1
Do While MyNumber <> ""
Temp = GetHundreds(Right(MyNumber, 3))
If Temp <> "" Then Dollars = Temp & Place(Count) & Dollars
If Len(MyNumber) > 3 Then
MyNumber = Left(MyNumber, Len(MyNumber) - 3)
Else
MyNumber = ""
End If
Count = Count + 1
Loop
Select Case Dollars
Case ""
Dollars = "No Dollars"
Case "One"
Dollars = "One Dollar"
Case Else
Dollars = Dollars & " Dollars"
End Select
Select Case Cents
Case ""
Cents = " and No Cents"
Case "One"
Cents = " and One Cent"
Case Else
Cents = " and " & Cents & " Cents"
End Select
SpellNumber = Dollars & Cents
End Function
' Converts a number from 100-999 into text
Function GetHundreds(ByVal MyNumber)
Dim Result As String
If Val(MyNumber) = 0 Then Exit Function
MyNumber = Right("000" & MyNumber, 3)
' Convert the hundreds place.
If Mid(MyNumber, 1, 1) <> "0" Then
Result = GetDigit(Mid(MyNumber, 1, 1)) & " Hundred "
End If
' Convert the tens and ones place.
If Mid(MyNumber, 2, 1) <> "0" Then
Result = Result & GetTens(Mid(MyNumber, 2))
Else
Result = Result & GetDigit(Mid(MyNumber, 3))
End If
GetHundreds = Result
End Function
' Converts a number from 10 to 99 into text.
Function GetTens(TensText)
Dim Result As String
Result = "" ' Null out the temporary function value.
If Val(Left(TensText, 1)) = 1 Then ' If value between 10-19...
Select Case Val(TensText)
Case 10: Result = "Ten"
Case 11: Result = "Eleven"
Case 12: Result = "Twelve"
Case 13: Result = "Thirteen"
Case 14: Result = "Fourteen"
Case 15: Result = "Fifteen"
Case 16: Result = "Sixteen"
Case 17: Result = "Seventeen"
Case 18: Result = "Eighteen"
Case 19: Result = "Nineteen"
Case Else
End Select
Else ' If value between 20-99...
Select Case Val(Left(TensText, 1))
Case 2: Result = "Twenty "
Case 3: Result = "Thirty "
Case 4: Result = "Forty "
Case 5: Result = "Fifty "
Case 6: Result = "Sixty "
Case 7: Result = "Seventy "
Case 8: Result = "Eighty "
Case 9: Result = "Ninety "
Case Else
End Select
Result = Result & GetDigit(Right(TensText, 1)) ' Retrieve ones place.
End If
GetTens = Result
End Function
' Converts a number from 1 to 9 into text.
Function GetDigit(Digit)
Select Case Val(Digit)
Case 1: GetDigit = "One"
Case 2: GetDigit = "Two"
Case 3: GetDigit = "Three"
Case 4: GetDigit = "Four"
Case 5: GetDigit = "Five"
Case 6: GetDigit = "Six"
Case 7: GetDigit = "Seven"
Case 8: GetDigit = "Eight"
Case 9: GetDigit = "Nine"
Case Else: GetDigit = ""
End Select
End Function
단축키 <Alt + Q>를 눌러 열려 있는 VBE를 닫고 엑셀로 돌아 갑니다.
[D4] 셀에 사용자 정의 함수를 이용해 [B2] 셀 숫자를 영어로 나타내 보겠습니다.
[D2] 셀을 선택합니다.
=sp 까지 입력하면 함수 목록이 나타납니다.
나타난 함수 이름을 더블 클릭해 나타내고 [B2] 셀을 클릭해 함수 인수로 입력합니다.
<Enter>키를 누르면 영어로 바뀐 결과가 표시됩니다.
마지막에 표시된 'Dollars and No Cents'를 없애려면 사용자 정의 함수를 수정해야 합니다.
필요하신 분께 도움 되길 바라며 마치겠습니다.
수고하셨습니다.
'매크로&VBA' 카테고리의 다른 글
셀 배경색 기준으로 합계 구하기 (5) | 2021.01.18 |
---|---|
전체 병합 기능을 응용한 열방향 전체 병합 기능 (0) | 2020.09.14 |
같은 내용을 묶어서 합치기3(중복된 항목 제거, 정렬, VBA) (0) | 2020.06.26 |
같은 내용을 묶어서 합치기2(배열) (0) | 2020.06.25 |
같은 내용을 묶어서 합치기(VBA) (0) | 2020.06.25 |