숫자를 텍스트로 변환하려고합니다.
전의.
1,112,589.63 = 1 백만 1 백 12 천 5 백 팔십 구 63/100
내 기능
Option Explicit
'MAIN FUNCTION
'=SPELLNUMBER(95)
Sub TEST()
MsgBox SPELLNUMBER(95)
End Sub
Function SPELLNUMBER(MYNUMBER, Optional BMONEY = False)
Dim DOLLARS, CENTS, TEMP
Dim DECIMALPLACE, COUNT
Dim INUMBER
ReDim PLACE(9) As String
PLACE(1) = " HUNDRED "
PLACE(2) = " THOUSAND "
PLACE(3) = " MILLION "
PLACE(4) = " BILLION "
PLACE(5) = " TRILLION "
INUMBER = MYNUMBER
' 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 = Right(FormatCurrency(MYNUMBER, 2), 2) & "/100"
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
If BMONEY = True Then
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
End If
SPELLNUMBER = DOLLARS & CENTS
End Function
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
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
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
나는 결국 HUNDRED라는 단어를 얻습니다.
전의.
1,112,589.63 = 1 백만 1 백 12 천 5 백 8 천 9 백 63/100
소수점 이하 자릿수 끝에 HUNDRED를 제거하려면 어떻게해야합니까?
Places
변수에 백이 필요하지 않습니다 .
당신이 가질 것은
Ones
Thousands
Millions
...
그러나 Ones
관련이 없기 때문에 그 장소를 비워 둘 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다