“四舍六入五单双”利用VBA自定义函数解决

“四舍六入五单双”利用VBA自定义函数解决
“四舍六入五单双”利用VBA自定义函数解决

利用VBA自定义函数解决

业务研究加入时间:2007-3-9 20:42:35 点击:504

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

一、水文及水质资料使用的“四舍六入五单双”,执行《数值修约规范》(GB8170-87)1.拟舍弃数字的最左一位数字小于5时,则舍去,即保留的各位数字不变。

2.拟舍弃数字的最左一位数字大于5时;或者是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的功能是非常强大的,如果读者有兴趣,一定可以解决不少难题。

excel利用vba定义函数的教程全解

excel利用vba定义函数的教程全解 用vba定义函数步骤1:例:下面表格中需要计算一些三角形的 面积 用vba定义函数步骤2:B列是底边长,C列是高,要求在D列 通过公式计算三角形面积。 (通常我们会在D3单元格用公式=B3*C3/2来计算,然后把这个 公式向D列下方拖动复制,得到其他公式。这只是一个简单的例子,通过它来学习编写简单的自定义函数) 用vba定义函数步骤3:打开VBA窗口 按ALT+F11调出VBA窗口,插入一个用户模块。 用vba定义函数步骤4:编写代码 把下面这个自定义函数代码粘贴到刚插入的用户模块中就可以使用了。 Functionsjxmj(di,gao) sjxmj=di*gao/2 EndFunction 这段代码非常简单只有三行,先看第一行,其中sjxmj是自己取的函数名字,括号中的是参数,也就是变量,di表示“底边长”,gao表示“高”,两个参数用逗号隔开。 再看第二行,这是计算过程,将di*gao/2这个公式赋值给sjxmj,即自定义函数的名字。 用vba定义函数步骤5:使用自定义函数 用vba定义函数步骤6:通过上面例子可以了解自定义函数的编 写和使用方法,下面再介绍一个稍微复杂点的自定义函数。

经常对数据进行处理的朋友可以会遇到多条件查找某一个数据,一般这种情况需要编写“数组公式”来解决,公式较长,也不易理解。 比如下面统计成绩的表格,需要根据A1:D7的成绩表,统计出两门功能都在90分以上的学生人数。 大家可以看到在H3单元格中的公式比较长,理解起来也有一定难度。 我们通过自定义函数也可以得到正确结果,函数代码如下: Function统计(a,b,c,d,e) Fori=1Toa.Rows.Count Ifb=a.Cells(i,1)Anda.Cells(i,c)>=eAnda.Cells(i,d)>=eThen 统计=统计+1 EndIf Next EndFunction 这个函数用了五个参数(因为涉及到一个区域和四个条件) 参数a表示要统计的区域,在此例中为B2:E7 参数b表示要统计的是哪一个班级,在此例中为G3单元格 参数d表示数学成绩相对于区域第一列向右的列数,在此例中为4 参数e表示分数,在此例中为90分 提示:要注意参数c和d“相对”于“区域”的列数,并非是从A列开始向右的列数。 把上面这段代码也粘贴到用户模块中就可以使用了

四舍六入五留双规则

四舍六入五留双规则 为了避免四舍五入规则造成的结果偏高,误差偏大的现象出现,一般采用四舍六入五留双规则。 四舍六入五留双规则的具体方法是: (一)当尾数小于或等于4时,直接将尾数舍去。 例如将下列数字全部修约为四位有效数字,结果为: 0.53664——0.5366 10.2731——10.27 18.5049——18.50 0.58344——0.5834 16.4005——16.40 27.1829——27.18 (二)当尾数大于或等于6时,将尾数舍去并向前一位进位。 例如将下列数字全部修约为四位有效数字,结果为: 0.53666——0.5367 8.3176——8.318 16.7777——16.78 0.58387——0.5839 10.29501——10.30 21.0191——21.02 (三)当尾数为5,而尾数后面的数字均为0时,应看尾数“5”的前一位:若前一位数字此时为奇数,就应向前进一位;若前一位数字此时为偶数,则应将尾数舍去。数字“0”在此时应被视为偶数。 例如将下列数字全部修约为四位有效数字,结果为: 0.153050——0.1530 12.6450——12.64

18.2750——18.28 0.153750——0.1538 12.7350——12.74 21.845000——21.84 (四)当尾数为5,而尾数“5”的后面还有任何不是0的数字时,无论前一位在此时为奇数还是偶数,也无论“5”后面不为0的数字在哪一位上,都应向前进一位。 例如将下列数字全部修约为四位有效数字,结果为: 0.326552——0.3266 12.73507——12.74 21.84502——21.85 12.64501——12.65 18.27509——18.28 38.305000001——38.31 按照四舍六入五留双规则进行数字修约时,也应像四舍五入规则那样,一次性修约到指定的位数,不可以进行数次修约,否则得到的结果也有可能是错误的。例如将数字10.2749945001修约为四位有效数字时,应一步到位: 10.2749945001——10.27(正确)。如果按照四舍六入五留双规则分步修约将得到错误结果:10.2749945001——10.274995——10.275——10.28(错误)。

