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

时间:2015-10-19 14:28:28

标签: excel excel-vba vba

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

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

如果Range不为空,我想确定非空行的索引。行中有多少个单元格是非空的并不重要。 一种解决方案是逐个检查范围中的每一行是否为空,但我想知道是否有更简单的解决方案而没有循环。

3 个答案:

答案 0 :(得分:1)

我会循环。代码很简单:

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

enter image description here

答案 1 :(得分:1)

如果确实出现循环问题:

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)

答案 2 :(得分:1)

使用Range.SpecialCells method快速查找您范围内的所有非公式,填充值。

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