Excel被Microsoft官方冷藏的函数了解下
Posted 旺丁旺财杂货铺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Excel被Microsoft官方冷藏的函数了解下相关的知识,希望对你有一定的参考价值。
精选
THEBEST
我们最懂你
一段时间没写阅读量持续扑街的Excel教程了,想行谢过最近一直有帮我分享装修版块文章的小伙伴们,无以为报,只能继续写下去。这次为大家分享的是三个被Excel冷藏起的函数,也就是说你找Help都找不到用法的函数
前段时间,亨利做WBS的时候问我为什么两个时间比较为什么出错(直接用>或者<),之前想教他用DATEDIF这个函数算时间隔离再与 > 0比较的,但想想他又不是算工期、工龄之类的,还是教他 时间B-时间A<>0 做判断好了。
由于工作原因,偶尔我还是要算一下工期的,但老人家经常会忘了B-A+1或者B-A-1,那么DATEDIF就能帮上忙了公式=datedif(开始日期,结束日期,"D"),就可以算出日期了。如果要算相隔月数,公式改成=datedif(开始日期,结束日期,"M")。年的话改成=dateif(开始日期,结束日期,“Y”)。
宏表函数Evaluate这个函数,对于Microsoft来说是冷藏函数,属于Excel 4.0时代(上世纪90年代)的东西,好久之前已经请出了直接使用的行列,有前朝余孽的感觉。但偏偏金山的WPS ET还能直接用,习惯用微软家的Excel收到一些用WPS直接用Evaluate的工程量计算表简直想打人。下边先引用下Excel使用经典但不好用的方法
A列已经输入公式了,Ctrl+F3呼出名称管理器▼
新建“计算”公式▼
在B列输入=计算,B列生成结果▼
好像很方便,但这个使用方法有点Bug:万一C列也要输入公式,D列也要生成C列的结果,那就又要新建多少“计算1”了,作为一个强迫症大神,这种生成垃圾定义名的做法我实在受不了,所以PO主我几年前就放弃了这种傻傻的做法,把Evaluate(变量)封装VBA自定义函数,让它能又重新回归直接使用的领域▼
ALT+F11呼出VBA界面,右键新建“模块”,输入函数▼
Function jsjg(in_num)
If Len([in_num].Value) > 254 Then
jsjg = "对不起,请输入不超过255字符的公式"
Else
If VarType(in_num) = 0 Then
jsjg = 0
Else
If VarType(Evaluate([in_num].Value)) = vbError Then
jsjg = "输入值有误,请检查或重新输入"
Else
jsjg = Evaluate([in_num].Value)
End If
End If
End If
End Function
,关掉VBA界面就可以在,在单元格上直接输入公式=jsjg(公式所在单元格)计算出结果了,还增加了公式字符长度限制在255个的限制,和单元格数据类型错误的的提示。这里还是提醒一下,使用这种函数无论是名字定义或者VBA自定义函数都需要把文件存在支持宏的格式,如*.XLSM,*.XLS,*.XLSB
这个函数就有点小众了,没记错的应该是中文版的Office特有的,如果用不了要把office工具改为中文才能用:
开始菜单→office 工具→语言设置→主要编辑语言,改为:中文()
NumberString的功能是阿拉伯数字转换成中文的函数,是不是有希望把金额转换成大写呢先看看下面▼
小数点后面是不能识别的,而且没有金额的圆角分四舍五入,原本想改造成VBA的自定义函数的,结果WorksheetFunction也不支持引用这个函数,ExecuteExcel4Macro的方法也不能用在自定义Function里面,好吧,果然之前小写转大写的函数写得复杂是有道理的
大家就用来转序号吧,=Numberstring(目标,1)
其实除了NumberSting还有个同宗兄弟DateString,不过比NumberString还要鸡肋,例如1996-06-06,它转出来的是这样的,实用价值低到拿不出手▼
1
看到最后第3个,估计有人想揍我。唉,其实我也是想你们提前避坑(心虚ing),看我的教程被坑总好过看别人写Numberstring存有幻想嘛(MD,我还白花了半个小时封装VBA自定义函数呢)!!总之,有我在,还是有干货的
Feel Free to Enjoy your Life!
▼▼▼更多历史文章请点击“阅读原文”
以上是关于Excel被Microsoft官方冷藏的函数了解下的主要内容,如果未能解决你的问题,请参考以下文章
跨表提取数据,函数高手被名不经传的Microsoft Query 直接KO
大家一起学Microsoft Excel函数之ACCRINTM 函数