2013-05-03 82 views
1

您好,我正在尝试将范围设置为最后一行。将范围设置为最后一行

For Each rng In Sheets("Sheet1").Range("B2:CG100").Cells 'adjust sheetname and range accordingly 

我试图

For Each rng In Sheets("Sheet1").Range("B2:CG" & lastRow).Cells 'adjust sheetname and range accordingly 

但不工作

的问题是,在最后一排的变化,如果我用整列的小组将永远运行下去

Sub CleanAll() 
    Dim rng As Range 

    For Each rng In Sheets("Sheet1").Range("B2:CG100").Cells 'adjust sheetname and range accordingly 
     rng.Value = NumberOnly(rng.Value) 
    Next 
End Sub 

谢谢

+0

你到底去做 ?遍历大范围内的每个单元几乎总是一个坏主意和糟糕的设计。 – ApplePie 2013-05-03 14:48:52

+0

[Last Range in Range]的可能重复(http://stackoverflow.com/questions/12588424/last-row-in-range) – whytheq 2013-05-03 20:51:37

回答

1

请尝试以下代码:您也可以参考此link了解详情。

Sub CleanAll() 

     Dim rng As Range 

     For Each rng In Sheets("Sheet1").Range("B2").CurrentRegion 
      rng.Value = NumberOnly(rng.Value) 
     Next 
End Sub 

OR

Sub CleanAll() 

     Dim rng As Range 
     Dim lastRow As Long 
     Dim lastCol As Long 
     Dim colChr As String 


     With Sheets("sheet1") 
      lastCol = .Cells(2, .Columns.Count).End(xlToLeft).Column 
      lastRow = .Cells(.Rows.Count, lastCol).End(xlUp).Row 
     End With 


     For Each rng In Sheets("Sheet1").Range(Cells(2, 2), Cells(lastRow, lastCol)) 
      rng.Value = NumberOnly(rng.Value) 
     Next 
End Sub 

OR

Sub CleanAll() 

     Dim rng As Range 
     Dim lastRow As Long 

     With Sheets("sheet1") 
      lastRow = .Range("CG" & .Rows.Count).End(xlUp).Row 
     End With 

     For Each rng In Sheets("Sheet1").Range("B2:CG" & lastRow) 
      rng.Value = NumberOnly(rng.Value) 
     Next 
    End Sub 
+1

我建议不要使用第一个选项。如果电子表格中有部分(内容中的分隔),则无法计算正确的范围。我会用第二个。 – ApplePie 2013-05-03 14:51:05

+0

这是伟大的,如果CG不是最后一列,第二个选项是否工作?再次感谢Santosh – xyz 2013-05-03 15:49:49

1

对于它的价值这个问题已经做了死,但我用不同的东西:

With ActiveSheet.Cells 
    last_column = .Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column 
    last_row = .Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
End With