如何将 SpellNumber 宏函数的分形式更改为 "xx/100"
How to change the cents form of SpellNumber macro function to "xx/100"
我必须在 excel 中拼写数字,但我需要美分形式 "xx/100"
前任。
3,258.63 = "THREE THOUSAND TWO HUNDRED FIFTY EIGHT HUNDRED 63/100 ONLY"
现在我的宏功能是
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 = 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
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
但这也给了我美分的拼写,我怎样才能以 50/100 的格式保留数字中的美分?
非常感谢您的帮助
这将有助于获得小数部分。
Right(FormatCurrency(MYNUMBER, 2), 2) & "/100"
' 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
感谢@Barney,小数函数能够显示为
50/100(举例)
我必须在 excel 中拼写数字,但我需要美分形式 "xx/100" 前任。 3,258.63 = "THREE THOUSAND TWO HUNDRED FIFTY EIGHT HUNDRED 63/100 ONLY"
现在我的宏功能是
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 = 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
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
但这也给了我美分的拼写,我怎样才能以 50/100 的格式保留数字中的美分?
非常感谢您的帮助
这将有助于获得小数部分。
Right(FormatCurrency(MYNUMBER, 2), 2) & "/100"
' 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
感谢@Barney,小数函数能够显示为 50/100(举例)