ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何自定义函数计算带[备注]的文本公式

如何自定义函数计算带[备注]的文本公式

作者:绿色风 分类: 时间:2022-08-17 浏览:148
楼主
gouweicao78
Q:单元格中有些带“[备注]”形式的计算式,例如:2*4.5[宽]+10[A-B],如何用自定义函数计算其结果?
A:Alt+F11,插入→模块→在VBE窗口中输入以下代码:
  1. Function EVA(R As Range)
  2. Dim gs As String
  3. Application.Volatile    '设置函数为易失性函数,以便随计算式变化刷新结果
  4. gs = Replace(Replace(R, "[", "*ISTEXT(""["), "]", "]"")")    '替换[备注]为*ISTEXT("备注"),如果有【、】号,也需要替换,如有×、÷号,也需替换为*、/号
  5. EVA = Evaluate(gs)
  6. End Function



根据新要求,[标注]可能位于随时位于公式中的某个位置,去除后不影响公式的完整性,因此可以使用正则表达式将[标注]删除,代码改为:

  1. Function EVA(R As Range)
  2. Application.Volatile    '设置函数为易失性函数,以便随计算式变化刷新结果
  3. Dim reg As Object
  4. Set reg = CreateObject("vbscript.regexp")
  5.     reg.Global = True
  6.     reg.Pattern = "\[.{1,5}\]"   '使用正则,匹配以“[”开头+1~5个字符以“]”结尾的字符,都删去
  7. EVA = Evaluate(reg.Replace(R, ""))
  8. End Function

如何自定义函数计算带备注的文本公式.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
但是将计算式计算后发给其他人,没有加载宏文件,其他人根本看不到计算结果!

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap