返回列表 上一主題 發帖

如何將數字180.30改成國字壹捌零點參零

本帖最後由 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說明>>查無此規則)

TOP

回復  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的查詢
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 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
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 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
複製代碼
可能這隻程式碼對你會較實用。

TOP

回復 14# c_c_lai

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

樓主的應該是 表單上方已經印好 個十百千萬,下方要印入數字轉大寫數字。
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 1# sasah168


    讚
你猜!!

TOP

        靜思自在 : 地上種了菜,就不易長草;心中有善,就不易生惡。
返回列表 上一主題