捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
盒子资源分类
全部展开 - 全部合拢
Excel中将人民币小写转大写的宏
关键字:Excel 宏 小写转大写 DXRMB VBA
来 自:原创
平 台:Win9x,Win2k/NT,WinXP 下载所需:0 火柴
深浅度:中级 完成时间:2004/4/29
发布者:yhcfx 发布时间:2004/4/29
编辑器:VBA 语  种:简体中文
分 类:不常用 下载浏览:212/12077
加入到我的收藏
下载错误报错
登陆以后才能下载
 用户名:
 密 码:
自动登陆(30天有效)
无图片
Function DXRMB(je As Currency) As String
  '湖南省巴陵石化热电厂陈放雄编制 yhcfx@sohu.com
  '很容易将其改为其它编程语言的人民币转换函数
  '**************************************************
  Dim sDW, sDX, sS, sCS, sWDX, sWDW As String
  'sDW表示金额大写的单位
  'sDX表示数字的大写
  'sS表示转换的中间字符串
  'sCS表示金额转换为货币化的数字字符串
  'sWDX表示某一个位的位数字大写
  'sWDW表示某一个位的单位
  Dim cJE As Currency
  'cJE表示金额扩大100位并取整后的金额
  Dim iL, iW, iLEN As Integer
  'iL表示金额串的长度循环变量(包含角分位但不含小数点)
  'iW表示某一个位的数字数值
  'iLEN表示金额串的总长度(包含角分位但不含小数点)
  Dim bCUR0, bPRE0 As Boolean
  'bCUR0表示当前位数字是否为零
  'bPRE0表示前一位数字是否为零
  '***************************************************
    
  If Abs(je) < 0.01 Then
    DXRMB = "零元整"
    Exit Function
  End If

  sWDX = ""        '位大写赋初值
  If je < 0 Then
    sWDX = "(负)"  '负数值前面加(负)
    je = Abs(je)
  End If
  
  If je > 922337203685.47 Then                    '超限判断
    DXRMB = "数据的绝对值不能大于922337203685.47"
    Exit Function
  End If
  
  sDW = "分角元拾佰仟万拾佰仟亿拾佰仟万拾佰"
  sDX = "零壹贰叁肆伍陆柒捌玖"
  cJE = Round(je * 100)
  sCS = CStr(cJE)
  iL = Len(sCS)         '长度循环变量初始化
  iLEN = iL             '保存总长度
  sS = sWDX             '转换中间字符串初始化
  bPRE0 = False         '前一位数字是否为零变量初始化
  bCUR0 = False         '当前位数字是否为零变量初始化
      
  While iL >= 1         '金额长度循环
  
    iW = CInt(Mid(sCS, iLEN - iL + 1, 1))   '某位的数字数值
    sWDX = MidB(sDX, iW * 2 + 1, 2)         '某位的大写
    sWDW = MidB(sDW, (iL - 1) * 2 + 1, 2)   '某位的单位
    iL = iL - 1
    
    bCUR0 = iW = 0
        
    If (Not bCUR0) Or (sWDW = "亿") Or (sWDW = "万") Or (sWDW = "元") Then
      If bPRE0 Then                     '前一位数字为零时
        If Not bCUR0 Then               '如果当前位不为零
          sS = sS + "零" + sWDX + sWDW
        Else                            '如果当前位为零时
          If Not ((sWDW = "万") And (Right(sS, 1) = "亿")) Then
            sS = sS + sWDW              '必为位单位为"亿|万|元",只需加入位单位
          End If
        End If
      Else                              '前一位数字为不零时
        If Not bCUR0 Then               '且当前位不为零时
          sS = sS + sWDX + sWDW
        Else                            '且当前位为零时
          sS = sS + sWDW                '必为位单位为"亿|万|元",只需加入位单位
        End If
      End If
    End If
    
    bPRE0 = bCUR0 And (sWDW <> "元")    '前一位是否为零变量赋值
        
  Wend
  
  If Right(sS, 1) <> "分" Then
    sS = sS + "整"
  End If
  
  DXRMB = sS  '返回转换结果
  
End Function
Google
 
本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们
龙脉加密锁 15元起 Grid++Report 报表 申请支付@网
 相关文章
没有相关文章
相关评论
共有评论12条 当前显示最后6条评论
receving 2004/5/27 21:39:04
非常感谢,正需要学习一下这个东西呢,呵呵!
tim001 2004/8/27 13:50:44
学习
zhangpingdandan2 2004/11/24 18:51:23
从哪里下载呀?
55702 2005/10/16 18:59:03
我使用了其他方式进行转换:
  1、利用DELPHI与EXCEL接口 建立EXCEL工作簿不打开;
  2、将小写数字写入CELLL[A1];
  3、使用转换函数将CELLL[A1]转换大写人民币(string);
  4、将CELLL[A1]人民币(string)取出;
  5、关闭EXCEL工作簿。
各位,有兴趣参加讨论吗?
inrm 2005/10/17 8:42:02
有道是:条条大路通罗马。但你饶这么个圈子的目的是什么?
55702 2005/10/19 21:33:40
回复朋友inrm:各位对此宏的评价不低,我应该认真拜读,之后转为delphi的function。我当时用此方法一是认为不会出错,二是感觉转换有难度。
我要发表评论 查看全部评论
 
  DELPHI盒子版权所有 1999-2023 V4.01 粤ICP备10103342号-1 更新RSS列表