ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 推荐大家一个不错的“四舍六入五成双”自定义函数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-3-8 16:48 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:自定义函数开发
详见http://www.hbswj.com/News_Print.asp?NewsID=2648, 请各位高手参谋一下,该函数是否存在问题。

TA的精华主题

TA的得分主题

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

还是要谢谢你,但是为什么不能下载呢?还是小气啊

TA的精华主题

TA的得分主题

发表于 2006-4-22 12:57 | 显示全部楼层

解除右键限制就可以复制了:

利用VBA自定义函数解决水文资料中的“四舍六入”问题

作者:佚名 转贴自:本站原创 点击数:96


Microsoft Office套装办公软件是大家十分熟悉的办公软件,在工作中经常使用。但在水文工作中,仍然感觉到有很不方便的时候。比如,水文行业广泛使用的“四舍六入五单双”,就很难用Microsoft Office中的内部函数进行处理。但是与Microsoft Office套装办公软件绑定的VBA(Visual Basic For Applica-tion)语言提供了强大的二次开发功能,笔者以Excel为例,用它来解决上面所提到的问题,就非常容易了。

一、水文及水质资料使用的“四舍六入五单双”,执行《数值修约规范》(GB8170-87):

1.拟舍弃数字的最左一位数字小于5时,则舍去,即保留的各位数字不变。

2.拟舍弃数字的最左一位数字大于或等于5时,而其后跟有并非全部为0的数字时,则进一,即保留的末位数字加1。

3. 拟舍弃数字的最左一位数字为5,而后面无数字或皆为0时,若所保留的末位数字为奇数(1,3,5,7,9)则进一,为偶数(2,4,6,8)则舍弃。

二、初识VBAIDE

打开Excel,按Alt+F11即进入VBAIDE,在菜单上依次点击[插入]->[模块],然后输入如下代码:

' “四舍六入五单双”自定义函数

' 函数形式 Round5(x,mm),返回值Round5为 Double 型

' X为操作数值,mm为保留小数位数

' mm为 Integer 型,mm = 0 表示取整数

Private Function round5(X As Double, mm As Integer) As Double

Dim Temp1, Temp2 As String

Temp1 = 1

If mm < 0 Then

Temp1 = 10 ^ Abs(mm)

X = X / Temp1

mm = 0

End If

If ((Int((Abs(X) - Int(Abs(X))) * 10 ^ mm) Mod 2) = 0 And (Abs(X) * 10 ^ mm - Int(Abs(X) * 10 ^ mm)) <= 0.5) And X <> Val(Round(Abs(X), mm) * Sgn(X)) Then

round5 = Val((Round(Abs(X) - 10 ^ (-mm) / 5, mm)))

Else

round5 = Val(Round(Abs(X), mm))

End If

round5 = Val( round5 * Sgn(X) * Temp1)

End Function

以上程序是在“取绝对值(Abs)”、“取整(Int)”、“四舍五入(Round)”等系统内部函数的基础上完成的,函数的型式及其每个参数需要用户在属性设置中定义和声明,故叫做自定义函数。以上定义“四舍六入五单双”的函数名为Round5,定义成功后便可在Excel中象系统函数那样引用了,例如对编辑完后按Alt+Q即返回Excel,再在某一单元格输入“= Round5(A1,3)”(A1既可以是单元格,也可以是输入的数值),回车结果就出来了。如果出现“#NAME?”那就要设置一下安全设置。依次点[工具]->[宏]->[安全性],在安全级选项卡上选择“中”或者“低”,然后关闭后重新打开就可以了,如果保存为“加载宏”,以后只要是“四舍六入五单双”的计算,就可以直接用它,非常方便。VBA的功能是非常强大的,如果读者有兴趣,一定可以解决不少难题。

(作者单位:荆州市水文水资源勘测局)

TA的精华主题

TA的得分主题

发表于 2006-5-31 20:09 | 显示全部楼层

这个自定义函数有点问题?哪位高手给看一下为什么?

0.575 保留出来的是0.57

还有一个问题就是,当把这个自定义函数用在别的函数里计算时,会有保留错误的时候,不知道为什么了!

TA的精华主题

TA的得分主题

发表于 2006-6-1 00:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

这个自定义函数确实有错误,

round5(0.545,2)正确答案应是0.54,却为0.55

round5(0.575,2)正确答案应是0.58,却为0.57

哪位高手给改一下。因为这种修约有很多人需要使用

[此贴子已经被作者于2006-6-1 0:25:08编辑过]

TA的精华主题

TA的得分主题

发表于 2008-7-31 23:47 | 显示全部楼层
谢谢了,看看,也许有用呀!

TA的精华主题

TA的得分主题

发表于 2013-7-16 12:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 iamopq 于 2013-7-16 12:34 编辑

四舍五入和四舍六入五成双.rar (14.77 KB, 下载次数: 369)

四舍五入和四舍六入五成双.rar
最新研究成果
其中一个文件要调出来看按:ALT+F11

给有需要的人:
SHOP.ZXJKY.COM

TA的精华主题

TA的得分主题

发表于 2015-5-20 18:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
向大家学习 谢谢

TA的精华主题

TA的得分主题

发表于 2024-4-19 09:44 | 显示全部楼层
谢谢分享,还是会出错!待修改!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 22:37 , Processed in 0.051519 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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