ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: Samsea

[原创]与[推荐]数字金额转换中文大写与英文字母

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2006-8-13 17:32 | 显示全部楼层

谢谢Samsea! 谢谢Samsea! 谢谢Samsea! 谢谢Samsea! 谢谢Samsea! 谢谢Samsea! 谢谢Samsea! 谢谢Samsea! 谢谢Samsea! 谢谢Samsea! 谢谢Samsea! 谢谢Samsea! 谢谢Samsea! 谢谢Samsea! 谢谢Samsea! 谢谢Samsea! !!!完全可以!!!我很激动!!

另外,为何用鼠标点一下中文大写那一列的某个单元格之后,被点中的单元格就变成公式,再也无法变成中文大写了呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-8-13 18:59 | 显示全部楼层

问:为何用鼠标点一下中文大写那一列的某个单元格之后,被点中的单元格就变成公式,再也无法变成中文大写了呢?

答:把format Cells 改为 General.格式化单元格为普通.

TA的精华主题

TA的得分主题

发表于 2006-8-14 17:34 | 显示全部楼层
再请教Samsea:关于中文大写的:78.90 能否转换成:"仟$佰柒拾捌元玖角零分" ? 如果是整数,如 100 就转换成:"万$仟壹佰零拾零元零角零分"?就象我们平时在填写格式固定的印刷本收据一样,可以自动对应"万\千\百\拾\元\角\分\等位置.币符要美元的.能够在你发在论坛上的那个附件里添加上这个功能么? 要如何感谢您? 我衷心的感激,不仅因为您的技术,更因为您乐于助人的精神!!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-8-15 16:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用山中无虎在2006-8-14 17:34:00的发言:
再请教Samsea:关于中文大写的:78.90 能否转换成:"仟$佰柒拾捌元玖角零分" ? 如果是整数,如 100 就转换成:"万$仟壹佰零拾零元零角零分"?就象我们平时在填写格式固定的印刷本收据一样,可以自动对应"万\千\百\拾\元\角\分\等位置.币符要美元的.能够在你发在论坛上的那个附件里添加上这个功能么? 要如何感谢您? 我衷心的感激,不仅因为您的技术,更因为您乐于助人的精神!!!!

试试看:  

5tweHxEp.zip (24.53 KB, 下载次数: 81)

TA的精华主题

TA的得分主题

发表于 2006-10-27 15:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-11-27 15:31 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-11-27 17:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

分享

我也有一个:

abc = Range("a1")
    If abc < 0 Then
        c = "负"
        abc = Abs(abc)
    End If
    abc = Round(abc * 100, 0)
    If abc >= 100 Then
        a = Left(abc, Len(abc) - 2)
        b = WorksheetFunction.Text(a, "[dbnum2]") & "元"
    End If
    If abc >= 10 Then
        a1 = Left(Right(abc, 2), 1)
        b1 = WorksheetFunction.Text(a1, "[dbnum2]") & "角"
    End If
    a2 = Right(abc, 1)
    b2 = WorksheetFunction.Text(a2, "[dbnum2]") & "分"
    If b1 = "零角" Then b1 = "零"
    If b2 = "零分" Then b2 = ""
    If b2 = "" And b1 = "零" Then b1 = ""
    bb = b & b1 & b2 & "整"
    MsgBox bb

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-11-27 19:06 | 显示全部楼层
QUOTE:
以下是引用kwenlau在2006-11-27 15:31:00的发言:
能给出源码吗,我现在急需啊!

源码是开放的,下载文件中有源码。

TA的精华主题

TA的得分主题

发表于 2006-12-2 13:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-12-2 13:49 | 显示全部楼层
QUOTE:
以下是引用northwolves在2005-12-13 17:41:00的发言:

以前俺也写过一个,与大家共享:

http://dev.csdn.net/develop/article/28/28433.shtm

替版主贴出来代码:不要见怪啊!!!

今天整理文件时发现了以前写的货币金额中文转换(转换一亿亿元以下数目的货币)的代码,帖出来与大家共享:

 

Function daxie(money As String) As String '
Dim x As String, y As String
Const zimu = ".sbqwsbqysbqwsbq" '定义位置代码
Const letter = "0123456789sbqwy.zjf" '定义汉字缩写
Const upcase = "零壹贰叁肆伍陆柒捌玖拾佰仟萬億圆整角分" '定义大写汉字
Dim temp As String
temp = money
If InStr(temp, ".") > 0 Then temp = Left(temp, InStr(temp, ".") - 1)

If Len(temp) > 16 Then MsgBox "数目太大,无法换算!请输入一亿亿以下的数字", 64, "错误提示": Exit Function '只能转换一亿亿元以下数目的货币!

