有时候,在报表中需要对一个数值的计算公式进行说明,以展示该数据是如何得来的。当然可以先设置数据的公式,然后在粘贴到说明单元格内。但是还有更加方便的做法,就是只需修改说明单元格内的公式,数值就根据该公式相应改变。

例如:

excel公式自动计算数值(Excel根据公式说明计算数值)(1)

A1单元格显示数值6,其公式为2*3,其公式说明在B1单元格内展示。那么如何使得A1单元格内的数值根据B1单元格内书写的公式说明变化呢?不用在A1重新设置公式。

1、首先选中A1单元格,必须要选中。

2、依次点击菜单“公式”、“定义名称”。

excel公式自动计算数值(Excel根据公式说明计算数值)(2)

3、在弹出的窗口中“名称”和“引用位置”内输入以下内容,然后“确定”。

“名称”这里输入的是JS,也可以输入别的名称,只是需要记住,以便后面引用。

“引用位置”只能手工输入,单元格位置中没有“$”符号。

excel公式自动计算数值(Excel根据公式说明计算数值)(3)

4、在A1单元格中输入“=JS”,这里相当于我们定义了一个以JS为名称的函数。

excel公式自动计算数值(Excel根据公式说明计算数值)(4)

虽然在第3步,我们只输入了B1,但是该公式是可以往下拖动的,加减乘除毫无问题。A2对应B2,A3对应B3。

但是如果在C1输入“=JS”则会等于D1中公式的值。这就是一开始选中A1单元格的重要性。

excel公式自动计算数值(Excel根据公式说明计算数值)(5)

但是我们的报表常常像下面这样,在C列金额均等于B2单元格的单价乘以B列相应的数量。公式这时用字母表示更清晰。

excel公式自动计算数值(Excel根据公式说明计算数值)(6)

你会发现用刚才的办法,先选中C5单元格,定义一个名称依然有效。

当然我们也发现了前面做法的缺陷就是有对应位置的关系,比如刚才的C1单元格输入“=JS”时就不会等于B1单元格所列公式的值。

excel公式自动计算数值(Excel根据公式说明计算数值)(7)

那么,能不能像真正的函数一样,我应用哪个单元格就计算该单元格公式的值呢?显然,也是可以的。

1、首先“Alt F11”,调用代码编辑窗口。然后右键点击VBAProject,选择插入“模块”。

excel公式自动计算数值(Excel根据公式说明计算数值)(8)

2、双击新建的模块(列如模块1),在右边的窗口中输入以下内容:

Function JSSS(A)

A=A

JSSS = Evaluate(A)

End Function

如下图:中“JSSS”就是我们真正自定义的函数了,可以像其他Excel函数一样使用。其中"A=A”是千万不能省略的。

excel公式自动计算数值(Excel根据公式说明计算数值)(9)

3、B11单元格中输入公式“=JSSS(D5)”,其中D5可以像其他函数一样点击D5单元格来引用,因为JSSS现在真的就是一个函数了。

excel公式自动计算数值(Excel根据公式说明计算数值)(10)

然而还有的时候,我们会这样来写一个数值的计算说明,公式中会带有计量单位。

excel公式自动计算数值(Excel根据公式说明计算数值)(11)

计算公式是:(71.1*5 100*10-100)*5/7,其中包含了括号、加减乘除。

这个稍微复杂一点,但是依然可以简单搞定。

我们可以用“Alt F11”调出代码窗口,在新插入的模块或原有的模块中写入下面的代码:

Function ZJS(A)

Dim b, mhk, mh

Dim dy, dys

Set dy = CreateObject("vbscript.regexp")

With dy

.Global = True

.IgnoreCase = True

.Pattern = "(\d|[* -.()()]|[/]\d)"

End With

Set mh = dy.Execute(A)

For Each mhk In mh

dys = dys & mhk

Next

ZJS = Evaluate(dys)

End Function

如图:

excel公式自动计算数值(Excel根据公式说明计算数值)(12)

其中ZJS就是我们定义函数的名称。

在B1单元格输入公式“=ZJS(A1)”就会得到A1中数值运算的结果。

excel公式自动计算数值(Excel根据公式说明计算数值)(13)


最后需要注意的是,在使用了模块之后,Excel必须启用宏。


excel公式自动计算数值(Excel根据公式说明计算数值)(14)

,