将范围从A1返回到最后一个使用的单元格

我想select电子表格中的所有行和列。 macros需要是dynamic的,因为每次macros被调用时,列和行的数量都会变化。 它还需要能够考虑空白的行和列。

这个子程序完成了部分过程:

Sub FindLastCell() Cells.Find(What:="*", After:=[A1], SearchDirection:=xlPrevious).Select End Sub 

它find并select电子表格中最后一个单元格。 现在我已经find了电子表格中最后一个单元格,如何select单元格A1作为范围的LastCell?

你需要使这些mods的代码

  1. 工作表可能是空白的,所以你不应该使用SelectFind ,如果查找返回什么,这将给出一个错误。 而是testing范围对象Is Not Nothing
  2. Find可以按行和按列search。 您需要确定最后一行和最后一列以确定最后一次使用的单元格
  3. 一旦你确定了真正的最后一个单元格使用Range设置范围从第一个单元格(A1)到您的单元格确定与两个Find范围

请参阅下面的代码

如果Find得到一个值,那么它将从A1到由两个Find所标识的最后使用的单元的范围为rng3

在这里输入图像描述

 Sub GetRange() Dim rng1 As Range Dim rng2 As Range Dim rng3 As Range Set rng1 = Cells.Find("*", [a1], xlFormulas, , xlByRows, xlPrevious) Set rng2 = Cells.Find("*", [a1], xlFormulas, , xlByColumns, xlPrevious) If Not rng1 Is Nothing Then Set rng3 = Range([a1], Cells(rng1.Row, rng2.Column)) MsgBox "Range is " & rng3.Address(0, 0) 'if you need to actual select the range (which is rare in VBA) Application.Goto rng3 Else MsgBox "sheet is blank", vbCritical End If End Sub 

在列A中使用最后一个使用的单元格(包括中间的空格)selectA1就像这样简单:

 Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Select 

要selectA1到整个工作表中使用的最后一个单元格(无论是否在A列中使用):

 Range("A1:A" & ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row).Select 

我想出了如何修改代码来select从指定单元格开始的范围,并在最后一个单元格结束。 在第8行,将a1更改为您希望开始的单元格。 就我而言,我select了j28。

  Set rng3 = Range([j28], Cells(rng1.Row, rng2.Column)) 

完整代码:

  Sub GetRange() Dim rng1 As Range Dim rng2 As Range Dim rng3 As Range Set rng1 = Cells.Find("*", [a1], , , xlByRows, xlPrevious) Set rng2 = Cells.Find("*", [a1], , , xlByColumns, xlPrevious) If Not rng1 Is Nothing Then Set rng3 = Range([j28], Cells(rng1.Row, rng2.Column)) MsgBox "Range is " & rng3.Address(0, 0) 'if you need to actual select the range (which is rare in VBA) Application.Goto rng3 Else MsgBox "sheet is blank", vbCritical End If End Sub