各位朋友,你们好!首先祝大家中秋节快乐!
今天和大家分享的是,关于excel中超长计算式的解决方案。
在前些时间,分享过一篇关于在excel中,用【EVALUATE】函数自动计算表达式的结果,并且支持带注释的计算式的方法(点击访问)。
但是那个方法有两个缺陷:
1、注释的位置必须统一,要么在数值前面,要么在数值后面,否则结果就会出错。
2、计算式太长,结果就会出错。
上面那两个痛点,最重要的还是第二条。但是作为建筑行业从业人员,在需要手动算量时,难免遇到一些复杂情况,写出一个超级长的计算式。为解决以上两个痛点,写了一个自定义函数,来解决此问题,给大家演示效果。
一、加载宏
因我业余的水平有限,编写的函数代码很长,不方便直接发到文章中,所以做成了一个加载宏文件,你们下载后,直接加载到excel中,就可以直接使用。下面是加载宏的演示。
二、使用函数
当把自定义函数加载宏文件加载到excel中时,这个函数就可以像excel的内置函数一样使用了,使用这个函数,这个函数的特点:
1、可以计算超长字符的计算式;
2、对注释内容的位置没有要求,可以随意在计算式中做注释;
3、计算式中支持使用excel的内置函数;
4、可以像使用内置函数一样,直接引用单元格,就不受计算式和结果单元格相对位置的影响。
三、移植函数
如果在文件中使用了加载宏的函数,这个文件发送给其他人后,若没有加载自定义函数的代码,结果就会显示错误。怎么样让这个函数和文件放到一起呢?
这个就需要将自定义函数的代码放到需要这个函数的文件中,下面是操作演示::
1、先在VBE编辑器中,打开加载宏文件的自定义函数代码,全部复制下来;
2、在需要这个函数的文件中,在VBE界面插入【模块】,然后将代码粘贴到模块中;
3、取消加载宏;
4、就可以正常使用此函数了,并且函数也和文件一起,只要支持VBA的excel打开,就可以正常显示和使用。
三、获取函数
上面,我把这个函数的演示、使用、移植全部都介绍了以遍,需要这个函数的朋友,下载文件后,就可以按照上面的操作,来达到自己所需的效果了。
!!!获取文件的方式:
1、 点赞 评论 分享;
2、后私信发送关键字:表达式
四、写这个自定义函数的思路
如果你只是想用这个函数,这篇文章看到这里就可以了。下面介绍的是这个自定义函数的原理。
由于【EVALUATE】函数不支持超过256字符的计算式,那么,就通过计算式拆分的方式,将一个超长的计算式不断拆分、简化和计算,使其长度最终小于256个字符的目的,最后再使用【EVALUATE】函数计算出结果。
那么计划计算式分几部呢?
清除注释信息→将函数公式部分转换为结果→将括号部分转化为结果→得到一个纯无括号的四则运算计算式→如果计算式长度还大于256字符,再从头开始截取小于256字符的一段计算式,将其转化为结果,替换到计算式中;如此反复操作,直到计算式的长度≤256个字符。
1、清除计算式中的注释信息。
文字注释要占用计算式的长度,且会影响计算,所以首先就是将注释内容清除,这是简化计算式的第一步;
2、将计算式中的函数、公式部分转化为结果
函数有括号,且有些函数的参数不能提前转换为结果,所以在简化括号计算前,需要先将函数公式部分转换为结果,并用结果替换掉原来的函数公式部分。
3、简化括号
在四则运算中,括号的运算级别较高,为避免结果出错,所以需要按照四则运算的法则,按照一定的顺序来计算和简化。
简化括号,难点在于判断括号的层数、判断哪个左括号和哪个右括号是一对的,尤其是遇到复杂的括号时,如果判断不对,就会导致计算结果出错。只有判断正确了,才能将一对括号中的内容提取出来,并正确地转化为结果,然后导入到计算式中。
然后一步一步地重复这个操作,直到所有括号都简化完毕,就得到一个无括号的四则运算的计算式。
4、简化计算式
如果经过上述操作,简化后最终的计算式还大于256字符,那么就用加减符号将计算式拆分为无数段,按照从左往右的顺序,先将乘除的部分计算成结果,然后替换到计算式中。然后不断重复上述操作,直到计算式长度达到要求。
经过以上4个步骤,再长的计算式,几乎都可以简化,那么,只要excel单元格中能录入的计算式,用这个自定义函数都可以计算了。
关于自己定义函数的思路,这里i介绍的仅仅是思路,在代码中还有详细的注释信息供参考,有兴趣的话,可以自己去看看。
最后,要使用此功能,需要是微软的Excel或专业版的WPS(个人版的WPS不支持宏,有需要专业版WPS的朋友,可以私信发送关键字【WPS】获取下载连接)。
最后,祝大家中秋快乐,阖家欢乐。