ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 计算选区中空单元格个数

计算选区中空单元格个数

作者:绿色风 分类: 时间:2022-08-18 浏览:165
楼主
罗刚君
如果选区中没有合并单元格,那么常规思路如下:
  1. Sub 选区中空单元格个数普通版()
  2.     On Error Resume Next
  3.     MsgBox Selection.SpecialCells(xlCellTypeBlanks).Count

  4.     If Err <> 0 Then MsgBox "冇空单元格"
  5. End Sub
以上方法对选区中有合并单元格时计算会出错!
如果选区中可能有合并单元格也可能没有,采用以下代码(通用版)
  1. Sub 选区中空单元格个数通用版()
  2.     Dim arr()
  3.     arr() = Selection.Value
  4.     For i = 1 To UBound(arr)
  5.         For j = 1 To UBound(arr, 2)
  6.             If Len(arr(i, j)) = 0 Then k = k + 1
  7.         Next j
  8.     Next i
  9.     MsgBox "选区中空单元格数量:" & k
  10. End Sub
如果选区只包括一个合并单元格,也可以用以下简化版
  1. Sub 合并单元格中空单元格个数简化版()
  2.     MsgBox Evaluate("sum(N(isblank(" & Selection(1).MergeArea.Address & ")))")
  3. End Sub
当然,在多数情况下,合并单元格中只有左上角单元格才存在数居,其它单元格总是空的,那么也可以取巧,一个合并单元格区域中空单元格个数等于合并区域的单元格个数减1
  1. Sub 合并单元格中空单元格个数取巧版()
  2.     MsgBox Selection(1).MergeArea.Count - 1
  3. 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总版主之一

评论列表
sitemap