2015-10-19 69 views
0

的指标,我想编写VBA代码,以检查是否在Excel中的一个范围是空的,如果没有,什么是它的非空行。 这个问题的答案10811121如何检查是否Range("A1:L1000")为空:检测并返回非空行

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

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

+1

什么是不容易的有关循环? – Rory

回答

1

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

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

谢谢@Jepped,这就是我正在寻找。 – MeSS83

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

如果你真的有循环问题:

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) 
+0

嗨Rory这是令人印象深刻的,我试图找出这个公式如何工作,但对我来说这是纯粹的魔术:) – MeSS83