|
这不是楼主自己写的吗?
'----------------------------------------------
仔细看了下,确实有点累赘啊。
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
|
评分
-
查看全部评分
|