Excel精英培训网

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

[已解决]自定义函数不能返回正常结果

[复制链接]
发表于 2014-6-3 15:35 | 显示全部楼层 |阅读模式
本帖最后由 蝶·舞 于 2014-6-3 16:47 编辑

QQ图片20140603152716.jpg
我用自定义函数,自动对A列的某一编码进行B列数据的汇总(其实就是SUMIF函数),我写了如下代码
  1. Function qh(m)
  2. Application.Volatile
  3. arr = Sheet1.Range("A1").CurrentRegion
  4. For r = 1 To UBound(arr)
  5. If arr(r, 1) = m Then qh = qh + arr(r, 2)
  6. Next
  7. End Function
复制代码
然后用这个自定义函数写公式qh(1001)返回错误结果,但我用下面这段代码(非自定义函数),却能出结果
  1. Sub test()
  2. arr = Sheet1.Range("A1").CurrentRegion
  3. For r = 1 To UBound(arr)
  4. If arr(r, 1) = Sheet1.[e1] Then q = q + arr(r, 2)
  5. Next
  6. MsgBox q
  7. End Sub
复制代码
问一下,自定义函数中的代码何处出错了。
示例.zip (6.52 KB, 下载次数: 16)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-6-3 15:40 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2014-6-3 15:45 | 显示全部楼层
为什么不能直接将区域先赋值到ARR数组?
回复

使用道具 举报

发表于 2014-6-3 15:49 | 显示全部楼层
  1. Function qh(m)
  2. Application.Volatile
  3. arr = Sheet1.Range("A1").CurrentRegion
  4. For r = 1 To UBound(arr)
  5. If arr(r, 1) = m Then qh = qh + arr(r, 2)
  6. Next
  7. End Function
  8. Sub cc()
  9.     [h1] = qh([e1])
  10. End Sub
复制代码
老师您的函数这样用也可以得到正确结果
我是刚刚学习VBA 也不知道为什么{:011:}
回复

使用道具 举报

发表于 2014-6-3 15:57 | 显示全部楼层    本楼为最佳答案   
这个问题以前曾困扰我很长时间,最后发现在自定义函数里不能用currentregion之类的。代码小改一下即可:
  1. Function qh(m)
  2.     Application.Volatile
  3.     arr = Sheet1.Range("A1:b4")
  4.     For r = 1 To UBound(arr)
  5.         If arr(r, 1) = m Then qh = qh + arr(r, 2)
  6.     Next
  7. End Function
复制代码

评分

参与人数 2 +39 收起 理由
云影 + 18 学习了
windimi007 + 21 很给力!

查看全部评分

回复

使用道具 举报

发表于 2014-6-3 17:27 | 显示全部楼层
本帖最后由 爱疯 于 2014-6-3 20:55 编辑




Function f(x)
    Dim arr
    arr = Range("b3").CurrentRegion
    Stop
End Function

Sub demo()
    Call f(6)    '只是随便输入1个数字
End Sub

在自定义函数中使用Range.CurrentRegion属性.rar (7.99 KB, 下载次数: 12)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 07:42 , Processed in 0.337659 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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