evaluate计算工程量的表达式
小伙伴们好,今天和大家分享点特别的——表达式的计算。有些小伙伴可能是做工程方面的工作,要用excel来记录工程量的表达式,并计算其结果。那么今天就来说下工程量表达式的计算方法。
A列是源数据,都是一些表达式,但是其中会有文字说明的部分。要计算其结果就会增加一些难度。其中B,C两列是计算的结果。
我们用到的函数是evaluate,它是一个宏表函数,要在定义名称里使用。它可以计算数字表达式的结果。下面做一个简单的例子,计算下面表达式的结果。
首先选中B7单元格,点【公式】-【定义名称】-弹出【新建名称】对话框。在名称中输入一个名称,这里输入jg;引用位置输入公式=evaluate(a7),点确定。
这样名称就定义好了,然后在B7单元格输入公式=jg,回车确定,就得到表达式的结果。
数字表达式的计算方法了解了,就要看最开始的工程量表达式的计算问题了。有些小伙伴可能会想,既然evaluate可以计算数字的表达式,那么只需将工程量表达式中的文本替换掉就可以用evaluate来计算了。也就是将1*2[一层]+2*3[二层]替换为1*2+2*3。没错,这种思路是可以的,不过要替换多次,如果有多个中括号包含的文字,那就麻烦了。
其实evaluate除了可以计算数字的表达式,也可以计算包含函数的表达式。所以我们要将1*2[一层]+2*3[二层]替换为1*2*istext("[一层]")+2*3*istext("[二层]"),这样就替换为包含函数的表达式,然后再用evaluate求值。
关键的部分就是怎么将1*2[一层]+2*3[二层]替换为1*2*istext("[一层]")+2*3*istext("[二层]")?用的函数为substitute。公式为=SUBSTITUTE(SUBSTITUTE(A2,"[","*istext(""["),"]","]"")")。
替换的公式用了2个substitute,第1个是将左中括号[替换为*istext("[,第2个是将右中括号]替换为]")。但是要注意公式中的双引号,双引号本身作为字符,在公式中要双倍双引号。之前有一篇文章详细说过这个问题。
替换完成后,只需将包含函数的表达式放在evaluate中就可以了。继续定义名称,创建一个结果1的名称,引用位置输入公式=EVALUATE(SUBSTITUTE(SUBSTITUTE(A2,"[","*istext(""["),"]","]"")")),点确定。
然后在B2单元格输入公式=结果1,回车确定就算出工程量表达式的计算结果了。
还有其他的公式可以完成,如=EVALUATE(SUBSTITUTE(SUBSTITUTE(A2,"[","+n("""),"]",""")")),当然也要定义为名称。
最后要把excel文件保存为启用宏的工作簿,也就是(.xlsm)格式的文件,否则公式会丢失。感兴趣的小伙伴就试一下吧。
链接:
https://pan.baidu.com/s/1JXSoiCXXFCXZcqPM7FKZ7A
提取码:bevi