End Sub
Private Function numtohan(getnum As String) As String
Dim num() As String '소수점을 읽기 위한 배열
Dim han As String '돌려주는 한글값
Dim minus As String '마이너스를 표기하기 위한 단순한 변수
Dim unit As Variant
Dim a As Integer
Dim point As String
Dim pt As String
Dim p As Integer
num() = Split("영/일/이/삼/사/오/육/칠/팔/구", "/") '6.0에만 되는 함수 split...
unit = Array("", "만 ", "억 ", "조 ", "경 ", "해 ") '잘 모르겠음... 여기까지 헤아릴경우가 없어서
'만약 추가해야한다면 그냥 적어주시면 됨
If Left(getnum, 1) = "-" Then
minus = "마이너스 " '음수의 경우 추가될 문자
getnum = Right(getnum, Len(getnum) - 1) ' '-'문자만 뺀다.
End If
p = InStr(1, getnum, ".")
If 0 < p Then
point = Right(getnum, Len(getnum) - p) '소수점 자리만 때고
For a = 1 To Len(point): pt = pt & num(Val(Mid(point, a, 1))): Next a '소수점 읽기
pt = "점 " & pt '소수점을 읽는 글을 '점'이라 칭했다.
getnum = Left(getnum, p - 1) '정수자리만 ...
If getnum = "" Then getnum = "0" '혹시나 0을 입력하지 않거나 -만 덜렁있을때
End If
If getnum = "0" Then '영일때만 표기하도록 한것
numtohan = minus & "영" & pt
Exit Function
End If
On Error GoTo error_return
For a = Int(Len(getnum) / 4.1) To 0 Step -1
han = han & ntohan(CStr(Int(Val(getnum) / 10000 ^ a))) + unit(a)
getnum = Right(getnum, 4 * a) '계산한 것들을 떨구어 낸다.
'getnum = Str(Val(getnum) - Int((Val(getnum) / 10000 ^ a)) * 10000 ^ a) '앞자리를 버리기 위한 계산이다.
'이계산의 에러는 30억이상이 되었을경우 오류가 날꺼다.. 엉터리 수치가 나올꺼다 그래서 문자열 계산으로 했다.
Next a
'여기서 4.1에 대해서 짚고 넘어가자.. 왜 4.1이 되어야 했나.
'1,2,3,4는 0이 나오고 5,6,7,8은 1이 9,10,11,12는 2가 이런씩이였는데 4.1로 나눈것이 적당했다.
numtohan = minus & han & pt
Exit Function
error_return:
numtohan = "Error" '숫자가 크거나 혹시나 잘못되었다면 돌려줄값 즉 이걸 체크해서.. 무시기.. 어쩌고 할수 있다.
End Function
Private Function ntohan(getnum As String) As String
Dim num As Variant '숫자
Dim unit As Variant
Dim han As String
Dim st As String
Dim n(4) As Integer
Dim a As Integer
num = Array("", "", "이", "삼", "사", "오", "육", "칠", "팔", "구")
unit = Array("", "천", "백", "십", "")
st = Format(Val(getnum), "0000")
For a = 1 To 4
n(a) = Val(Mid(st, a, 1))
If n(a) <> 0 Then
han = han & num(n(a)) & unit(a)
End If
Next a
If n(4) = 1 Then han = han & "일" '마지막 자리가 1일때는 '일'을 넣어준다.
ntohan = han