我想选择电子表格中的所有行和列。宏需要是动态的,因为每次调用宏时,列和行的数量往往会变化。它还需要能够考虑空行和列。
这个子程序完成了部分过程:
Sub FindLastCell()
Cells.Find(What:="*", After:=[A1], SearchDirection:=xlPrevious).Select
End Sub
它查找并选择电子表格中的最后一个单元格。现在我已经找到了电子表格中的最后一个单元格,如何选择单元格A1到LastCell作为范围?
答案 0 :(得分:21)
您需要为代码
制作这些modSelect
与Find
一起使用,因为如果“查找”未返回任何内容,则会出现错误。而是测试范围对象Is Not Nothing
Find
可以按行和按列进行搜索。您需要确定两个最后一行和列以确定最后使用的真实单元格Range
设置从第一个单元格(A1)到使用两个Find
范围确定的单元格的范围请参阅下面的代码
如果Find
获得了值,那么它会从A1到rng3
标识的最后一个使用过的单元格的范围Find
。
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
答案 1 :(得分:10)
在A列中选择A1到最后一个使用的单元格(包括中间的空白)就像这样简单:
Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Select
选择A1到整个工作表中使用的最后一个单元格(无论它是否在A列中使用):
Range("A1:A" & ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row).Select
答案 2 :(得分:2)
我想出了如何修改代码以选择从指定单元格开始并从最后一个单元格结束的范围。在第8行,将a1更改为您要开始的单元格。就我而言,我选择了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
答案 3 :(得分:0)
@brettdj指出使用ActiveSheet.UsedRange
来清除当前使用的范围。我会使用下面的简单代码。
ActiveSheet.UsedRange
ActiveSheet.UsedRange.Select