EXCEL VBA 新个人所得税税率自定义函数IN_TAX()及用法

Excel VBA新个人所得税税率自定义函数in_tax()及用法1、VBA代码 Public Function in_tax(in_month As Single)As Single Dim sl As Single,kcs As Single,ynse As Single'定义税率sl,扣除数kcs,应纳税额ynse变量 ynse=in_month-3500 Select Case ynse Case0To1500'如果应纳税额<=1500,税率3%,速算扣除数0。 sl=0.03 kcs=0 Case1501To4500'如果应纳税额(1500,4500],税率10%,速算扣除数105。 sl=0.1 kcs=105 Case4501To9000'如果应纳税额(4500,9000],税率20%,速算扣除数555。 sl=0.2 kcs=555 Case9001To35000'如果应纳税额(9000,35000],税率25%,速算扣除数1005。 sl=0.25

kcs=1005 Case35001To55000'如果应纳税额(35000,55000],税率30%,速算扣除数2755。 sl=0.3 kcs=2755 Case55001To80000'如果应纳税额(55000,80000],税率35%,速算扣除数5505。 sl=0.35 kcs=5505 Case Else'如果应纳税额>80000,税率45%,速算扣除数13505。 sl=0.45 kcs=13505 End Select If ynse<=0Then in_tax=0 Else in_tax=Round(ynse*sl-kcs,2) End If End Function 2、使用方法

史上最全面的计算简体繁体汉字笔画的VBA自定义函数及汉字笔画字库

Function char_wordnum(my_char_word) '史上最权威最全面的计算简体繁体汉字笔画的VBA自定义函数及汉字笔画字库 'from bdQuaker 20140619 '笔画数据库来自在线新华字典 https://www.360docs.net/doc/228759670.html, 'VBA中一条语句内的换行符号,不能超过25个。 '函数功能:对输入的汉字,返回其笔画的数量。 Dim char_wordtable(31), wordnum_i, wordnum_j, wordnum_k, temp_wordnum temp_wordnum = "" If my_char_word = "" Then char_wordnum = 0 Exit Function End If char_wordtable(0) = "" char_wordtable(1) = "" char_wordtable(2) = " " char_wordtable(3) = " 亏马亇么门宀万卄女丬丌乞千犭刃刄三山彡上勺饣士尸扌氵巳纟" + _ "夊土乇丸亾兦亡尢囗卫?兀习夕下乡小忄彐卂劜丫幺也弋亿已义于亐与丈夂之子" char_wordtable(4) = "卬夭仈巴办勽贝币比卞仌不仓长尺车丑丒仇刅从亣歹丹邓弔订仃斗队仒厄乏反方分凤 " + _ " " + _ "闩双水亖太天邒厅圡屯屲瓦卐卍罓尣王韦厃为文毋勿午五乌兮心匂凶牙圠爻辷忆刈艺以弌冘引尹尤友肀予元円月曰匀云勻允帀扎兂仄仉爫爪止支中专卆" char_wordtable(5) = "艾屵凹叐叭扒白半包北本夯必弁边丙氷仢癶布卟仺册冊仧仩仦斥叱叺刍処出处丛匆刌打代歺旦石氹辺忉叨氐电叼汈鸟饤忊艼奵帄叮东冬乧叾对戹弍尓尔尒发犯氾払" + _ "冯弗付玍尕轧匃匄仠甘冮夰乬巪仡功句古冎叧瓜叏丱広宄氿归扖邗汉厈号禾仜弘讧乎囘卉屶屷汇伋记饥刉击叽甲加戋匞叫艽讦节钅丼冋匛旧纠凥且卡冚刊尻厼可叩" + _ "凷圦邝兰艻叻扐氻忇乐立厉屴礼辽另令龙卢圥劢邙矛夘卯们汅灭民皿末仫目母奶艿疒尼囜宁奴汃皮庀丕氕平叵圤扑讫邔刋阡仟巧邛卭芁叴犰扏囚玌丘去厺犮冉让讱" + _ "仞仭辸扔宂邚仨壭讪闪邖叶申圣生辻仕世丗示市史矢失朮术帅甩氺四丝司玊亗他它夳冭台叹讨夲朰田芀圢庁汀仝头凸阤仛讬外罒未戊阢务卌邜仚仙屳写阠兄玄穴廵" + _ "讯训疋圧央业凧匇匜仪肊议阣衤印囙用永由甴幼右邘驭玉込夗戉曱孕匝仔庂汄札乍占仗召厇氶正卮汁只主左" char_wordtable(6) = "吖阨伌安犴仰朳玐百阪邦闭毕朼夶邠冰并伧艸奼汊扱扠犲芆忏产辿伥场仯伡尘臣丞成朾弛池驰伬吃充冲虫岀汌舛传闯创朿次此汆伜存忖邨达汏刐伔凼圵当乭导氘朷" + _

