检测范围是否为空,并返回非空行的索引

我想编写一个VBA代码来检查Excel中的Range是否为空,如果不是,那么非空的行是什么。 这个问题10811121回答如何检查Range("A1:L1000")是否为空:

 WorksheetFunction.CountA(Range("A1:L1000")) 

如果范围不是空的,我想确定非空行的索引。 在行中有多less个单元格不是空的也没关系。 一种解决scheme是逐个检查范围内的每一行是否为空,但是我想知道是否有没有循环的更简单的解决scheme。

使用Range.SpecialCells方法快速查找范围中的所有非公式,填充值。

 set rng = Range("A1:L1000").SpecialCells(xlCellTypeConstant) 

我会循环。 代码很简单:

 Sub dural() Dim i As Long, msg As String For i = 1 To 1000 If Application.WorksheetFunction.CountA(Range("A" & i & ":L" & i)) > 0 Then msg = msg & "," & i End If Next i MsgBox msg End Sub 

在这里输入图像说明

如果你真的有循环的问题:

 Dim vResult Dim sFormula As String With Range("A1:L1000") sFormula = "IF(SUBTOTAL(3,OFFSET(" & .Address & ",ROW(" & .Address & ")-MIN(ROW(" & .Address & _ ")),0,1))>0,ROW(" & .Address & "),""|"")" End With Debug.Print sFormula vResult = Filter(Application.Transpose(Evaluate(sFormula)), "|", False)