ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 使用不同的公式设定EVAL求值出错

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-10-15 20:26 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
是不是EVAL用错了?或者可以用其它办法进行公式管理?
不同运算规则下的查询.rar (13.25 KB, 下载次数: 19)

TA的精华主题

TA的得分主题

发表于 2011-10-15 21:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
数据库呀?不知道怎么处理。留个记号,也学习一下。

TA的精华主题

TA的得分主题

发表于 2011-10-16 02:13 | 显示全部楼层
这就是传说中的马克党?{:soso_e128:}其实写个自定义函数是很容易解决的。

(为了便于大家理解,这里用了中文作为变量,在WinXP英文版+Office 2010英文版+PRC区域语言测试没问题,如果害怕出错,你可以改成英文)
  1. Function Area(形状 As String, 长 As Double, 宽 As Double, 高 As Double, 半径 As Double) As Double
  2. Select Case 形状
  3.         Case "圆形"
  4.             Area = 3.14 * 半径 ^ 2 * (长 = 0) * (宽 = 0) * (高 = 0)
  5.         Case "梯形"
  6.             Area = (长 + 宽) * 高 / 2 * (半径 = 0)
  7.         Case "长方形"
  8.             Area = 长 * 宽 * (高 = 0) * (半径 = 0)
  9.         Case "正方形"
  10.             Area = 长 ^ 2 * (宽 = 0) * (高 = 0) * (半径 = 0)
  11.         Case Else
  12.             Area = 0
  13. End Select
  14. End Function
复制代码
看看是不是这样?
不同运算规则下的查询.rar (22.48 KB, 下载次数: 8)

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-10-16 10:05 | 显示全部楼层
roych 发表于 2011-10-16 02:13
这就是传说中的马克党?其实写个自定义函数是很容易解决的。

(为了便于大家理解,这里用了 ...

谢谢roych的帮助!这样解决了计算问题。
只在信息传递上不够。即别人将不知道你用什么方法算出结果的。这会儿我想用一个笨办法:一方面列出计算公式,另一方面用roych的计算方法。
但我使用EVAL为什么出错仍然不得而知,有大虾帮助解惑吗?{:soso_e113:}

TA的精华主题

TA的得分主题

发表于 2011-10-16 15:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
因为表达式里没有包括全部的字段,你可以试试:Eval(3.14*[半径]*[半径])。有这个字段的就会返回值,否则返回0。
因此,如果非要用Eval函数,则必须用IIf函数或者Choose函数,把每个字段都算进去。——不过,如果这样的话,还不如直接用:
IIf([形状]="圆形",3.14*[半径]*[半径],Iif(……))
Eval已有画蛇添足之嫌了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-10-16 18:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
说的也是,能简单地解决问题何必一定要讲求优雅呢?
{:soso_e128:}谢谢呵!

TA的精华主题

TA的得分主题

发表于 2011-10-17 08:44 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-12-2 16:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
roych 发表于 2011-10-16 15:28
因为表达式里没有包括全部的字段,你可以试试:Eval(3.14*[半径]*[半径])。有这个字段的就会返回值,否则返 ...

使用R兄的Eval(3.14*[半径]*[半径])不能算出结果。

TA的精华主题

TA的得分主题

发表于 2011-12-2 16:33 | 显示全部楼层
还没有看明白,为什么可以*(长 = 0) * (宽 = 0) * (高 = 0)
猜测:未赋值时,默认值为0,*(长 = 0) * (宽 = 0) * (高 = 0)=1
是这样的吗?开眼界了!

TA的精华主题

TA的得分主题

发表于 2011-12-2 19:31 | 显示全部楼层
解疑8L、9L:
1、用我的自定义函数,必须把全部参数列进去(字段一个都不能少),详细参考3L的附件。8L的举例缺少字段,因此出错。
2、(长 = 0) * (宽 = 0) * (高 = 0)是一个逻辑算式。表示的是长宽高均为0时成立。或者说乘号可以理解为AND运算。如果还不明白,可以参照Excel数组公式来理解:
{=Sum((A1:A10=10)*(B1:B10=20)*(C1:C10=30))}
——如果这个公式还不理解,请去Excel函数版块发帖~~{:soso_e128:}
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-11 01:38 , Processed in 0.026990 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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