将范围从A1返回到最后一个使用的单元格
我想select电子表格中的所有行和列。 macros需要是dynamic的,因为每次macros被调用时,列和行的数量都会变化。 它还需要能够考虑空白的行和列。
这个子程序完成了部分过程:
Sub FindLastCell() Cells.Find(What:="*", After:=[A1], SearchDirection:=xlPrevious).Select End Sub
它find并select电子表格中最后一个单元格。 现在我已经find了电子表格中最后一个单元格,如何select单元格A1作为范围的LastCell?
你需要使这些mods的代码
- 工作表可能是空白的,所以你不应该使用
Select
与Find
,如果查找返回什么,这将给出一个错误。 而是testing范围对象Is Not Nothing
-
Find
可以按行和按列search。 您需要确定最后一行和最后一列以确定最后一次使用的单元格 - 一旦你确定了真正的最后一个单元格使用
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