Excel精英培训网

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

[VBA] VBA不用ismissing如何实现可选参数

[复制链接]
发表于 2016-12-6 07:57 | 显示全部楼层 |阅读模式
VBA不用ismissing如何实现可选参数


本帖子中包含更多资源

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

x
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-12-6 09:03 | 显示全部楼层
什么意思,是为了简化代码?但是不用IsMissing,肯定都还得有其他判断呀。

评分

参与人数 1 +3 收起 理由
laoau138 + 3 来学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-12-6 11:45 | 显示全部楼层
一沫昔阳虹w 发表于 2016-12-6 09:03
什么意思,是为了简化代码?但是不用IsMissing,肯定都还得有其他判断呀。

化简代码不用ismissing        
回复

使用道具 举报

发表于 2016-12-6 18:10 | 显示全部楼层
Function SumIFColor(条件区 As Range, 颜色单元格 As Range, Optional 统计区 As Range)
  Dim arr(), Item, i As Long    '声明变量
'  If IsMissing(统计区) Then  '如果第三参数被忽略
  If 统计区 Is Nothing Then
    '则将“条件区”当作“统计区”,并将它赋值给数组变量arr(使用数组可对代码提速)
    arr = Intersect(条件区, 条件区.Parent.UsedRange).Value
  Else             '否则
    '将“统计区”参数重置为“条件区”的相同高度和宽度,然后赋值给数组变量arr
    arr = 统计区(1).Resize(条件区.Rows.Count, 条件区.Columns.Count).Value
  End If
  For Each Item In arr  '遍历数组arr
    i = i + 1     '累加计数器
    '如果条件区中某个单元格背景色与颜色单元格区域(参照区)颜色一致
    If 条件区.Cells(i).Interior.Color = 颜色单元格(1).Interior.Color Then
      SumIFColor = SumIFColor + Item '将数组中对应的数值累加到SumIFColor中
    End If
  Next
End Function

没什么意义啊,不知道你想优化到哪种程度

评分

参与人数 1 +3 收起 理由
laoau138 + 3 来学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-12-6 18:45 | 显示全部楼层
本帖最后由 laoau138 于 2016-12-6 18:50 编辑
一沫昔阳虹w 发表于 2016-12-6 18:10
Function SumIFColor(条件区 As Range, 颜色单元格 As Range, Optional 统计区 As Range)
  Dim arr(), It ...
第一  先解析这一句看不懂
arr = Intersect(条件区, 条件区.Parent.UsedRange).Value
...........(条件区, 条件区.Parent.UsedRange)..............是什么意思

第二    看图片  工作表"示忽略第三参数"  
这个自宝义函数为什么是 =SumIFColor(A2:A10,A3,B2)
计算黄色单元格A3  对应B列产量,
为什么这个自定义函数最后一个参数用B2 而不是=SumIFColor(A2:A10,A3,B3)

第三  不用ismissing函数  重新再写一次自定义函数
不喜欢用ismissing函数

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2016-12-7 13:14 | 显示全部楼层
laoau138 发表于 2016-12-6 18:45
第一  先解析这一句看不懂
arr = Intersect(条件区, 条件区.Parent.UsedRange).Value
...........(条件区 ...

这不是楼主自己写的吗?
'----------------------------------------------
仔细看了下,确实有点累赘啊。
arr = Intersect(条件区, 条件区.Parent.UsedRange).Value
条件区.Parent  单元格所在的工作表,条件区.Parent.UsedRange指该工作表所使用的区域。
Intersect(条件区, 条件区.Parent.UsedRange) 就是条件区和上面所指区域的交集,那肯定就是  条件区 了。

arr=条件区   就可以了
‘---------------------------------------------------
那个参数是自己B2和B3是自己选的,区别在与 B2以B2单元格去扩展,B3就是B3单元格去扩展
在这里的结果就是:B2 对应B2:B10    B3对应B3:B11     
在这里结果都是一样,因为都涵盖了所有的黄色单元格
'---------------------------------------------------
不用IsMissing   可以   统计区 Is Nothing  来判断。不过IsMissing不是挺好的吗
'====================================
Function SumIFColor(条件区 As range, 颜色单元格 As range, Optional 统计区 As range)
  Dim arr(), Item, i As Long     '声明变量
  If 统计区 Is Nothing Then  '如果第三参数被忽略
    '则将“条件区”当作“统计区”,并将它赋值给数组变量arr(使用数组可对代码提速)
    arr = 条件区
  Else             '否则
    '将“统计区”参数重置为“条件区”的相同高度和宽度,然后赋值给数组变量arr
    arr = 统计区(1).Resize(条件区.Rows.Count, 条件区.Columns.Count).Value
  End If
  For Each Item In arr  '遍历数组arr
    i = i + 1     '累加计数器
    '如果条件区中某个单元格背景色与颜色单元格区域(参照区)颜色一致
    If 条件区.Cells(i).Interior.Color = 颜色单元格(1).Interior.Color Then
      SumIFColor = SumIFColor + Item '将数组中对应的数值累加到SumIFColor中
    End If
  Next
End Function

评分

参与人数 1 +3 收起 理由
laoau138 + 3 来学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-12-7 15:03 | 显示全部楼层
一沫昔阳虹w 发表于 2016-12-7 13:14
这不是楼主自己写的吗?
'----------------------------------------------
仔细看了下,确实有点累赘 ...

果然是高手,这个代码来自书上
回复

使用道具 举报

 楼主| 发表于 2016-12-7 15:17 | 显示全部楼层
一沫昔阳虹w 发表于 2016-12-7 13:14
这不是楼主自己写的吗?
'----------------------------------------------
仔细看了下,确实有点累赘 ...

高手这个怎样做


VBA开发带有不确定参数过程

http://www.excelpx.com/thread-426203-1-1.html

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-30 23:48 , Processed in 0.301005 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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