在Excel列中跳过空行

4
在 Excel 中,如果用户选择了一整列,而我需要对该列中的单元格进行操作,如何有效地忽略空行呢?一整列有超过 100 万个单元格!请帮忙!
所选范围来自:
var range = Application.ActiveWindow.RangeSelection;

最终我想使用某些东西进行操作

    for (int i = 0; i < range.Rows.Count; i++)

Rows.Count应该是非空行的数量...也许有一种方法可以定位最后一个有内容的单元格?

2个回答

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

这很有帮助。在我的情况下,行之间有空白,看起来#2只从顶部查看连续的块。我有(行,行,行,空白,行),它报告最后一行是3,而不是5。 - tofutim
@tofutim,(2)的代码看起来是自下而上的,因此应该返回第5行。您是否在正确的列上运行它?我现在看到这是VSTO而不是VBA。 - brettdj
在我的测试中,我让第一行为空白,我认为End可能会在某种程度上寻找最后一个空白行...它应该差不多。 - tofutim
方法3顺便提一下,只适用于未经过滤的数据。它不会查看已过滤的数据。 - Peter Majeed

3

听起来你想知道行数的上限,以免循环到工作簿的底部。

如果是这种情况,你可能需要使用Worksheet.UsedRange属性,该属性包含所有曾经使用过的单元格范围(这包括输入了值然后删除的单元格)。

例如:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接