作者:绿色风
分类:
时间:2022-08-18
浏览:165
楼主 罗刚君 |
如果选区中没有合并单元格,那么常规思路如下:- Sub 选区中空单元格个数普通版()
- On Error Resume Next
- MsgBox Selection.SpecialCells(xlCellTypeBlanks).Count
- If Err <> 0 Then MsgBox "冇空单元格"
- End Sub
以上方法对选区中有合并单元格时计算会出错! 如果选区中可能有合并单元格也可能没有,采用以下代码(通用版)- Sub 选区中空单元格个数通用版()
- Dim arr()
- arr() = Selection.Value
- For i = 1 To UBound(arr)
- For j = 1 To UBound(arr, 2)
- If Len(arr(i, j)) = 0 Then k = k + 1
- Next j
- Next i
- MsgBox "选区中空单元格数量:" & k
- End Sub
如果选区只包括一个合并单元格,也可以用以下简化版- Sub 合并单元格中空单元格个数简化版()
- MsgBox Evaluate("sum(N(isblank(" & Selection(1).MergeArea.Address & ")))")
- End Sub
当然,在多数情况下,合并单元格中只有左上角单元格才存在数居,其它单元格总是空的,那么也可以取巧,一个合并单元格区域中空单元格个数等于合并区域的单元格个数减1- Sub 合并单元格中空单元格个数取巧版()
- MsgBox Selection(1).MergeArea.Count - 1
- End Sub
________________________________________________________ 补充提示:在VBA中不可能使用isblank函数判断一个单元格是不是空单元格 例如WorksheetFunction.isblank、isblank、VBA.isblank 都不可以执行 但是直接将它应用到公式中,再用VBA中的Evaluate转换公式求值则可以执行。此时isblank属于工作表函数,使用的是公式思路,而不是VBA方法,仅仅是VBA调用公式而已。
当然,不用Isblank,改用=""也行 MsgBox Evaluate("sum(N(" & Selection(1).MergeArea.Address & " = """"))") |
2楼 篮板球 |
学习VBA的精髓。。 |
3楼 398829134 |
谢谢老师 学习了 收藏了 |
4楼 loquat |
原来countblank不能处理合并单元格 |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一