计算式怎么转换成运算结果(计算式转结果的三种方法)

各位朋友,你们好。(本文文字较多。绝大部分文字可以直接一带而过,看动图演示即可)

今天和大家分享个不是所有人都需要(比如我的行业是工程造价,在用excel计算工程量的时候,就会经常用到)的功能:将表达式转化为结果(如下图所示)

计算式怎么转换成运算结果(计算式转结果的三种方法)(1)

表达式转结果


对于这个问题。我们有三种方式可以实现:

1、基础操作;2、函数公式;3、VBA自定义函数。

接下来我分别给大家演示这三种方法:


一、基础操作

基础操作是利用分列功能实现的,有两种方式可以实现效果,大家直接看动图演示:

1、使用【转换Lotus 1-2-3公式】

计算式怎么转换成运算结果(计算式转结果的三种方法)(2)

转换Lotus 1-2-3公式

2、通过添加等号的方式

计算式怎么转换成运算结果(计算式转结果的三种方法)(3)

表达式前添加等号,然后分列


二、函数公式

这里需要给大家介绍一个函数【EVALUATE】:

这个函数在微软的Excel中,是宏表函数,要在工作表中使用,就必须先把函数定义成名称;

这个函数在WPS中,是工作表函数,直接在工作表中就可以使用。

所以,有些朋友收到别人用WPS做的文件时,如果对方在工作表中用了这个函数,就会造成结果错误。

接下来我们还是用动图给大家演示效果:

1、用EVALUATE函数

计算式怎么转换成运算结果(计算式转结果的三种方法)(4)

定义名称方式实现

2、计算式中有注释的情况

计算式怎么转换成运算结果(计算式转结果的三种方法)(5)

计算式中带注释

遇到上图中的情况,我们也可以用EVALUATE函数实现,只是公式变复杂了:

=EVALUATE(SUBSTITUTE(SUBSTITUTE($A1,"【","*ISTEXT(""【"),"】","】"")"))

我们根据公式使用的三个函数,来分解这个很长的公式组合(从里往外分解):

1、结果1 =SUBSTITUTE($A1,"【","*ISTEXT(""【")"198*ISTEXT(""【长】*138*ISTEXT(""【宽】"

目的:将左边的“【”,用SUBStitute函数替换成"*ISTEXT(""【",即添加一个ISTEXT函数在注释符号前面;

2、结果2=SUBSTITUTE(结果1,"】","】"")")"198*ISTEXT(""【长】"")*138*ISTEXT(""【宽】"")"

目的:在后面的“】”后,添加一个括号,这个括号是ISTEXT函数的括号。从第2步的分解可以看出来,通过替换,将注释内容放到了ISTEXT函数里面了。

3、结果3=EVALUATE(结果2)=198*ISTEXT(""【长】"")*138*ISTEXT(""【宽】"")=198*1*238*1

目的:通过ISTEXT函数判断被分离出来的注释部分,判断出是文本格式,得到结果TRUE,转换为数值即为1。

我们用动图演示下效果:

计算式怎么转换成运算结果(计算式转结果的三种方法)(6)

定义复杂的公式


三、VBA方式

看到这里 ,有人会有疑问:既然通过函数公式完美解决了带注释的计算式计算的问题。还有必要用VBA吗?

我大答案是:很有必要,原因有以下几点:

  1. 定义名称对表格的位置要求限制得很紧,修改表格的布局,有可能导致重新修改定义名称中的公式;
  2. 此处一张工作表定义了一个名称,如果有多张工作表都是这样的数据要执行计算,那么定义的名称会非常多,不仅不便于管理,还会在使用中造成混乱;

所以,给各位普及下用VBA自己写一个函数:

1、定义一个解决不带注释计算式的函数,代码如下(代码要放在模块中):

Function Value1(Rng As Range, i As Integer)

Dim a As Double, Str As String '申明变量

Str = "(" & Rng & ")" '将表达式用括号括起来

a = Application.Evaluate(Str) '用EVALUATE函数计算结果

Value1 = Application.Round(a, i) '设置小数位数

End Function

这个代码包含以下信息:

定义的函数名称为:Value1,

这个函数包含两个参数:Rng是引用的单元格,i是要保留的小数位数

计算式怎么转换成运算结果(计算式转结果的三种方法)(7)

初级自定义函数

通过几句简单的代码 ,我们就多了一个可以使用的函数,是不是很神奇?其实,微软内置的函数也是这样一个一个用代码写出来的。只是内置的函数代码更复杂,且代码是经过封装的。


2、计算带注释的计算式,代码怎么写呢?

从上面动图可以看出来,简单的自定义函数,就像简单的定义名称公式一样,不能进行更复杂的判断,所以,要计算带注释的计算式,还需要添加几句处理注释信息的代码:

计算式怎么转换成运算结果(计算式转结果的三种方法)(8)

增加了几句用于判断【】符号的代码,大家从动图直接看效果:

计算式怎么转换成运算结果(计算式转结果的三种方法)(9)

升级版自定义函数


设置自定义函数的优势:

  1. 操作方便,就像使用内置函数一样 ,可以在此工作薄的任意工作表使用,不受表格设计上的限制;
  2. 将函数代码放在了文件的模块里面,把文件复制给其他人的时候,也能正常打开并使用这个函数;

四、复杂情况下的计算式

在有些时候,计算比较复杂内容时,会造成计算式特别长,EXCEL中,如果计算式长度达到255字符时,就无法再执行计算了,这时,我们就需要一个更高级的自定义函数,不受计算式长度的影响。

刚好,我在工作中写过这么一个自定义函数,可以实现。

由于函数代码较多,有150余行,不方便贴在文章里面,有需要的朋友,关注我,然后私信发送关键字【表达式计算】获取代码,代码中有注释,大家可以参考。我给大家演示效果:

计算式怎么转换成运算结果(计算式转结果的三种方法)(10)

可以计算3万多字符计算式的函数

这个函数可以计算超级长的计算式。演示中字符串长度到3万多,提示错误,并不是函数不支持那么多的计算,而是计算式的字符数超过了单元格容量的限制了。由于计算式出错,导致公式计算结果的错误。


最后再说下:需要代码的朋友,可以关注我后,私信发送关键字【表达式计算】获取文件和代码。

好了,今天就到这里,感谢各位朋友的关注和支持。

如果你喜欢我分享的内容,请点个赞支持下;

如果你觉得我分享的内容对你有帮助,可以关注我;

如果要看我以前分享过的好玩的内容,大家可以去我的主页查看历史文章。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页