ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

VBA常用技巧代码解析

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-5-26 17:45 | 显示全部楼层
本帖已被收录到知识树中,索引项:开发帮助和教程
感谢大佬的无私的奉献,辛苦了

TA的精华主题

TA的得分主题

发表于 2009-5-26 21:39 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-5-26 22:01 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-5-26 22:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-26 22:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

第9部分 函数的使用

技巧163         人民币大写函数
       在VBA中没有内置的函数进行人民币大写转换,此时可以编写自定义函数进行人民币大写转换,如下面的代码所示。
  1. #001  Public Function RMBDX(M)
  2. #002      RMBDX = Replace(Application.Text(Round(M + 0.00000001, 2), "[DBnum2]"), ".", "元")
  3. #003      RMBDX = IIf(Left(Right(RMBDX, 3), 1) = "元", Left(RMBDX, Len(RMBDX) - 1) & "角" & Right(RMBDX, 1) & "分", IIf(Left(Right(RMBDX, 2), 1) = "元", RMBDX & "角整", IIf(RMBDX = "零", "", RMBDX & "元整")))
  4. #004      RMBDX = Replace(Replace(Replace(Replace(RMBDX, "零元零角", ""), "零元", ""), "零角", "零"), "-", "负")
  5. #005  End Function
复制代码
代码解析:
       第2行代码首先使用Round函数对小写数字加上极小值后进行四舍五入运算,关于Round函数请参阅技巧157-1。其次使用工作表Text函数将数值转换成人民币大写格式表示的文本。Text函数将数值转换为按指定数字格式表示的文本,语法如下:
       TEXT(value,format_text)
       Value参数为数值、计算结果为数值的公式,或对包含数值的单元格的引用。
       Format_text参数为“单元格格式“对话框中”数字“选项卡上”分类框中的文本形式的数字格式。
       最后使用Replace函数将人民币大写格式表示的文本中的小数点替换成“元”。Replace函数返回一个字符串,该字符串中指定的子字符串已被替换成另一子字符串,并且替换发生的次数也是指定的,语法如下:
       Replace(expression, find, replace[, start[, count[, compare]]])
       其中参数expression是必需的,包含要替换的子字符串。
       参数find是必需的,要搜索到的子字符串。
       参数replace是必需的,用来替换的子字符串。
       参数start是可选的,在表达式中子字符串搜索的开始位置。
       第3行代码使用了IIF函数、Left函数、Right函数根据第2行代码返回的人民币大写格式表示的文本中的“元”的位置在文本中插入正确的“元”、“角”、“分”字符,使之符合人民币大写习惯。
       IIf函数根据表达式的值,来返回两部分中的其中一个,语法如下:
       IIf(expr, truepart, falsepart)
       参数expr是必需的,用来判断真伪的表达式。
       参数truepart是必需的,如果expr为True,则返回这部分的值或表达式。
       参数falsepart是必需的,如果expr为False,则返回这部分的值或表达式。
       Left、Right函数请参阅技巧158 。
       第4行代码使用Replace函数将人民币大写格式表示的文本中可能出现的“零元零角”、“零元”替换成空白字符;可能出现的“零角”替换成“零”。如果输入负数的话,将“-”替换成“负”。
       在工作表中使用自定义RMBDX函数转换人民币大写的效果如图所示。
       Snap1.jpg

技巧163 人民币大写函数.rar

6.97 KB, 下载次数: 872

TA的精华主题

TA的得分主题

发表于 2009-5-26 22:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
经典,感谢奉献

TA的精华主题

TA的得分主题

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

第9部分 函数的使用

技巧164         列号转换为列标
       使用VBA获取单元格的列号时,只能返回一个数值。如果需要获取以字符表示的列标,可以使用下面的自定义GetColumn函数过程。
  1. #001  Function GetColumn(C As Integer) As String
  2. #002      GetColumn = Split(Cells(1, C).Address, "$")(1)
  3. #003  End Function
复制代码
代码解析:
       GetColumn函数过程代码中,将参数iCol作为列号传递给Cells属性,并获取其绝对地址字串符,然后以“$”字符为分隔符,通过Split函数返回一个一维数组。
       Split函数返回一个下标从零开始的一维数组,它包含指定数目的子字符串,语法如下:
       Split(expression[, delimiter[, limit[, compare]]])
       其中参数expression是必需的,包含子字符串和分隔符的字符串表达式 。如果expression是一个长度为零的字符串(""),则返回一个空数组,即没有元素和数据的数组。
       参数delimiter是可选的,用于标识子字符串边界的字符串字符。如果忽略,则使用空格字符(" ")作为分隔符。
       返回一维数组后获取该数组的第2个元素(下标为1),即该列号的字符列标。
       下面的代码使用GetColumn函数过程获得所选单元格的字符列标。
  1. #001  Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. #002      MsgBox GetColumn(Selection.Column)
  3. #003  End Sub
复制代码
在工作表中选择单元格后结果如图所示。
       Snap1.jpg

技巧164 列号转换为列标.rar

6.33 KB, 下载次数: 745

TA的精华主题

TA的得分主题

发表于 2009-5-27 09:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
祝版主端午节快乐,真是辛苦了

TA的精华主题

TA的得分主题

发表于 2009-5-27 11:21 | 显示全部楼层
真是好东西啊,谢谢楼主哦

TA的精华主题

TA的得分主题

发表于 2009-5-27 11:26 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-18 22:24 , Processed in 0.052583 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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