VBA计算列中连续的非空单元格,从给定的单元格开始:必须处理特殊情况

我面临着一个看似微不足道的任务的困难。 我正在写一个函数,从一个单元格开始,对所有连续的非空单元格( 包括第一个单元格)进行计数,或者在已经达到可选的Ncells单元格数的情况下停止。 这就是我制作的:

Function CountCells(Row As Long, Column As Long, Optional Ncells As Variant, _ Optional sht As Worksheet) As Long Dim I As Long Dim xlsht As Worksheet ' ' set target worksheet ' If sht Is Nothing Then Set xlsht = ActiveSheet Else Set xlsht = sht End If If IsMissing(Ncells) Then Ncells = xlsht.Rows.Count End If With xlsht I = .Cells(Row, Column).End(xlDown).Row If I > Ncells Then I = Ncells End With CountCells = I - Row + 1 End Function 

它看起来不错,但是如果在起始单元格xlsht.Cells(Row,Column)下面的第一个单元格是空的,它确实会失败。 我希望CountCells在这种情况下返回1,但是它会将连续的空单元格的数目返回到第一个非空的单元格或列的末尾。 如果起始单元是空的,则获得相同的结果; 在这种情况下,我会说用户正在使用函数的方式是错误的,但是假设返回值必须是0.你能帮助我吗? 谢谢,

最好

deltaquattro

编辑用户请求一个例子。 由于电子表格无法附加到post,因此我将链接指向Google云端硬盘https://docs.google.com/file/d/0BxB-VPeuApOkeThFZUJ3X2hyTGs/edit?usp=sharing

.End(xlDown)与按Ctrl + 向下箭头的行为相同。

当你在最后一个单元格在非空区域时,光标将跳转到下一个非空区域的第一个单元格。

你必须处理这种情况:

 If row > Ncells Then If xlsht.Cells(Row+1, Column).Value = Empty Then CountCells = 1 Exit Function End If 

万一

请注意,名称Ncells诱发错误,这是一个真正的MaxRow