ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] SumProduct在VBA中的写法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-5-8 18:47 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
=SUMPRODUCT((G1:G17>=10)*(G1:G17<=15))

这个函数公式在单元格中运行是正确的,可换到VBA中就报错,请问到底是错在哪里呢?


i = ActiveSheet.Range("G65536").End(xlUp).Row 'B列最后一行的行值
[E8] = WorksheetFunction.SumProduct((Range("G1:G" & i & ">=10")) * (Range("G1:G" & i & "<=15")))


image.png

TA的精华主题

TA的得分主题

发表于 2024-5-8 20:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
建议用录制宏的方法获得代码,学会了录制宏,可以解决很多问题,这是VBA特有的功能。

TA的精华主题

TA的得分主题

发表于 2024-5-8 20:43 | 显示全部楼层
本帖最后由 ykcbf1100 于 2024-5-9 08:35 编辑

改成这样再试试:
with ActiveSheet
i = .Range("G65536").End(xlUp).Row 'B列最后一行的行值
.[E8] = WorksheetFunction.SumProduct((.Range("G1:G" & i )& ">=10")) * (.Range("G1:G" & i) & "<=15")))
end with

TA的精华主题

TA的得分主题

发表于 2024-5-8 21:19 | 显示全部楼层
i = ActiveSheet.Range("G65536").End(xlUp).Row 'B列最后一行的行值
[E8].Formula = "=SUMPRODUCT((G1:G" & i & ">=10)*(G1:G" & i & "<=15))"

TA的精华主题

TA的得分主题

发表于 2024-5-8 21:24 | 显示全部楼层
Sub test0()  '摒弃函数思维
  Dim ar, i As Long, k As Long
  ar = Range("G1", Cells(Rows.Count, "G").End(xlUp))
  For i = 1 To UBound(ar)
    If ar(i, 1) >= 10 Then
      If ar(i, 1) <= 15 Then
        k = k + 1
      End If
    End If
  Next
  Range("E8") = k
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-8 21:32 | 显示全部楼层
蓝桥玄霜 发表于 2024-5-8 20:34
建议用录制宏的方法获得代码,学会了录制宏,可以解决很多问题,这是VBA特有的功能。

这个方法我是知道的,实操后的结果还是在单元格中输入公式,但是用WorksheetFunction调取函数公式直接计算结果的方法是什么呢?

TA的精华主题

TA的得分主题

发表于 2024-5-8 21:45 | 显示全部楼层
Range的参数错了,跟SumProduct函数无关。改一下就行了,没什么复杂的

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-8 22:24 | 显示全部楼层
知道错误在什么地方了,谢谢帮助!不过我发现
[C25] = WorksheetFunction.SumProduct((Range("A20:A25")), (Range("B20:B25")))这句可以执行而改成
[C25] = WorksheetFunction.SumProduct((Range("A20:A25"))*(Range("B20:B25")))后就类型不匹配了
而增加条件后不论是用逗号还是星号则都是错误的
[E8] = WorksheetFunction.SumProduct((Range("G1:G16") >= 10), (Range("G1:G16") <= 15))
[E8] = WorksheetFunction.SumProduct((Range("G1:G16") >= 10)* (Range("G1:G16") <= 15))

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-8 22:29 | 显示全部楼层
知道错在什么地方了,感谢帮助!但发现个有意思的地方
[C25] = WorksheetFunction.SumProduct((Range("A20:A25")), (Range("B20:B25")))这句是可以执行的而改成星号后就报错了
[C25] = WorksheetFunction.SumProduct((Range("A20:A25"))* (Range("B20:B25")))
而增加了条件后不论是逗号还是星号都报错!!!?
[E8] = WorksheetFunction.SumProduct((Range("G1:G16") >= 10), (Range("G1:G16") <= 15))
[E8] = WorksheetFunction.SumProduct((Range("G1:G16") >= 10)*(Range("G1:G16") <= 15))

TA的精华主题

TA的得分主题

发表于 2024-5-9 07:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
既然用VBA了,这个可以不用函数处理了吧,,,,
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-20 06:41 , Processed in 0.044664 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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