Board logo

標題: 如何將數字180.30改成國字壹捌零點參零 [打印本頁]

作者: sasah168    時間: 2013-12-10 11:45     標題: 如何將數字180.30改成國字壹捌零點參零

我只知道將數字180.30改成壹佰捌拾.參
但要如何將數字180.80改成國字壹捌零點參零
請大大幫忙
作者: softsadwind    時間: 2013-12-10 14:59

回復 1# sasah168


    https://dl.dropboxusercontent.com/u/61135474/%E8%8B%B1%E6%96%87%E5%A4%A7%E5%AF%AB%E8%BD%89%E6%8F%9B.xls
參考看看....
作者: p212    時間: 2013-12-10 16:12

本帖最後由 p212 於 2013-12-10 16:19 編輯

回復 1# sasah168
假設儲格A1為180.3
於任一儲存格輸入 =LEFT(TEXT(A1,"[dbnum2]"),FIND(".",TEXT(A1,"[dbnum2]"))-1)&"點"&RIGHT(TEXT(A1,"[dbnum2]"),LEN(TEXT(A1,"[dbnum2]"))-FIND(".",TEXT(A1,"[dbnum2]")))
作者: p212    時間: 2013-12-10 16:31

本帖最後由 ANGELA 於 2013-12-10 16:52 編輯

回復 1# sasah168
Sorry!
3#的回覆未周全,請參考下列組合公式。
假設儲格A1為180.30,任一儲存格輸入
=LEFT(TEXT(A1,"[DBNum2]0.00"),FIND(".",TEXT(A1,"[DBNum2]0.00"))-1)&""&RIGHT(TEXT(A1,"[DBNum2]0.00"),LEN(TEXT(A1,"[DBNum2]0.00"))-FIND(".",TEXT(A1,"[DBNum2]0.00")))
答案即為「壹捌零參零」
思路:任一儲存格輸入=TEXT(A1,"[DBNum2]0.00")得「壹捌零.參零」
小數固定兩位可省略成......&"點"&RIGHT(TEXT(A1,"[DBNum2]0.00"),2)
作者: ML089    時間: 2013-12-10 19:55

=SUBSTITUTE(TEXT(A1,"[DBNum2]0.00;;"),".","點")
作者: p212    時間: 2013-12-10 22:14

本帖最後由 p212 於 2013-12-10 22:19 編輯

回復 5# ML089
感謝ML089版主簡化公式
請問:在=SUBSTITUTE(TEXT(A1,"[DBNum2]0.00;;"),".","點") 中使用紅字部份「2個分號」用意何在?
煩請賜教,謝謝!
作者: ML089    時間: 2013-12-10 23:50

回復  ML089
感謝ML089版主簡化公式
請問:在=SUBSTITUTE(TEXT(A1,"[DBNum2]0.00;;"),".","點") 中使用紅 ...
p212 發表於 2013-12-10 22:14


TEXT(數字,"正;負;零;文字")
後面將兩個 ;; 主要作用是沒有輸入數值時以空白呈現
作者: c_c_lai    時間: 2013-12-11 07:18

=SUBSTITUTE(TEXT(A1,"[DBNum2]0.00;;"),".","點")
ML089 發表於 2013-12-10 19:55

不錯的 Idea!
順便恭賀你升任版主。
作者: c_c_lai    時間: 2013-12-11 08:03

回復 1# sasah168
除了以公式 (ML089 版大提示) 處理外,尚可以使用 VBA 模組的方式來處理,如圖:
[attach]17038[/attach]
[attach]17039[/attach]
作者: c_c_lai    時間: 2013-12-11 08:06

我只知道將數字180.30改成壹佰捌拾.參
但要如何將數字180.80改成國字壹捌零點參零
請大大幫忙 :di ...
sasah168 發表於 2013-12-10 11:45