四年级数学下册 五舍六入教案 沪教版

五舍六入 教学目标: 【知识与技能】 初步学会用“五舍六入”的方法来求凑整。 【过程与方法】 1.在经历自主探索的过程中,初步了解生活中除了四舍五入等凑整的方法外还存在其他不同的方法。2.在经历自主探索的过程中,发展思维的灵活性,培养观察、推理、运用知识的能力。 3.经历比较标准的方法,验证的过程,培养合理的思维。 【情感、态度与价值观】 1.初步体验凑整的方法是多种多样的。 2.在自主探索的过程中,培养勇于探索、积极思考的能力。 教学重点及难点: 用“五舍六入法”求一个数的近似数。 教学用具准备: 教具、学具、多媒体设备 教学过程设计: 一、情景引入 1.用“去尾法”和“进一法”和“四舍五入法”凑整到百分位。 5.549 31.208 9.068 12.608 7.624 0.80312 [沟通旧知、建立联系,初步感知。] 2.在数学计算中,我们常用“四舍五入”法来凑整,也经常会运用“去尾法”和“进一法”来凑整。在日常生活中,还有其他的凑整方法吗? 课件展示:有些超市和医院结算时自设“五舍六入”法。 [问题引入,激发学生的探究兴趣] 二、探究新知 (一)主动探究 1.你认为“五舍六入”凑整该怎样凑整?(小组讨论) 结论:尾数小于或等于5的舍去 尾数大于或等于6的就向前一位进1 2.讨论解决例题: 有些超市和医院结算时自设“五舍六入”:

一共要付148.15元,医保卡里扣了139.25元,还需支付多少元现金? (二)独立思考解答。 (三)对于不同的答案展开讨论。 1.归纳。 2.仔细审题,根据题意选择凑整方法。 “五舍六入”凑整:尾数小于或等于5的舍去尾数大于或等于6的就向前一位进1。 [借助现实生活中的例子引出了凑整的另一种“五舍六入”,让学生初步了解生活中除四舍五入等凑整方法以外还存在其他不同方法。] 三、巩固练习 1.根据购物清单计算并填空(课件展示)(略) (1)独立练习并列出算式 (2)讨论:说说你是怎样想的?你认为解题时要注意些什么? (3)说说“五舍六入”凑整方法 2.练一练:用“五舍六入”法将下列小数凑整到十分位 35.26 20.205 87.087 66.66 0.625 25.06 115.35 201.56 [运用所学知识进行模仿练习,加深对所学知识的理解。] 3.“六一”节到了, 小亚、小巧、小胖和小丁丁去超市买学习用品送给低年级小朋友。小亚买了每本2.48元的笔记本3本;小巧买了3.59元的钢笔2支,小丁丁买了每支1.53元的笔5支,小胖买了3.39元的笔袋2个,这家超市结算时采用的是“五舍六入”法到0.1元,他们实际各支付多少元?[能正确运用“四舍五入法”解决日常生活中的实际问题,将“五舍六入”的思想应用到解决实际问 题的过程中,并通过联系生活实际, 激发学生学习数学的兴趣。] 四、课堂小结 说说这节课你有哪些收获?还有什么疑问的地方。(引导学生进行总结) [对所学的新知识进行必要的梳理] 五、作业布置 1.填空: (1)测量一下你的数学书的长是()厘米,宽是()厘米。(2)一个三位小数用四舍五入法凑整后的结果是4.80,那么这个三位小数有()个,最大的是()。 (3)医院用“五舍六入”法结帐,小巧的妈妈看病花了89.75元,那么妈妈实际支付了()元。2.星期天,爸爸带了小丁丁和其他小朋友到公园游玩,一大早,爸爸来到超市购买了一些物品,购物帐单如下:

“四舍六入五单双”利用VBA自定义函数解决

利用VBA自定义函数解决 业务研究加入时间:2007-3-9 20:42:35 点击:504 Microsoft Office套装办公软件是大家十分熟悉的办公软件,在工作中经常使用。但在水文工作中,仍然感觉到有很不方便的时候!比如,水文行业广泛使用的“四舍六入五单双”,就很难用Microsoft Office中的内部函数进行处理。但是与Microsoft Office套装办公软件绑定的VBA(Visual Basic For Application)语言提供了强大的二次开发功能,笔者以Excel为例,用它来解决上面所提到的问题,就非常容易了。 一、水文及水质资料使用的“四舍六入五单双”,执行《数值修约规范》(GB8170-87)1.拟舍弃数字的最左一位数字小于5时,则舍去,即保留的各位数字不变。 2.拟舍弃数字的最左一位数字大于5时;或者是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既可以是单元格,也可以是输入的数值),回车结果就出来了。如果出现

