2012-06-07 102 views
4

在用戶選擇Excel中的整個列並且必須處理列中的單元格的情況下,如何高效地忽略空行。整個專欄有超過100萬個細胞!請幫忙!跳過Excel列中的空行

範圍來自

var range = Application.ActiveWindow.RangeSelection; 

最後我想用做點什麼

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

其中Rows.Count應該非空行數......也許有一種方式找到最後一個細胞的東西在裏面?

回答

3

像你想要什麼的上限是一個好主意聽起來我行數是這樣的,所以你最終不會循環到工作簿的底部。

如果是這種情況,那麼您可能正在尋找Worksheet.UsedRange屬性,其中包含所有曾經使用的單元格的範圍(這包括輸入值然後刪除的單元格)。

例如,

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

將顯示整個工作簿上次使用的行的索引。

+0

我認爲這是我想要的。 – tofutim

4

有幾個選項取決於你是否有你的範圍內空白(使用方法1),或者更簡單地說,如果你想找到上次使用的電池(使用方法3)

使用activesheet的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 
+0

這是有幫助的。在我的情況中,行之間有空白,看起來#2只看着頂部的連續塊。我有(行,行,行,空白,行),它報告3是最後一行,而不是5. – tofutim

+0

@tofutim(2)的代碼看起來是自下而上,所以應該返回第5行。右欄?我現在看到這是VSTO而不是VBA – brettdj

+0

它應該差不多。在我的測試中,我有第一行空白,我認爲End可能以某種方式查找最後一個空行... – tofutim