置於 "模組 -> Module1" 內:
  1. Sub Ex()
  2.     Dim strs As String, num As Double
  3.    
  4.     num = 15673624.89
  5.     strs = NumToCur(num)
  6.     MsgBox num & Chr(10) & strs & Chr(10) & NumToCur(180.3)
  7. End Sub

  8. Function NumToCur(ByVal num) As String
  9.     Const cNum As String = "零壹貳參肆伍陸柒捌玖-            點  "
  10.     Dim sNum As String
  11.     Dim i As Long
  12.    
  13.     If (num <> 0) And (Abs(num) < 10000000000000#) Then
  14.         sNum = Trim(Str(Int(Abs(num) * 100)))
  15.         For i = 1 To Len(sNum)                ' 逐位轉換
  16.             NumToCur = NumToCur + Mid(cNum, (Mid(sNum, i, 1)) + 1, 1) + Mid(cNum, 26 - Len(sNum) + i, 1)
  17.             '  NumToCur = NumToCur + Mid(cNum, (Mid(sNum, i, 1)) + 1, 1)
  18.         Next
  19.         NumToCur = Replace(NumToCur, " ", "")
  20.         If num < 0 Then NumToCur = "(負)" + NumToCur
  21.     Else
  22.         NumToCur = IIf(num = 0, "零值", "溢出")
  23.     End If
  24. End Function
複製代碼

作者: p212    時間: 2013-12-11 09:10

本帖最後由 p212 於 2013-12-11 09:20 編輯

回復 7# ML089
感謝ML089 版主熱心解說TEXT(A1,"[DBNum2]0.00;;")使用2個分號,可使儲存格A1為空格時運算回應為「空白」。
但針對TEXT(A1,"[DBNum2]0.00;;")公式有下列疑惑,煩請賜教,謝謝!
1、使用2個分號的 TEXT(A1,"[DBNum2]0.00;;")與使用1個分號的 TEXT(A1,"[DBNum2]0.00;"),其結果似乎是相同的,對否?那麼若改用1個分號會有何「不預期反應」?
2、當儲存格A1為「負數」時,公式TEXT(A1,"[DBNum2]0.00;;")回應的結果將為「空白」,此應如何修正使其出現負數的結果?
3、對於TEXT(數字,"正;負;零;文字")之"正;負;零;文字",此規則原理之詳細說明可於何處查詢?(在<<Excel說明>>查無此規則)
作者: ML089    時間: 2013-12-11 09:59

回復  ML089
回復 7# ML089
感謝ML089 版主熱心解說TEXT(A1,"[DBNum2]0.00;;")使用2個分號,可使儲存格A1為空格時運算回應為「空白」。
但針對TEXT(A1,"[DBNum2]0.00;;")公式有下列疑惑,煩請賜教,謝謝!
1、使用2個分號的 TEXT(A1,"[DBNum2]0.00;;")與使用1個分號的 TEXT(A1,"[DBNum2]0.00;"),其結果似乎是相同的,對否?那麼若改用1個分號會有何「不預期反應」?
2、當儲存格A1為「負數」時,公式TEXT(A1,"[DBNum2]0.00;;")回應的結果將為「空白」,此應如何修正使其出現負數的結果?
3、對於TEXT(數字,"正;負;零;文字")之"正;負;零;文字",此規則原理之詳細說明可於何處查詢?(在<<Excel說明>>查無此規則)
p212 發表於 2013-12-11 09:10


問題1、2請看下面圖說內容
問題3,我不知道TEXT的說明出自哪裡,我連書都沒有,大部是在論壇上邊看邊學,加上自己的測試就像我PO的圖,還有F1的說明+GOOGLE的查詢
[attach]17041[/attach]
作者: ML089    時間: 2013-12-11 12:04

回復 10# c_c_lai

由變數宣告及變數命名來看,你應該是很專業的程式人員。

我以前都是寫FORTRAN小程式就沒有養成這習慣,日後VBA部分應該要跟你多多學習。

這種小程式適合我來練習
Sub ex2()
    Dim strs As String, num As Variant

    strs = ""
    num = 123.4
    strs = strs & num & Chr(10) & NumToCur2(num) & Chr(10)

    num = -456.789
    strs = strs & num & Chr(10) & NumToCur2(num) & Chr(10)
   
    num = 0
    strs = strs & num & Chr(10) & NumToCur2(num) & Chr(10)
   
    num = "123 456 789"
    strs = strs & num & Chr(10) & NumToCur2(num) & Chr(10)
    MsgBox strs

End Sub
Function NumToCur2(ByVal num) As String
    NumToCur2 = num: N = "0123456789.": C = "零壹貳參肆伍陸柒捌玖點"
    For i = 1 To Len(N)
        NumToCur2 = Replace(NumToCur2, Mid(N, i, 1), Mid(C, i, 1))
    Next
End Function
作者: c_c_lai    時間: 2013-12-11 13:56

回復 13# ML089
我那 NumToCur() 是由以下的 NumToCurr() 修改而成,
所以格局仍保留原程式風格:
  1. ' -----------------------------------------------------------------------------
  2. ' 幣值文數字轉換
  3. ' 引值 (num): 雙精準 (Double) 數值 num as Currency
  4. ' -----------------------------------------------------------------------------
  5. Function NumToCurr(ByVal num) As String
  6.     Const cNum As String = "零壹貳參肆伍陸柒捌玖-萬仟佰拾億仟佰拾萬仟佰拾元角分"
  7.     Const cCha As String = "零仟零佰零拾零零零零零億零萬零元億萬零角零分零整-零零零零零億萬元億零整整"
  8.     Dim sNum As String
  9.     Dim i As Long
  10.    
  11.     If (num <> 0) And (Abs(num) < 10000000000000#) Then       '  (Abs(num) < 10000000000000#) = True
  12.         sNum = Trim(Str(Int(Abs(num) * 100)))
  13.         For i = 1 To Len(sNum)                ' 逐位轉換
  14.             NumToCurr = NumToCurr + Mid(cNum, (Mid(sNum, i, 1)) + 1, 1) + Mid(cNum, 26 - Len(sNum) + i, 1)
  15.         Next
  16.         For i = 0 To 11                       ' 去掉多餘的零
  17.             NumToCurr = Replace(NumToCurr, Mid(cCha, i * 2 + 1, 2), Mid(cCha, i + 26, 1))
  18.         Next
  19.         If num < 0 Then NumToCurr = "(負)" + NumToCurr
  20.     Else
  21.         NumToCurr = IIf(num = 0, "零元", "溢出")
  22.     End If
  23. End Function
複製代碼
可能這隻程式碼對你會較實用。
作者: ML089    時間: 2013-12-11 15:20

回復 14# c_c_lai

你這自定函數適用於支票的金額

樓主的應該是 表單上方已經印好 個十百千萬,下方要印入數字轉大寫數字。
作者: bear0925900003    時間: 2013-12-17 16:27

回復 1# sasah168


    讚




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)