计算稿件原理解析

*.起因

一位卡哇伊得同事姐姐想知道这个公式得应用原理,所以就写了一篇教程
image

*.原理就是用名称管理器给需要计算得区域文本(计算式区域)利用宏表函数evaluate对名称区域进行计算

1. 名称管理器命名区域

在表格《试验桩中》,查看“名称管理器”,可以看到被命名成“ww”的名称,被Evaluate函数计算,evaluate得函数区域是“D:D”,也就是D列。
image

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会出现计算错误而溢出
image

这是因为ww引用得是D:D得整个区域,那么当你选择行内一个单元格引用名称ww,等于引用了整个D列得区域。

这里我们需要用到一个数学概念:交集(两个区域相交得部分)

交集运算解析:微软:绝对交集运算符: @

微软得交集运算符解释很复杂,但是看这一行就懂:
image

公式=A1:A10会返回A1到A10得区域。(名称管理器得本质也是定义区域)
image

但是=@A1:A10,也是区域得引用,是所在公式得整行与A1:A10得交集区域得引用,比如我在B2使用了=@A1:A10。那就是第二行与A1:A10相交得区域,这个相交得区域就是(A2),最终返回A2得值。
image

知道@交集运算符得原理后,我们把只要把公式中得=ww换成=@ww即可完成运算。
image

那么你先在会疑惑,公式里面明明是=@试验桩!ww
这里就是excel公式得路径逻辑,我们先不看@,=试验桩!A1是什么意思?其实就是引用试验桩表格中得A1单元格。所以=试验桩!ww其实和=ww是一个意思,只不过ww可能被命名了多个区域,所以用试验桩表来框定ww得范围。

但是这个表在定义ww这个名称得时候,他定义了三个区域。
image

这个名称你可以自己换,也可以自己定义范围,这里不展开了,动手可以自己试试,他这个表还是可以继续优化删改得。

3.创建得函数最终会在名称管理器中公式中查看与应用。

image

*.更好得解决方案:FORMULATEXT 函数

由于evaluate函数得安全性问题,微软官方也不建议过分使用,

如果使用 EVALUATE 函数来计算存储为文本的公式,则可以改用 FORMULATEXT 函数。FORMULATEXT 函数以文本形式返回公式。

以下修改表格得方法:

1. 对工程量得列 使用公式

image

2. 计算式列使用FORMULATEXT函数

image

由于使用FORMULATEXT函数会产生”=“在前面,影响美观,所以需要对文本进行修饰。

FORMULATEXT函数解析:微软:FORMULATEXT 函数

3.使用切片函数right取除第一位所有数

  1. right函数是从右边往左边取数
  2. left函数是从左边往右边取数
  3. mid函数是从中间取数

right函数解析:微软:Right 函数

这里我们在第二步用FORMULATEXT(E18)获取了整个公式得文本,那么,我们不要那个在头部得等于号"=",就只要”从右边往左边得数,除开第一个数得字符长度“

right函数刚好符合我们得要求。

我们用len()函数获取整个文本得字符长度,然后用len()-1得方式来获取扣一个字符后得程度

最后right函数计取从右边得开始得文字长度,right(文本,len(文本)-1)

4.最后获得你想要得展示效果

image

*.引用

Excel打开宏得教程

  1. 在“选项”中
    image

  2. 找到信任中心设置
    image

3.在宏设置中启用宏
image

posted @ 2023-09-07 15:33  SheZQ  阅读(17)  评论(0编辑  收藏  举报