有时候,在报表中需要对一个数值的计算公式进行说明,以展示该数据是如何得来的。当然可以先设置数据的公式,然后在粘贴到说明单元格内。但是还有更加方便的做法,就是只需修改说明单元格内的公式,数值就根据该公式相应改变。
壹
例如:
A1单元格显示数值6,其公式为2*3,其公式说明在B1单元格内展示。那么如何使得A1单元格内的数值根据B1单元格内书写的公式说明变化呢?不用在A1重新设置公式。
1、首先选中A1单元格,必须要选中。
2、依次点击菜单“公式”、“定义名称”。
3、在弹出的窗口中“名称”和“引用位置”内输入以下内容,然后“确定”。
“名称”这里输入的是JS,也可以输入别的名称,只是需要记住,以便后面引用。
“引用位置”只能手工输入,单元格位置中没有“$”符号。
4、在A1单元格中输入“=JS”,这里相当于我们定义了一个以JS为名称的函数。
虽然在第3步,我们只输入了B1,但是该公式是可以往下拖动的,加减乘除毫无问题。A2对应B2,A3对应B3。
但是如果在C1输入“=JS”则会等于D1中公式的值。这就是一开始选中A1单元格的重要性。
贰
但是我们的报表常常像下面这样,在C列金额均等于B2单元格的单价乘以B列相应的数量。公式这时用字母表示更清晰。
你会发现用刚才的办法,先选中C5单元格,定义一个名称依然有效。
叁
当然我们也发现了前面做法的缺陷就是有对应位置的关系,比如刚才的C1单元格输入“=JS”时就不会等于B1单元格所列公式的值。
那么,能不能像真正的函数一样,我应用哪个单元格就计算该单元格公式的值呢?显然,也是可以的。
1、首先“Alt F11”,调用代码编辑窗口。然后右键点击VBAProject,选择插入“模块”。
2、双击新建的模块(列如模块1),在右边的窗口中输入以下内容:
Function JSSS(A)
A=A
JSSS = Evaluate(A)
End Function
如下图:中“JSSS”就是我们真正自定义的函数了,可以像其他Excel函数一样使用。其中"A=A”是千万不能省略的。
3、B11单元格中输入公式“=JSSS(D5)”,其中D5可以像其他函数一样点击D5单元格来引用,因为JSSS现在真的就是一个函数了。
肆
然而还有的时候,我们会这样来写一个数值的计算说明,公式中会带有计量单位。
计算公式是:(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
如图:
其中ZJS就是我们定义函数的名称。
在B1单元格输入公式“=ZJS(A1)”就会得到A1中数值运算的结果。
最后需要注意的是,在使用了模块之后,Excel必须启用宏。
,