Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

如何用函数或公式将小写数字转换成汉字的大写数字

冰花雪虹  发表于:2009-09-24 14:00:47  
复制

如题,将123转换成壹佰贰拾叁。

 

Top
蒋海兵 发表于:2009-09-24 14:28:06
Public Function CH(A) As String
  Dim aa As String
  Dim bb As String
  Dim cc As String
  Dim dd As Byte
  Dim ee As Boolean
  Dim ff As Byte
  Dim i As Integer
  Dim qq As String
    On Error GoTo CH_Err
    If A >= 0 Then
     aa = Int((A + 0.005) * 100)
     Else
     aa = -Int((A + 0.005) * 100)
     End If
      dd = Len(aa)
        For i = dd To 1 Step -1
         qq = Mid(aa, dd - i + 1, 1)
          bb = Mid("零壹贰叁肆伍陆柒捌玖拾", qq + 1, 1)
           If qq <> "0" Then
             If ee = True Then
              cc = cc + "零" + bb + Mid("分角元拾佰仟万拾佰仟亿拾佰仟万拾佰", i, 1)
            Else
              cc = cc + bb + Mid("分角元拾佰仟万拾佰仟亿拾佰仟万拾佰", i, 1)
            End If
              ee = False
            Else
              If i = 1 And qq = "0" Then
                cc = cc + "整"
              If aa = 0 Then
                 cc = ""
              End If
           Exit For
           End If
              If (i Mod 4 = 3) Then
               If ff < 4 Or i = 3 Then
                cc = cc + Mid("分角元拾佰仟万拾佰仟亿拾佰仟", i, 1)
               End If
              End If
            ee = True
         End If
       Next i
       If A >= 0 Then
     CH = cc
     Else
     CH = "负-" & cc
     End If
CH_Exit:
    Exit Function
CH_Err:
If A >= 0 And Len(Int(A)) >= 13 Or A < 0 And Len(Int(A)) >= 14 Then
   
     MsgBox "对不起 !!!" + Chr(13) + "您输入的数值必须是:" & vbNewLine & "整数位不超过 13 位。", vbOKOnly, "警告"
    Else
    MsgBox Error$
    Resume CH_Exit
    End If
 End Function
详见点击下载此附件

冰花雪虹 发表于:2009-09-24 23:03:34

好像挺麻烦的,看不太懂。我的意思不是转换成金额这一类的,是直接数字大写。就是把序号1——100,转换成:壹、贰、叁、肆、伍、陆、柒……之类的,不是金币,谢谢了。

 

在下面的这个查询里,把序号转换成汉字大写,您也可以帮我在报表里想办法输出成大写,先谢谢了。

 

 

点击下载此附件

点燃一支烟 发表于:2009-09-25 08:15:03

1楼已经给你贴出代码了啊,你不想要转换金额,自己简单改一下不就可以了,把元角分替换成空格,把“整”去掉(或注释掉)就是:

Public Function CH(A) As String
  Dim aa As String
  Dim bb As String
  Dim cc As String
  Dim dd As Byte
  Dim ee As Boolean
  Dim ff As Byte
  Dim i As Integer
  Dim qq As String
    On Error GoTo CH_Err
    If A >= 0 Then
     aa = Int((A + 0.005) * 100)
     Else
     aa = -Int((A + 0.005) * 100)
     End If
      dd = Len(aa)
        For i = dd To 1 Step -1
         qq = Mid(aa, dd - i + 1, 1)
          bb = Mid("零壹贰叁肆伍陆柒捌玖拾", qq + 1, 1)
           If qq <> "0" Then
             If ee = True Then
              cc = cc + "零" + bb + Mid("   拾佰仟万拾佰仟亿拾佰仟万拾佰", i, 1)
            Else
              cc = cc + bb + Mid("   拾佰仟万拾佰仟亿拾佰仟万拾佰", i, 1)
            End If
              ee = False
            Else
              If i = 1 And qq = "0" Then
                cc = cc '+ "整"
              If aa = 0 Then
                 cc = ""
              End If
           Exit For
           End If
              If (i Mod 4 = 3) Then
               If ff < 4 Or i = 3 Then
                cc = cc + Mid("   拾佰仟万拾佰仟亿拾佰仟", i, 1)
               End If
              End If
            ee = True
         End If
       Next i
       If A >= 0 Then
     CH = cc
     Else
     CH = "负-" & cc
     End If
CH_Exit:
    Exit Function
CH_Err:
If A >= 0 And Len(Int(A)) >= 13 Or A < 0 And Len(Int(A)) >= 14 Then
   
     MsgBox "对不起 !!!" + Chr(13) + "您输入的数值必须是:" & vbNewLine & "整数位不超过 13 位。", vbOKOnly, "警告"
    Else
    MsgBox Error$
    Resume CH_Exit
    End If
 End Function


点燃一支烟 发表于:2009-09-25 08:17:29
点击下载此附件  自己要举一反三,呵呵

冰花雪虹 发表于:2009-09-25 15:03:20
非常感谢1楼和3楼的。呵呵。想问一下,为何不能超过13位呢?

