计算稿件原理解析
*.起因
一位卡哇伊得同事姐姐想知道这个公式得应用原理,所以就写了一篇教程
*.原理就是用名称管理器给需要计算得区域文本(计算式区域)利用宏表函数evaluate对名称区域进行计算
1. 名称管理器命名区域
在表格《试验桩中》,查看“名称管理器”,可以看到被命名成“ww”的名称,被Evaluate函数计算,evaluate得函数区域是“D:D”,也就是D列。
2.宏表函数Evaluate
参考简单教程:知乎:Excel中利用“EVALUATE函数”求计算式结果
既然是宏表函数,那么它就必须打开宏才能使用。由于安全性问题,excel和wps默认是不打开VBA宏设置的,所以需要先允许宏运行。(在本文引用章节中查看《Excel打开宏得教程》)
Evaluate函数表达式解析:
参考evaluate函数解析教程:知乎:evaluate函数计算带文字说明/单位的公式
evaluate函数:
默认是将所有变量转换成数值对象来处,这也是为什么D列中得文本能被Evaluate计算得原因,当然evaluate可以做更复杂得操作,比如:
3[长]*5[宽]*2[高]
这种,通过文本函数处理筛选后,也能将文本处理成3*5*2
来处理计算,但是一定要将文本剔除,不然evaluate因无法转换文本对象为可计算得数值而报错。
太复杂得也不讲,现在回到表格。
表格中使用得公式引用是"@试验桩!ww“,而不是"D18"这种明确得单元格,如果直接=ww会出现计算错误而溢出
这是因为ww引用得是D:D得整个区域,那么当你选择行内一个单元格引用名称ww,等于引用了整个D列得区域。
这里我们需要用到一个数学概念:交集(两个区域相交得部分)
交集运算解析:微软:绝对交集运算符: @
微软得交集运算符解释很复杂,但是看这一行就懂:
公式=A1:A10
会返回A1到A10得区域。(名称管理器得本质也是定义区域)
但是=@A1:A10
,也是区域得引用,是所在公式得整行与A1:A10
得交集区域得引用,比如我在B2使用了=@A1:A10
。那就是第二行与A1:A10
相交得区域,这个相交得区域就是(A2),最终返回A2得值。
知道@
交集运算符得原理后,我们把只要把公式中得=ww
换成=@ww
即可完成运算。
那么你先在会疑惑,公式里面明明是=@试验桩!ww
这里就是excel公式得路径逻辑,我们先不看@
,=试验桩!A1
是什么意思?其实就是引用试验桩表格中得A1单元格。所以=试验桩!ww
其实和=ww
是一个意思,只不过ww可能被命名了多个区域,所以用试验桩表来框定ww得范围。
但是这个表在定义ww这个名称得时候,他定义了三个区域。
这个名称你可以自己换,也可以自己定义范围,这里不展开了,动手可以自己试试,他这个表还是可以继续优化删改得。
3.创建得函数最终会在名称管理器中公式中查看与应用。
*.更好得解决方案:FORMULATEXT 函数
由于evaluate函数得安全性问题,微软官方也不建议过分使用,
如果使用 EVALUATE 函数来计算存储为文本的公式,则可以改用 FORMULATEXT 函数。FORMULATEXT 函数以文本形式返回公式。
以下修改表格得方法:
1. 对工程量得列 使用公式
2. 计算式列使用FORMULATEXT函数
由于使用FORMULATEXT函数会产生”=“在前面,影响美观,所以需要对文本进行修饰。
FORMULATEXT函数解析:微软:FORMULATEXT 函数
3.使用切片函数right取除第一位所有数
- right函数是从右边往左边取数
- left函数是从左边往右边取数
- mid函数是从中间取数
right函数解析:微软:Right 函数
这里我们在第二步用FORMULATEXT(E18)获取了整个公式得文本,那么,我们不要那个在头部得等于号"=",就只要”从右边往左边得数,除开第一个数得字符长度“
right函数刚好符合我们得要求。
我们用len()函数获取整个文本得字符长度,然后用len()-1得方式来获取扣一个字符后得程度
最后right函数计取从右边得开始得文字长度,right(文本,len(文本)-1)
4.最后获得你想要得展示效果
*.引用
Excel打开宏得教程
-
在“选项”中
-
找到信任中心设置
3.在宏设置中启用宏