爱情心理测试题大全

爱情心理测试题大全 一、寻找走失的情人看你的爱情观 你与情人去爬山,一不小心走失了,你找不到他,他也找不到你,最后你会采取什么行动? 1 、找一个可以休息的地方,等待对方来找你。 2 、一定会把对方找到。 3 、不相信会走失,因此慢慢闲逛看风景,等待对方找到自己。 4 、报警,让警察来帮忙找对方。 二、走姿观男人 从“走姿”观察人,世界各国古已有之。观察一个男人怎样走路,并从走姿中透视其内心,你肯定会觉得妙趣横生。 一、步伐急促的男人。二、步伐平缓的男人。三、身体前倾的男人。四、军事步伐的男人。五、踱方步的男人。 三、你会不会旧情重燃? 爱情这回事,合合分分,聚散无常。同是有情人,有时面对感情的破裂或意外的压力,却不得不选择分手这条路。虽然两个人已各奔东西,但往日的那份柔情却常留心底,时不时勾起伤心的回忆。但是,这就命已注定了么?其实不然,既然世间上有许多人离婚又复婚,那么,业已分开的一对恋人,某一方突然回心转意再次出现在昔日恋人的面前,这种可能性也非常之大。或者,纯属机缘巧合,两个人再次出现在彼此的视野中。 问题:假如你遇到这种情况,你平静已久的心潮再度泛起涟漪之际,是接受还是拒绝,是旧情复燃还是破镜难圆,你恐怕决心难下吧?我们为你列出下列图形,由你的选择,不难窥知你真正的心意,助你做出明智的决断。 1 、三角形物体。 2 、方形物体。 3 、圆形物体。 4 、圆柱形物体。 四、探测你的心机 在一个晴空高照的日子,是最适合出游的。假如,你和你的朋友漫步在森林之中,无意中发现了一间隐藏在林中的建筑物,依你的直觉,你会认为这是何种建筑物? A :小木屋。 B :宫殿。 C :城堡。 D :平房住家。 五、哪类女孩是你的情敌? 如果有机会当歌手,你希望成为哪一类型的歌手? A 、玉女歌手 B 、创作歌手 C 、性感歌手 D 、前卫歌手

excel中161个VBA_自定义函数(超级实用)(精)