x = Format(money, "0.00") '格式化货币
y = ""
For i = 1 To Len(x) - 3
y = y & Mid(x, i, 1) & Mid(zimu, Len(x) - 2 - i, 1)
Next
If Right(x, 3) = ".00" Then
y = y & "z"          '***元整
Else
 y = y & Left(Right(x, 2), 1) & "j" & Right(x, 1) & "f"     '*元*角*分
 End If
y = Replace(y, "0q", "0") '避免零千(如:40200肆萬零千零贰佰)
y = Replace(y, "0b", "0") '避免零百(如:41000肆萬壹千零佰)
y = Replace(y, "0s", "0") '避免零十(如:204贰佰零拾零肆)

Do While y <> Replace(y, "00", "0")
y = Replace(y, "00", "0") '避免双零(如:1004壹仟零零肆)
Loop
y = Replace(y, "0y", "y") '避免零億(如:210億     贰佰壹十零億)
y = Replace(y, "0w", "w") '避免零萬(如:210萬     贰佰壹十零萬)
y = IIf(Len(x) = 5 And Left(y, 1) = "1", Right(y, Len(y) - 1), y) '避免壹十(如:14壹拾肆;10壹拾)
y = IIf(Len(x) = 4, Replace(y, "0.", ""), Replace(y, "0.", ".")) '避免零元(如:20.00贰拾零圆;0.12零圆壹角贰分)

For i = 1 To 19
y = Replace(y, Mid(letter, i, 1), Mid(upcase, i, 1)) '大写汉字
Next
daxie = y
End Function

Private Sub Command3_Click()
Debug.Print  daxie("6218212212309322.3238") ' return: 陆仟贰佰壹拾捌萬贰仟壹佰贰拾贰億壹仟贰佰叁拾萬玖仟叁佰贰拾贰圆叁角贰分
End Sub

替版主贴出来代码:不要见怪啊!!!

今天整理文件时发现了以前写的货币金额中文转换(转换一亿亿元以下数目的货币)的代码,帖出来与大家共享:

 

Function daxie(money As String) As String '
Dim x As String, y As String
Const zimu = ".sbqwsbqysbqwsbq" '定义位置代码
Const letter = "0123456789sbqwy.zjf" '定义汉字缩写
Const upcase = "零壹贰叁肆伍陆柒捌玖拾佰仟萬億圆整角分" '定义大写汉字
Dim temp As String
temp = money
If InStr(temp, ".") > 0 Then temp = Left(temp, InStr(temp, ".") - 1)

If Len(temp) > 16 Then MsgBox "数目太大,无法换算!请输入一亿亿以下的数字", 64, "错误提示": Exit Function '只能转换一亿亿元以下数目的货币!

x = Format(money, "0.00") '格式化货币
y = ""
For i = 1 To Len(x) - 3
y = y & Mid(x, i, 1) & Mid(zimu, Len(x) - 2 - i, 1)
Next
If Right(x, 3) = ".00" Then
y = y & "z"          '***元整
Else
 y = y & Left(Right(x, 2), 1) & "j" & Right(x, 1) & "f"     '*元*角*分
 End If
y = Replace(y, "0q", "0") '避免零千(如:40200肆萬零千零贰佰)
y = Replace(y, "0b", "0") '避免零百(如:41000肆萬壹千零佰)
y = Replace(y, "0s", "0") '避免零十(如:204贰佰零拾零肆)

Do While y <> Replace(y, "00", "0")
y = Replace(y, "00", "0") '避免双零(如:1004壹仟零零肆)
Loop
y = Replace(y, "0y", "y") '避免零億(如:210億     贰佰壹十零億)
y = Replace(y, "0w", "w") '避免零萬(如:210萬     贰佰壹十零萬)
y = IIf(Len(x) = 5 And Left(y, 1) = "1", Right(y, Len(y) - 1), y) '避免壹十(如:14壹拾肆;10壹拾)
y = IIf(Len(x) = 4, Replace(y, "0.", ""), Replace(y, "0.", ".")) '避免零元(如:20.00贰拾零圆;0.12零圆壹角贰分)

For i = 1 To 19
y = Replace(y, Mid(letter, i, 1), Mid(upcase, i, 1)) '大写汉字
Next
daxie = y
End Function

Private Sub Command3_Click()
Debug.Print  daxie("6218212212309322.3238") ' return: 陆仟贰佰壹拾捌萬贰仟壹佰贰拾贰億壹仟贰佰叁拾萬玖仟叁佰贰拾贰圆叁角贰分
End Sub

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-25 02:29 , Processed in 0.037894 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表