在用户在 Excel 中选择一整列并且我必须对列内的单元格进行操作的情况下,我如何有效地忽略空行。一整列有超过 100 万个单元格!请帮忙!
范围来自
var range = Application.ActiveWindow.RangeSelection;
最终我想用
for (int i = 0; i < range.Rows.Count; i++)
其中 Rows.Count 应该是非空行数......也许有一种方法可以找到最后一个单元格中的内容?
几个选项取决于您的范围内是否有空格(使用方法 1),或者更简单地说,如果您想找到最后使用的单元格(使用方法 3)
这些选项以活动表的 A 列为例
1.特殊细胞
如果空单元格确实是空的,那么您可以使用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
在我看来,您想知道行数的上限是多少,这样您就不会一直循环到工作簿的底部。
如果是这种情况,那么您可能正在寻找Worksheet.UsedRange
属性,其中包含曾经使用过的所有单元格的范围(这包括输入值然后删除的单元格)。
例如,
Dim MaxUsedRow As Integer
MaxUsedRows = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
MsgBox MaxUsedRows
将显示整个工作簿中最后使用的行的索引。