目录 '1.函数作用:返回 Column 英文字 (9) '2.函数作用:查询某一值第num 次出现的值................9 '3.函数作用:返回当个人工资薪金所得为2000元(起征点为850元时的应纳个人所得税税额.............................10 '4.函数作用:从形如"123545ABCDE"的字符串中取出数字....11 '5.函数作用:从形如"ABCD12455EDF"的字符串中取出数字...11 '6.函数作用:按SplitType 取得RangeName 串值中的起始位置12 '7.函数作用:将金额数字转成中文大写....................13 '8.函数作用:计算某种税金..............................18 '9.函数作用:人民币大、小写转换........................19 '10.函数作用:查汉字区位码.............................20 '11.函数作用:把公元年转为农历.........................21 '12.函数作用:返回指定列数的列标.......................42 '13.函数作用:用指定字符替换某字符.....................43 '14.函数作用:从右边开始查找指定字符在字符串中的位置...43 '15.函数作用:从右边开始查找指定字符在字符串中的位置...44 '16.函数作用:计算工龄.................................44 '17.函数作用:计算日期差,除去星期六、星期日.. (45) '18.函数作用:将英文字反转的自定函数 (46) '19.函数作用:计算个人所得税...........................46 '20.函数作用:一个能计算是否有重复单元的函数...........47 '21.数字金额转中文大写................................48 '22.函数 作用:将数字转成英文...........................49 '23.函数作用:人民币大小写转换.........................52 '24.函数作用:获取区域颜色值...........................53 '25.函数作用:获取活动工作表名.........................53 '26.函数作用:获取最后一行行数. (54) '27.函数作用:判断是否连接在线.........................54 '28.函数作用:币种转换.................................54 '29.函数作用:检验工作表是否有可打印内容...............55 '30. 函数作用:查找一字符串(withinstr在另一字符串中(findstr1中某一次(startnum出现 时的位置,返回零表示没找到。..................................................57 '31.函数作用:增加文件路径最后的“\”符号..............58 '32.函数作用:计算所得税...............................58 '33.函数作用:从工作表第一行的标题文字以数字形式返回所在列号..................................................58 '34.函数作用:在多个工作表中查找一个范围内符合某个指定条件的项目对应指定范围加总求和..........................59 '35.函数作用:返回

四舍六入五成双进位规则在EXCEL中的实现

龙源期刊网 https://www.360docs.net/doc/228759670.html, 四舍六入五成双进位规则在EXCEL中的实现 作者:郑德彬 来源:《科学与信息化》2017年第18期 摘要通过Excel通用函数的编辑,在软件中实现计量学范畴内“四舍六入五成双”进位规则运算。 关键词计量学;四舍六入五成双;Excel 1 四舍六入五成双进位规则 在现代化学、工程学、计量学、统计学等理工学科的数据处理运算中。对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,“四舍六入五成双”是其中一种相对精确、科学的计数保留法数字修约规则。根据统计学理论,在0-9 的数列排序中,数字5处于中间位。根据传统的“四舍五入”或进位规则,在大量运算时,将导致因进位引起的均值误差整体偏大。采用“四舍六入五成双”进位规则可以有效降低大数据量测量结果受到修约误差的影响。具体运算方式为:①被修约的数字等于或小于4时,该数字舍去;②被修约的数字等于或大于6时,则进位;③被修约的数字等于5时,要看5前面的数字,若是奇数则进位,若是偶数则将5舍掉,即修约后末尾数字都成为偶数;若5的后面还有不为“0”的任何数,则此时无论5的前面是奇数还是偶数,均应进位。 2 该算法在EXCEL中的实现[1] 在EXCEL中,通过单元格内键入复合公式“=IF (A1)-INT(A1))0.5,ROUND (A1),0),IF(MOD(INT(A1)),2)=0,INT(A1),ROUND((A1),0))实现对A1单元格输入值判断正负并分别进行个位四舍六入五成双取整运算。式中分别 使用IF,INT,ROUND,MOD,四个Excel标准函数。其中: IF条件判断函数,其作用为根据设定条件输出不同的结果值,其语法为: 单元格键入“=if(条件,满足条件的结果,不满足条件的结果)” 多条件选择使用,单元格键入“=if(条件1,满足条件的结果,if(条件2,满足条件的结果,if(条件3,满足条件的结果)……)))”也可将以上两种语法嵌套使用。 (2003及以下Excel版本最多支持7层嵌套)

Excel VBA编程 调用函数

Excel VBA 编程 调用函数 调用函数时,为了使用函数的返回值,必须指定函数给变量,并且用括号将参数封闭起来。 语法:函数过程名([参数列表]) 由于函数过程名返回一个值,故函数过程不能作为的单独语句加以调用,必须作为表达式或表达式的一部分,然后再配以其他的语法成分构成语句。 在调用函数之前,应首先来定义一个函数,如定义一个myreplace(S,Olds,NewS)函数过程,即用News 子字符串替换在S 字符串中出现的OldS 字符串。 例如,下面的程序是对前面自定义的函数过程CalculateSquareRoot 的调用,其代码如下: Private Sub CommandButton1_Click() Dim a a = InputBox("请输入数字") '调用CalculateSquareRoot 函数 MsgBox "计算平方根:" & CalculateSquareRoot(CInt(a)) End Sub 返回工作表中,单击【计算平方根】按钮,在弹出的如图9-3所示的对话框中,输入数字 25。然后,单击【确定】按钮,即可弹出如图9-4所示的效果。 图9-3 输入数字 图9-4 显示结果 注 意 “参数列表”称为实参或实元,它必须与形参保持个数相同,位置与类型一一对应。其中,实参可以是同类型的常数、变量、数组元素或表达式。 另外,在Visual Basic 中,通过WorksheetFunction 对象可使用Excel 工作表函数。例如,以下Sub 过程使用Min 工作表函数来确定单元格区域中的最小值,其代码如下: Sub UseFunction() Dim myRange As Range Set myRange = Worksheets("Sheet1").Range("A1:C10") answer = Application.WorksheetFunction.Min(myRange) MsgBox answer End Sub 从上述的代码可以观察到,用户将变量myRange 声明为Range 对象,然后将其设置为Sheet1上的A1至C10单元格区域。指定另一个变量answer 为对myRange 应用Min 函数的结果。最后,answer 的值显示在消息框中,效果如图9-5所示。 输入 单击

用VBA编写Excel自定义的累加函数

用VBA编写Excel自定义的累加函数 郑云勇 云南楚雄思远投资有限公司 摘要:Excel是常用的数据统计分析软件,本文介绍了用VBA编写加载宏的方法来扩展、定制Excel,以适合工程统计专业的特殊需要。下面,讨论如何实现一个自定义的具有任意合计形如“30.2m/165.45m3”的“分子/分母”工程量统计功能的函数,由于Sum函数系统已经内置,我们要实现的函数不妨命名为uLSum和uRSum。 关键词:Excel,定制,加载宏 1引言 电子表格软件Microsoft Excel具有快捷方便的数据输入方式和强大的数据处理能力,是工程地质中常用的数据统计分析软件,为我们的工作带来了极大的方便。但Excel毕竟只是一个通用的办公软件,对于工程专业中的各种特殊需求,它自然不会有专门的功能支持。比如:采矿工程师在做每年的采掘生产计划时,通常遇到要累加掘进工程量的合计数,即“30.5/125.6”加“120.2/625.8”的合计,我们通常的做法是分步完成,先将分子之、分母之和求出来后,在填入单元格中。或者将分子、分母分别填入两列中,分别用sum函数求和。这样既劳神,又容易出错,特别是对大量数据进行复杂的公式计算。如果从头编写一个独立、专门的计算程序来处理,则似有小题大作之嫌,而且还不能与Excel无缝集成。那么有

没有更好的解决办法呢?答案是肯定的,那就是定制Excel,通过编程扩展它的功能。 事实上,Excel作为Microsoft最优秀的软件之一,很早就开始提供了二次开发的接口,4.0版以前有XLM,4.0版又发布了Excel C API,5.0版则内置了VBA。现在的Excel,除了人所共知的操作功能外,还是一个完善的软件开发平台。它拥有完备的ActiveX Automation服务器和客户机机制,可以通过编程对其进行全方位的扩展、定制,实现各种自定义功能。基于ActiveX Automation技术,使用C/C++等多种支持Automation的编程语言均可控制Excel,但我们最为熟悉和常用的还是内置于Excel中的VBA。 2VBA简介 Visual Basic for Application(VBA)是Microsoft面向最终用户的应用软件编程语言。它最早出现于Microsoft的Excel和Project中,如今VBA已成为VB和所有Office产品的组件。另外,越来越多的软件开发商购买了VBA语言的使用权,如常用的绘图软件AutoCAD等均已支持VBA作为二次开发工具。这意味着我们懂得VB,就已经懂得了VBA,反之亦然。 VBA的最大特点和最大优点是利用面向对象(OOP)的ActiveX Automation技术,使语言的引擎在技术上与开发环境分离,这可以从在任何VBA的IDE环境中都可以看到VBA单独的入口得到印证。因此,VBA的功能在很大程度上依赖于它的客户显露的Automation 接口,例如,VB与Office套件中的VBA,能完成的功能就大不一样。

四舍六入五成双的算法

huangjing81 油果子 等级: 结帖率:100% 楼主 发表于: 2007-07-11 10:39:51 哪位大侠能帮我写一个四舍六入五成双的算法,最好是封装成函数,小弟在此感激不尽!!! zjcxc 邹建 等级: 结帖率:100% 2 2 更多勋章 回复于: 2007-07-11 10:46:00 chuifengde 树上的鸟儿 等级: 结帖率:100% 2007-07-11 10:47:14 friendliu 无为 等级: 结帖率:100% #3 得分:1 回复于: 2007-07-11 10:57:31 四舍六入五成双的算法: 四舍六入五考虑,即当尾数≤4时舍去,尾数为6时进位。当尾数4舍为5时,则应是末位数是奇数还是偶数,5前为偶数应将5舍去,5前为奇数应将5进位

tufun * * 等级: 结帖率:96.1% #4 得分:1 回复于: 2007-07-11 11:00:53 是变成偶数吗 把数除2,然后四舍五入,再乘2 huangjing81 油果子 等级: 结帖率:100% 原 结果 1.444 1.44 1.446 1.45 以下为有效位数后一位为5的情况 1.445 1.44 1.435 1.44 1.425 1.42 1.635 1.64 如果有效位数后一位是5,则看有效位数最后一位是奇数还是偶数,如果是偶数,则舍弃,如果是奇数,则进位,跟四舍五入有这样一点区别

hellowork 一两清风 等级: 结帖率:100% 3 #7 得分:39 回复于: 2007-07-11 11:55:57 if object_id('fnRound') is not null drop function fnRound GO create function fnRound(@num float,@i int) returns varchar(20) as begin declare @str varchar(20) /*转换成字符类型*/ declare @str2 varchar(20) /*小数位数后面的字符串*/ declare @str3 varchar(2) /*小数位数字符串*/ set @str = convert(varchar,@num) set @str2 = reverse(substring(reverse(@str),1,charindex('.',reverse(@str)) - 1 - @i)) set @str3 = substring(@str,charindex('.',@str) + 1,@i) if @str2%5 = 0 and @str3%2 = 0 /*如果符合"五成双"*/ set @str = substring(@str,1,charindex('.',@str) + @i) else /*否则四舍五入*/ set @str = convert(varchar,round(@num,@i)) RETURN @str end GO ----测试 declare @num float,@num2 float,@num3 float,@num4 float,@i int select @num = 1.45000,@num2 = 1.3500,@num3 = 1.4501,@num4 = 1.4600

原创—EXCEL VBA SPC自定义函数包括CPK PPK CP……

'################## stdevR=average(max-min)/R系数组内差 Function stdevR(ParamArray rng() As Variant) As Variant Dim rang As Range, rngi As Range, T As Single, F As Single, i As Integer, e As Integer Dim trr Dim arr() Dim brr() For Each r In rng If rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r) For Each c In r Next Next n = rang.Cells.Count aa = rang.Columns.Count bb = rang.Rows.Count cc = Application.WorksheetFunction.Ceiling(n / 5, 1) If aa > 1 Then ReDim arr(1 To bb) For i = 1 To bb Set rngi = rang(i, 1).Resize(1, aa) arr(i) = Application.Max(rngi.Value) - Application.Min(rngi) Next F = Application.WorksheetFunction.Average(arr) trr = [{0,1.128,1.693,2.059,2.326,2.534,2.704,2.847,2.97,3.078,3.173,3.258,3.336,3.407,3.472,3.532,3.58 8,3.64,3.689,3.735,3.778,3.819,3.858}] T = trr(aa) stdevR = F / T Else e = 0 ReDim brr(1 To cc) For i = 1 To cc Set rngi = rang(1, 1).Resize(5, 1).Offset(e, 0) brr(i) = Application.Max(rngi.Value) - Application.Min(rngi) e = e + 5 Next F = Application.WorksheetFunction.Average(brr) T = 2.326 stdevR = F / T End If End Function '################## ppk=min(ppu,ppl)=(1-k)*pp 整体的过程能力指数带中心值的 Function ppk(USL As Variant, LSL As Variant, ParamArray rng() As Variant) As Variant Dim AV As Single, rang As Range, n As Integer, T As Single, SumN As Single, SE As Single, k As Single For Each r In rng If rang Is Nothing Then Set rang = r Else Set rang = Union(rang, r) For Each c In r

数字修约规则-----四舍五入和四舍六入五留双规则

数字修约规则 现在被广泛使用的数字修约规则主要有四舍五入规则和四舍六入五留双规则。 [编辑] 四舍五入规则 四舍五入规则是人们习惯采用的一种数字修约规则。 四舍五入规则的具体使用方法是: 在需要保留有效数字的位次后一位,逢五就进,逢四就舍。 例如:将数字2.1875精确保留到千分位(小数点后第三位),因小数点后第四位数字为5,按 照此规则应向前一位进一,所以结果为2.188。同理,将下列数字全部修约为四位有效数字,结果为: 0.53664—0.5366 10.2750—10.28 18.06501—18.07 0.58346—0.5835 6.4050—16.41 27.1850—27.19 按照四舍五入规则进行数字修约时,应一次修约到指定的位数,不可以进行数次修约,否则将 有可能得到错误的结果。例如将数字15.4565修约为两位有效数字时,应一步到位:15.4565——15(正确)。如果分步修约将得到错误的结果:15.4565——15.457——15.46——15.5——16(错误)。 四舍五入修约规则,逢五就进,必然会造成结果的系统偏高,误差偏大,为了避免这样的状况 出现,尽量减小因修约而产生的误差,在某些时候需要使用四舍六入五留双的修约规则。 [编辑] 四舍六入五留双规则 为了避免四舍五入规则造成的结果偏高,误差偏大的现象出现,一般采用四舍六入五留双规则(Banker's Rounding)。四舍六入五留双应该改为: 四舍六入逢五无后则留双,这样描述更容易理 解和记住。 四舍六入五留双规则的具体方法是: (一)当尾数小于或等于4时,直接将尾数舍去。 例如将下列数字全部修约为四位有效数字,结果为: 0.53664—0.5366 0.58344—0.5834 16.4005—16.40 27.1829—27.18 10.2731—10.27 18.5049—18.50 (二)当尾数大于或等于6时,将尾数舍去并向前一位进位。 例如将下列数字全部修约为四位有效数字,结果为: 0.53666—0.5367 8.3176—8.318 16.7777—16.78 0.58387—0.5839 10.29501—10.30 21.0191—21.02 (三)当尾数为5,而尾数后面的数字均为0时,应看尾数“5”的前一位:若前一位数字此时 为奇数,就应向前进一位;若前一位数字此时为偶数,则应将尾数舍去。数字“0”在此时应被视为 偶数。 例如将下列数字全部修约为四位有效数字,结果为: 0.153050—0.1530 12.6450—12.64 18.2750—18.28 0.153750—0.1538 12.7350—12.74 21.845000—21.84 (四)当尾数为5,而尾数“5”的后面还有任何不是0的数字时,无论前一位在此时为奇数还 是偶数,也无论“5”后面不为0的数字在哪一位上,都应向前进一位。 例如将下列数字全部修约为四位有效数字,结果为: 0.326552—0.3266 12.73507—12.74 21.84502—21.85 12.64501—12.65 18.27509—18.28 38.305000001—38.31 按照四舍六入五留双规则进行数字修约时,也应像四舍五入规则那样,一次性修约到指定的位数,不可以进行数次修约,否则得到的结果也有可能是错误的。例如将数字10.2749945001修约为四 位有效数字时,应一步到位:10.2749945001——10.27(正确)。如果按照四舍六入五留双规则分步 修约将得到错误结果:

(计量)数值修约规则

中华人民共和国国家标准数值修约规则 在进行具体的数字运算前,按照一定的规则确定一致的位数,然后舍去某些数字后面多余的尾数的过程被称为数字修约,指导数字修约的具体规则被称为数字修约规则。 科技工作中测定和计算得到的各种数值,除另有规定者外,修约时应按照国家标准文件《数值修约规则》进行。 数字修约时应首先确定“修约间隔”、“有效位数”,即保留位数。一经确定,修约值必须是“修约间隔”的整数倍,保留至“有效位数”。 然后指定表达方式,即选择根据“修约间隔”保留到指定位数,或将数值修约成n位“有效位数”。 使用以下“进舍规则”进行修约: 1. 拟舍弃数字的最左一位数字小于5时则舍去,即保留的各位数字不变。 2.拟舍弃数字的最左一位数字大于5;或等于5,而其后跟有并非全部为0的数字时则进一即保留的末位数字加1。(指定“修约间隔”或“有效位数”明确时,以指定位数为准。) 3.拟舍弃数字的最左一位数字等于5,而右面无数字或皆为0时,若所保留的末位数字为奇数则进一,为偶数(包含0)则舍弃。 4.负数修约时,取绝对值按照上述1~3规定进行修约,再加上负号。 不允许连续修约 数值修约简明口诀:「4舍6入5看右,5后有数进上去,尾数为0向左看,左数奇进偶舍弃」。 现在被广泛使用的数字修约规则主要有四舍五入规则和四舍六入五留双规则。 四舍五入规则 四舍五入规则是人们习惯采用的一种数字修约规则。 四舍五入规则的具体使用方法是: 在需要保留有效数字的位次后一位,逢五就进,逢四就舍。 例如:将数字2.1875精确保留到千分位(小数点后第三位),因小数点后第四位数字为5,按照此规则应向前一位进一,所以结果为2.188。同理,将下列数字全部修约为四位有效数字,结果为:

VBA自定义函数选合集(代码注释)

自定义函数选 附代码注释 By 蓝桥玄霜 前言 我们平时在工作表单元格的公式中常常使用函数,Excel自带的常用的函数多达300多个,功能强大,丰富多彩,博大精深。在Excel内置函数和扩展函数中有十多个应用领域的函数,如数学与三角函数、统计函数、文本和数据函数、查找和引用函数、数据库函数、财务函数、日期和时间函数、信息函数、工程函数和宏表函数等等。 但是我们每个人还可能有各种各样的问题而不能直接应用这些函数得到解决,于是Excel也提供了VBA可以让我们自己编一个自定义函数来解决自己特定的需求。以下挑选一些自定义函数,由简到繁,附以代码注释,供大家参考。 第1例折扣函数 一、题目: 要求编写一个当销售数量大于等于100时,售价打九折的计算折扣的自定义函数。二、代码: Function Zekou(sul, jiag) As Double If sul>=100 Then Zekou =sul*jiag*0.1 Else Zekou =0 EndIf Zekou =Application.Round(Zekou,2) End Function 三、代码详解 1、Function Zekou(sul, jiag) As Double :自定义函数的开始语句。 自定义函数总是以Function开头,以End Function语句结束。自定义函数的代码一定要放在标准模块里面。 Zekou是函数名,名字可取一个较短的描述信名称,这样容易记忆。如sul数量和jiag 价格,这里用的是拼音字母。函数后括号里的两个变量叫做函数的参数。两个参数都没有显式声明数据类型,都是可变型数据类型variant。AS Double 表示函数返回值的数据类型是双精度浮点型数据。 2、If sul>=100 Then 如果sul(数量)大于等于100,那么 这是标准的If…Then…Else判断语句,意思是如果第一个条件成立,或者说满足了第一个条件,那么执行Then以后的语句;否则执行Else以后的语句。

相关文档
最新文档