Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 21641|回复: 54

Application.SumIf和WorksheetFunction.SumIf之间的区别

  [复制链接]
发表于 2012-4-28 23:05 | 显示全部楼层 |阅读模式
本帖最后由 爱疯 于 2013-4-1 21:51 编辑

今天学习兰版80集中的23集:数组与函数,其中有一段示例代码如下:
arr = Application.SumIf(Range("a2:a10000"), Array("B", "C", "G", "R"), Range("B2:B10000")) ----------------------------------- 写法1

我练习时自己写的代码如下:
arr = WorksheetFunction.SumIf(Range("a2:a10000"), Array("B", "C", "G", "R"), Range("B2:B10000"))-------------------------写法2

arr = Application.WorksheetFunction.SumIf(Range("a2:a10000"), Array("B", "C", "G", "R"), Range("B2:B10000"))-----------写法3

这3种写法应该是等价的,为什么只有写法1可以正确运行?请问这是什么原因?

以下是原文件截图:


答案在22楼

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2012-4-28 23:33 | 显示全部楼层
第二句缺少 Application,应该是 arr = Application.WorksheetFunction.SumIf(Range("a2:a10000"), Array("B", "C", "G", "R"), Range("B2:B10000"))

回复

使用道具 举报

发表于 2012-4-28 23:46 | 显示全部楼层
application 不能省略
worksheetfunction 可以省略
你自己代码跟校长的一对比,马上就能看出问题出在哪了...
而且这问题在VBA80集里的第6集里有讲
回复

使用道具 举报

 楼主| 发表于 2012-4-29 07:49 | 显示全部楼层
dsjohn 发表于 2012-4-28 23:33
第二句缺少 Application,应该是 arr = Application.WorksheetFunction.SumIf(Range("a2:a10000"), Array(" ...

你没有在代码窗口中运行吧?
就算这样写也是运行出错的。
回复

使用道具 举报

 楼主| 发表于 2012-4-29 07:54 | 显示全部楼层
zjcat35 发表于 2012-4-28 23:46
application 不能省略
worksheetfunction 可以省略
你自己代码跟校长的一对比,马上就能看出问题出在哪了. ...

既然worksheetfunction 可以省略,那么就是说不省略的话也可以正常运行,但实际情况却恰恰相反。
际实上application是可以省略的,代码测试一下就都清楚了。
我当然知道和校长代码的不同在哪里,我是说想知道这个运行不了的原因。

回复

使用道具 举报

 楼主| 发表于 2012-4-29 09:07 | 显示全部楼层
5201314 发表于 2012-4-29 09:03
这里sumif的第二个参数,应该是讨论的核心
Array("B", "C", "G", "R")
假如你换成

嗯,是的,将代码改成如下也是运行出错:
arr = WorksheetFunction.SumIf(Range("a2:a10000"), WorksheetFunction.Transpose(Array("B", "C", "G", "R")), Range("B2:B10000"))
等答案。
回复

使用道具 举报

 楼主| 发表于 2012-4-29 19:18 | 显示全部楼层
{:051:}期待答案中。。。自己顶一下吧。。。
回复

使用道具 举报

发表于 2012-4-29 19:32 | 显示全部楼层
vbamaster 发表于 2012-4-29 19:18
期待答案中。。。自己顶一下吧。。。

arr = Application.SumIf(Range("a2:a7"), Array("B", "C", "G", "R"), Range("B2:B7"))


回复

使用道具 举报

 楼主| 发表于 2012-4-29 19:41 | 显示全部楼层
那么的帅 发表于 2012-4-29 19:32
arr = Application.SumIf(Range("a2:a7"), Array("B", "C", "G", "R"), Range("B2:B7"))

arr = Application.WorksheetFunction.SumIf(Range("a2:a10000"), Array("B", "C", "G", "R"), Range("B2:B10000"))

为什么这么写就运行错误呢?
回复

使用道具 举报

发表于 2012-4-29 19:59 | 显示全部楼层
vbamaster 发表于 2012-4-29 19:41
arr = Application.WorksheetFunction.SumIf(Range("a2:a10000"), Array("B", "C", "G", "R"), Range("B2 ...

因为SUMIF 第2个参数使用了常量数组,导致出错
arr1 = Application.WorksheetFunction.SumIf(Range("a2:a10000"), "C", Range("B2:B10000"))
就没有问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 21:39 , Processed in 0.169442 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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