我目前正在尝试弄清楚如何选择从第二行到最后一行的范围,但更具体地说是在一系列列之间。例如,我想选择电子表格中最后一行数据的范围(
A2:L2
)。
我已经尝试过了,
Dim Lastrow As Integer
Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Range("A2:L2" & Lastrow).Select
但这会从
A2:L2
一直选择到电子表格的底部。我已检查 Lastrow
是否不正确,但我将其打印到单元格中并显示了正确的行数。
试试这个:
Dim Lastrow As Integer
Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Range("A2:L" & Lastrow).Select
假设
Lastrow
的值为 50。当您使用以下内容时:
Range("A2:L2" & Lastrow).Select
然后选择从A2到L250的范围。
Sub SelectAllCellsInSheet(SheetName As String)
lastCol = Sheets(SheetName).Range("a1").End(xlToRight).Column
Lastrow = Sheets(SheetName).Cells(1, 1).End(xlDown).Row
Sheets(SheetName).Range("A2", Sheets(SheetName).Cells(Lastrow, lastCol)).Select
End Sub
与 ActiveSheet 一起使用:
Call SelectAllCellsInSheet(ActiveSheet.Name)
对于更通用的方法,我建议使用以下两个函数:
Function RangeFromRow2ToEnd(ByRef Sheet As Worksheet, Optional ByVal Cols As String = "") As Range
Dim Columns As Range
If Sheet Is Nothing Then Exit Function
If Cols = "" Then
Set Columns = Sheet.Range("A1").CurrentRegion
Else
Set Columns = Sheet.Columns(Cols)
End If
Set RangeFromRow2ToEnd = Application.Intersect(Columns, Sheet.Rows("2:" & LastRow(Sheet)))
End Function
Function LastRow(ByRef Sheet As Worksheet) As Long
If Sheet Is Nothing Then Exit Function
LastRow = Sheet.Cells.SpecialCells(xlCellTypeLastCell).Row
End Function
然后你可以像这样使用它:
' Select the whole table from row 2:
RangeFromRow2ToEnd(ActiveSheet).Select
' Select only one column from row 2:
RangeFromRow2ToEnd(ActiveSheet, "B").Select
' Select columns A to L from row 2:
RangeFromRow2ToEnd(ActiveSheet, "A:L").Select
提示:我喜欢“相交”方法,因为您可以通过定义一个专注于列的范围和另一个专注于行的范围来轻松定义所需的范围,然后将它们相交以切断未使用的单元格或行/列你不想使用。
例如:如果您想要获取某些不同列(从第 1 行开始)的范围,但不是可能行的完整末尾,而只是使用的单元格,您可以将其与
UsedRange
或 CurrentRegion
相交
:
Dim Rng As Range
Set Rng = Application.Intersect(Sheet.Columns("A:L"), Sheet.UserRange) ' Or:
Set Rng = Application.Intersect(Sheet.Columns("A:L"), Sheet.Range("A1").CurrentRegion)
在这种情况下,你甚至不需要计算最后一行。
备注:我不会深入讨论哪种方法是找到最后一行的最佳方法。您可以在网上找到很多变体。对我来说,SpecialCells 方法在所有情况下都运行良好。如果您喜欢其他的,只需更换即可。