0

我在完成一项看似微不足道的任务时遇到了困难。我正在编写一个函数,它从一个单元格开始计算所有连续的非空单元格(包括第一个单元格),或者在达到可选的 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

4

1 回答 1

2

.End(xlDown)Ctrl与按+具有相同的行为Down arrow

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

您必须处理这种情况:

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

万一

请注意,名称Ncells诱导错误,它实际上是一个MaxRow.

于 2013-09-11T11:04:28.123 回答