ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: ggmmlol

[原创] 表达式求值自定义函数突破255字符限制并兼容64位office

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2019-9-7 20:21 | 显示全部楼层
本帖已被收录到知识树中,索引项:自定义函数开发
本帖最后由 younger001 于 2019-9-8 07:44 编辑

只是随便试了下结果这样了C:\Users\Administrator\Desktop、QQ图片20190907201538
QQ图片20190907201538.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-9-7 20:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 younger001 于 2019-9-8 07:42 编辑

这个是多发的,不知如何删就这样了

TA的精华主题

TA的得分主题

发表于 2019-9-8 07:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
younger001 发表于 2019-9-7 20:21
只是随便试了下结果这样了

补充下规则:1注释前不能有运算符号

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-8 09:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
younger001 发表于 2019-9-8 07:46
补充下规则:1注释前不能有运算符号

谢谢反馈了以下Bug:
原代码中,考虑了对连续的"+"、"-"运算符进行化简,但直到上次时,仍不够彻底:被注释分隔的"+"、"-"运算符,不会被自动化简,而当注释内容被消除时,计算式中可能出现"++"或"--"的情况,进而导致计算结果错误。

此Bug已经在30楼的代码中修复。

TA的精华主题

TA的得分主题

发表于 2019-9-8 22:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
大神,下午刚发现还有一个问题,就是输入特定类型错误计算式时,其结果不是出错,而是显示上一次的计算值,比如输入1+1,计算结果=2,紧接着下另一个单元格输入3+5P0#台]+2*6,计算结果还是=2.但如果输入5+ddd+6这类错误计算式时,则会正常出错。这是下午输入"["号时错误地输入了旁边的P,结果计算值等于上面那个值才引起我的警觉。总结了下,运算符号后接数字再接英文字母或汉字时计算结果就等于紧接本次的前运算结果,而不是显示#VALUE!,除非上次出出错显示的是#VALUE!

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-9 10:00 | 显示全部楼层
younger001 发表于 2019-9-8 22:20
大神,下午刚发现还有一个问题,就是输入特定类型错误计算式时,其结果不是出错,而是显示上一次的计算值, ...

谢谢反馈!
经过检查,发现这个Bug是由于把oDom定义为全局变量造成的。
此外,还发现EXCEL的工作表函数INT函数不等价于JS中的paresInt函数,而是等价于JS中的floor函数。EXCEL的工作表函数TRUNC函数,才是等价于JS中的paresInt函数。
所以,修正上述2处bug,并增加对TRUNC函数的支持。

代码更新在30楼

TA的精华主题

TA的得分主题

发表于 2019-9-9 20:15 | 显示全部楼层
大神回帖真是快耶,问题解决了,但是运行速度又降了下来,难到真的是鱼与熊掌不可兼得。

TA的精华主题

TA的得分主题

发表于 2019-9-12 21:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
大神,那个幂运算好象还是有点问题,比如1+(2.3*2.3+1.6*1.6)^0.5结果就不正确
QQ图片20190912213718.png

TA的精华主题

TA的得分主题

发表于 2019-9-12 21:52 | 显示全部楼层
正则式修改时麻烦允许幂的底数括号内允许再套括号,因为有时真角边稍长的话也是加括号的,提前祝中秋快乐
QQ图片201.png

TA的精华主题

TA的得分主题

发表于 2019-9-18 11:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 younger001 于 2019-9-18 12:21 编辑

大神,昨天在一个群里看到一个网友发的代码:
Function Evaluate64(ss As String)
    Set reg = CreateObject("VBSCRIPT.REGEXP")
    ss = Replace(Replace(Replace(Replace(Replace(Replace(ss, "(", "("), ")", ")"), "[", "("), "]", ")"), "{", "("), "}", ")") '替换全角()及[]{}
    reg.Pattern = "\([^\(]*?\)"
    Do While reg.Test(ss)
        reg.Pattern = "[A-Za-z]*\([^\(]*?\)"
        s1 = CStr(Evaluate(reg.Execute(ss)(0).Value))
        ss = reg.Replace(ss, s1)
        reg.Pattern = "\([^\(]*?\)"
    Loop
    Evaluate64 = Evaluate(ss)
End Function
这个先用EVALUATE对计算式中的函数部份进行计算替换,忽然想到大神的代码为了对函数与EXCEL保持一致,费了很多心,看能不能参照这个,就能匹配所有的EXCEL函数了,不过这个处理后的如果超255字符,仍会出错,由于我只会CTRL+C与CTRL+V,只好期待大神了,祝大神的作品更完美
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 21:55 , Processed in 0.037773 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表