楼主 gouweicao78 |
Q:单元格中有些带“[备注]”形式的计算式,例如:2*4.5[宽]+10[A-B],如何用自定义函数计算其结果? A:按Alt+F11,插入→模块→在VBE窗口中输入以下代码:
根据新要求,[标注]可能位于随时位于公式中的某个位置,去除后不影响公式的完整性,因此可以使用正则表达式将[标注]删除,代码改为:
如何自定义函数计算带备注的文本公式.rar |
2楼 okler |
如果[]里为5个汉字字节时,我改为reg.Pattern = "\[.{1,10}\]"后可通过,但在下面公式(81.96+1.5[YT宽]*2[YT角]*2[ZU])*1.2却为101.96计算错误(用reg.Pattern = "\[.{1,5}\]"能计算正确105.55)。请问如何改,[5个汉字字节或例子]都能计算正确,请不吝赐教,谢谢 Book例.rar |
3楼 gouweicao78 |
{1,10}匹配了1~10个字符,式子中红字部分被替换掉,也就是1.5*2*2只剩下1.5*2 [YT宽]*2[YT角]*2[ZU])* 呵呵,我的半桶水正则。实际上,小小修改一下代码就可以了,即使用最短匹配: Function EVA(R As Range) Application.Volatile '设置函数为易失性函数,以便随计算式变化刷新结果 Dim reg As Object Set reg = CreateObject("vbscript.regexp") reg.Global = True reg.Pattern = "\[.*?\]" '使用正则,匹配以“[”开头、以“]”结尾的字符(最短匹配),都删去 'EVA = reg.Replace(R, "") EVA = Evaluate(reg.Replace(R, "")) End Function |
4楼 okler |
谢谢,问题解决了,现在不必挖空心思缩略汉字了。 |
5楼 davidr |
长知识了。 |
6楼 szchs007 |
非常感谢楼主贡献 |
7楼 szchs007 |
但是将计算式计算后发给其他人,没有加载宏文件,其他人根本看不到计算结果! |