冰花雪虹 发表于:2009-09-25 15:04:02
对了,还有一个问题,能够取几个答案为最佳答案呢?

点燃一支烟 发表于:2009-09-25 15:07:49

程序代码只设定13位能转化,因为数字可以无穷大,实际操作总有个上限,这个上限之内够用就行了,难道你的取数上了13位吗?



点燃一支烟 发表于:2009-09-25 15:19:56

只能取一个最佳,请给1楼就是,呵呵



冰花雪虹 发表于:2009-09-25 16:35:31

对了,还有一个问题,我刚才把一个号码给删除了,提示“无效使用Null”,我按如下的方法改了(蓝色字),为何不起作用?

 

Dim i As Integer
  Dim qq As String
    On Error GoTo CH_Err
    If A = Null Then
        aa = 0
    End If
    If A >= 0 Then
        aa = Int((A + 0.005) * 100) '将原数扩大100倍
    Else
        aa = -Int((A + 0.005) * 100)
    End If
    dd = Len(aa) '读取位数+2,如1位数为3,2位数为4,3位数为5……
        For i = dd To 1 Step -1
            qq = Mid(aa, dd - i + 1, 1)
            bb = Mid("零壹贰叁肆伍陆柒捌玖拾", qq + 1, 1)
            If qq <> "0" Then
                If ee = True Then
                    cc = cc + "零" + bb + Mid("   拾佰仟万拾佰仟亿拾佰仟万拾佰", i, 1)
                Else
                    cc = cc + bb + Mid("   拾佰仟万拾佰仟亿拾佰仟万拾佰", i, 1)
                End If
                ee = False
            Else
                If i = 1 And qq = "0" Then
                    cc = cc '+ "整"
                    If aa = 0 Then
                        cc = ""
                    End If
                    Exit For
                End If
                If (i Mod 4 = 3) Then
                    If ff < 4 Or i = 3 Then
                        cc = cc + Mid("   拾佰仟万拾佰仟亿拾佰仟", i, 1)
                    End If
                End If
                ee = True
            End If
            Next i
            If A >= 0 Then
                CH = cc
            Else
                CH = "负-" & cc
            End If
CH_Exit:
    Exit Function
CH_Err:
    If A >= 0 And Len(Int(A)) >= 13 Or A < 0 And Len(Int(A)) >= 14 Then
        MsgBox "对不起 !!!" + Chr(13) + "您输入的数值必须是:" & vbNewLine & "整数位不超过 13 位。", vbOKOnly, "警告"
    Else
        MsgBox Error$
        Resume CH_Exit
    End If
End Function



点燃一支烟 发表于:2009-09-25 17:06:28
Public Function CH(A) As String
  Dim aa As String
  Dim bb As String
  Dim cc As String
  Dim dd As Byte
  Dim ee As Boolean
  Dim ff As Byte
  Dim i As Integer
  Dim qq As String
   
    On Error GoTo CH_Err
 If IsNull(A) Then
        CH = "零"
    End If

    If A >= 0 Then
     aa = Int((A + 0.005) * 100)
     Else
     aa = -Int((A + 0.005) * 100)
     End If
      dd = Len(aa)
        For i = dd To 1 Step -1
         qq = Mid(aa, dd - i + 1, 1)
          bb = Mid("零壹贰叁肆伍陆柒捌玖拾", qq + 1, 1)
           If qq <> "0" Then
             If ee = True Then
              cc = cc + "零" + bb + Mid("   拾佰仟万拾佰仟亿拾佰仟万拾佰", i, 1)
            Else
              cc = cc + bb + Mid("   拾佰仟万拾佰仟亿拾佰仟万拾佰", i, 1)
            End If
              ee = False
            Else
              If i = 1 And qq = "0" Then
                cc = cc '+ "整"
              If aa = 0 Then
                 cc = ""
              End If
           Exit For
           End If
              If (i Mod 4 = 3) Then
               If ff < 4 Or i = 3 Then
                cc = cc + Mid("   拾佰仟万拾佰仟亿拾佰仟", i, 1)
               End If
              End If
            ee = True
         End If
       Next i
       If A >= 0 Then
     CH = cc
     Else
     CH = "负-" & cc
     End If
CH_Exit:
    Exit Function
CH_Err:
If A >= 0 And Len(Int(A)) >= 13 Or A < 0 And Len(Int(A)) >= 14 Then
   
     MsgBox "对不起 !!!" + Chr(13) + "您输入的数值必须是:" & vbNewLine & "整数位不超过 13 位。", vbOKOnly, "警告"
    Else
    'MsgBox Error$
    Resume CH_Exit
    End If
 End Function

点燃一支烟 发表于:2009-09-25 17:12:32

或将红色的改为:

 If IsNull(A) Or A = 0 Then
        CH = "零"
  Exit Function
    End If



冰花雪虹 发表于:2009-09-25 17:15:41
感觉感谢,呵呵。

冰花雪虹 发表于:2009-09-25 17:17:56
我改成这样了,呵呵,如果没有序号的话,直接给他空值就行了,再次感谢!

总记录:13篇  页次:1/1 9 1 :