在Excel列中跳过空行

时间:2012-06-07 00:01:19

标签: excel vsto

在用户在Excel中选择整列并且我必须对列内的单元格执行操作的情况下,如何有效地忽略空行。整列有超过100万个细胞!请帮忙!

范围来自

var range = Application.ActiveWindow.RangeSelection;

最终我想用

做点什么
    for (int i = 0; i < range.Rows.Count; i++)

其中Rows.Count应该是非空的行数...也许有一种方法可以找到包含其中某些内容的最后一个单元格?

2 个答案:

答案 0 :(得分:4)

有几个选项取决于你的范围内是否有空白(使用方法1),或者更简单地说如果你想找到最后使用过的单元格(使用方法3)

这些选项使用活动表的A列作为示例

<强> 1。 SpecialCells

如果空单元格确实为空,那么您可以使用SpecialCells处理公式单元格(以=开头)和/或常量单元格

   Sub GetNonEmtpy()
    Dim rng1 As Range
    Dim rng2 As Range
    On Error Resume Next
    Set rng1 = Columns("A").SpecialCells(xlConstants)
    Set rng2 = Columns("A").SpecialCells(xlFormulas)
    On Error GoTo 0
    If Not rng1 Is Nothing Then MsgBox "Constants in " & rng1.Address(0, 0)
    If Not rng2 Is Nothing Then MsgBox "formula in " & rng2.Address(0, 0)
    'then work with these ranges
End Sub

<强> 2。最后一个单元格查找

Sub LastCellLookup()
    Dim rng1 As Range
    Set rng1 = Cells(Rows.Count, "A").End(xlUp)
    If rng1.Row <> 1 Then
        MsgBox "last cell is " & rng1.Address(0, 0)
    Else
    'check first cell is not empty
        If Len(rng1.Value) > 0 Then
            MsgBox "last cell is " & rng1.Address(0, 0)
        Else
            MsgBox "row is blank"
        End If
    End If
End Sub

第3。查找

Sub LastCellFind()
    Dim rng1 As Range
    Set rng1 = Columns("A").Find("*", [a1], xlValues, , xlByRows, xlPrevious)
    If Not rng1 Is Nothing Then MsgBox "Last cell is " & rng1.Address(0, 0)
End Sub

答案 1 :(得分:3)

对我来说听起来好像你想知道行数的上限是什么,所以你最终不会一直循环到工作簿的底部。

如果是这种情况,那么您可能正在寻找Worksheet.UsedRange属性,其中包含所有已使用过的单元格的范围(包括输入值然后删除的单元格)。

例如,

Dim MaxUsedRow As Integer
MaxUsedRows = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
MsgBox MaxUsedRows

将显示整个工作簿中最后一次使用的行的索引。