我在完成一项看似微不足道的任务时遇到了困难。我正在编写一个函数,它从一个单元格开始计算所有连续的非空单元格(包括第一个单元格),或者在达到可选的 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。
编辑用户请求的示例。由于看起来电子表格无法附加到帖子中,因此我提供了指向 Google 云端硬盘的链接https://docs.google.com/file/d/0BxB-VPeuApOkeThFZUJ3X2hyTGs/edit?usp=sharing