ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

VBA使用数组公式evaluate【已解决】

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-5-24 15:52 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 andy_excelhome 于 2012-5-24 20:32 编辑

为了简化程序我在统计销售数据过程中采用evaluate方式,但是碰到“类型不匹配”的问题。

代码如下:
Private Sub CommandButton1_Click()
    Dim ss As String
    Dim t As Integer   
    ss = "A"   
    t = Application.Evaluate("sum((A2:A10=" & ss & ")*(B2:B10))")   
    MsgBox t   
End Sub

请高手指点!谢谢

产品名称
销售数量
销售单价(元)
销售小计(元)
A
2.00
120.00
240.00
C
1.00
35.00
35.00
B
5.00
80.00
400.00
A
12.00
110.00
1,320.00
E
2.00
40.00
80.00
D
50.00
65.00
3,250.00
B
20.00
80.00
1,600.00
C
3.00
32.00
96.00
B
50.00
75.00
3,750.00

VBA数组公式测试.rar

25.89 KB, 下载次数: 89

TA的精华主题

TA的得分主题

发表于 2012-5-24 17:06 | 显示全部楼层
为什么不直接SUM呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-24 17:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
李甲 发表于 2012-5-24 17:06
为什么不直接SUM呢?

因为销售表格每天在更新。数据条数增加时实时计算(还有其它几个同类型的SUM运算),造成填写数据有停滞等待现象,影响录入数据的效率!

TA的精华主题

TA的得分主题

发表于 2012-5-24 18:06 | 显示全部楼层
本帖最后由 余余1982 于 2012-5-24 18:18 编辑

Private Sub CommandButton1_Click()
    Dim ss As String
    Dim t As Integer
   
    ss = Range("e1")
   
    t = Application.WorksheetFunction.SumIf(Range("a2:a65536"), ss, Range("b2:b65536"))
   
   
   MsgBox ss & vbCrLf & "销售总数量为:" & vbCrLf & t
   
End Sub

VBA数组公式测试.zip

159.04 KB, 下载次数: 56

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-24 19:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
余余1982 发表于 2012-5-24 18:06
Private Sub CommandButton1_Click()
    Dim ss As String
    Dim t As Integer

谢谢!
如果有一个以上的条件呢?比如要看某个月、某位销售员、某种产品的销售数量。
请指点。

TA的精华主题

TA的得分主题

发表于 2012-5-24 19:29 | 显示全部楼层
本帖最后由 余余1982 于 2012-5-24 19:30 编辑
andy_excelhome 发表于 2012-5-24 19:26
谢谢!
如果有一个以上的条件呢?比如要看某个月、某位销售员、某种产品的销售数量。
请指点。

  t = Application.WorksheetFunction.SumIf(Range("a2:a65536"), ss, Range("b2:b65536"))

带入sumproduct 函数可以实现吧!

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-24 20:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
余余1982 发表于 2012-5-24 19:29
t = Application.WorksheetFunction.SumIf(Range("a2:a65536"), ss, Range("b2:b65536"))

带入sumpr ...

经过测试SUMPRODUCT不是一个VBA函数,最后还是通过EVALUATE解决啦。好像EVALUATE公式中的等号右边数值没有办法通过变量传递,只能引用?

感谢指点,受益了!

  1. Private Sub CommandButton2_Click()
  2.     Dim ss As String
  3.     Dim t As Integer
  4.    
  5.     ss = "产品" & Range("g1") & "在" & Range("h1") & "月份"
  6.    
  7.     t = Application.Evaluate("SUMPRODUCT((A2:A10=g1)*(B2:B10=h1),C2:C10)")
  8.     't = Application.Evaluate("SUM((A2:A10=g1)*(B2:B10=h1),C2:C10)")
  9.    
  10.     MsgBox ss & "销售总数量为:" & vbCrLf & t
  11.    
  12. End Sub
复制代码

VBA数组公式测试.rar

27.98 KB, 下载次数: 134

TA的精华主题

TA的得分主题

发表于 2012-5-24 20:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
andy_excelhome 发表于 2012-5-24 20:29
经过测试SUMPRODUCT不是一个VBA函数,最后还是通过EVALUATE解决啦。好像EVALUATE公式中的等号右边数值没有 ...

哦!谢谢提醒,我也是猜测一下没有去验证!不好意思!宏表函数是个不错的方法!学习到了~

TA的精华主题

TA的得分主题

发表于 2014-3-12 22:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
"""A"""

TA的精华主题

TA的得分主题

发表于 2016-7-20 00:08 | 显示全部楼层
学习了,evaluate比WorksheetFunction更方便地直接使用excel界面函数。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-14 01:23 , Processed in 0.027801 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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