excel – 计算空白单元格(将A转换为1,D转换为4.etc)

我想提供一个数字(即4代表第4列 – D),然后有一个msgbox返回该列中非空白的数量

例如下面的D列有5个空格:

col A col B col C col D col E ------ ------- ---- ------- ------ gh 2h 34 

代码到目前为止:

 Sub Tester() CountBlanks 4 End Sub Sub CountBlanks(ByVal colNum) columnLetter = ?? columnCount = ?? MsgBox "Count of column: " & columnLetter & " is " & columnCount End Sub 

预期结果:

 "Count of column: D is 5" 

答案取决于你真正想要计算的东西:

  1. 相对于整个表格的列中的所有空白单元格。
  2. 所有空白单元格直到特定列本身内的最后使用的单元格。

大多数人都试图达成这个有点棘手的第一个select。 为了计算空白,specialcellfunction是要走的路。 然而,由于专用单元使用片材使用范围,因此可能变得不可靠,因为已知excel严重地跟踪使用的片段。 所以首先我们必须调用usedrange函数来重置它。

 Function CountBlanks(colNum As Long) Dim sColumn As String Dim lBlanks As Long sColumn = Split(Columns(colNum).Address(ColumnAbsolute:=False), ":")(0) ActiveSheet.UsedRange lBlanks = ActiveSheet.Columns(colNum).SpecialCells(xlCellTypeBlanks).Count MsgBox "Count of column: " & sColumn & " is " & lBlanks End Function 

如果你是在选项2之后,那么只是获得列中最后一个单元并用特殊单元计数的情况。

 Function CountBlanks(colNum As Long) Dim sColumn As String Dim lBlanks As Long sColumn = Split(Columns(colNum).Address(ColumnAbsolute:=False), ":")(0) lBlanks = Range(Cells(1, colNum), Cells(Rows.Count, colNum).End(xlUp)).SpecialCells(xlCellTypeBlanks).Count MsgBox "Count of column: " & sColumn & " is " & lBlanks End Function 

编辑

Jmax,代码实际上是正确的。 重置使用的范围的呼叫必须是自己的。 在下一行调用特殊单元时,不需要指定usedrange。

它很难解释,但试试这个:注释掉ActiveSheet.UsedRange线。 使用testing数据向表格下方的单元格添加一个值,然后运行代码。 它会返回到这个新添加的单元格的空白计数。 现在删除您添加的单元格的整行并重新运行代码。 它仍然会返回相同的计数,因为excel没有重置其内置计数器。 现在取消注释行Activesheet.Usedrange,运行代码,你会得到正确的结果。

这里是一个解决schemexlCellTypeBlanks (感谢brettdj列字母代码(不想search它)

 Sub CountBlanks(ByVal colNum) Dim iRow As Long Dim columnLetter As String columnLetter = Split(Columns(colNum).Address(False, False), ":")(0) iRow = Cells(Rows.Count, colNum).End(xlUp).Row columnCount = Range(columnLetter & "1:" & columnLetter & iRow).SpecialCells(xlCellTypeBlanks).Count MsgBox "Count of column: " & columnLetter & " is " & columnCount End Sub Sub Tester() CountBlanks 1 End Sub 

你可以使用工作表函数COUNTA来做到这一点,再加上使用Split来处理列地址来获得aplhabetic columm字母

请注意,任何“”结果将被计算在内

 Function CountBlanks(colNum As Long) CountBlanks = "Count of column: " & Split(Columns(colNum).Address(False, False), ":")(0) & " is " & Application.WorksheetFunction.CountA(Columns(colNum)) End Function 

当单元格不为空时,使用循环并增加columnCount

你怎么知道你什么时候到达最后一行?