如何选择第二行到最后一行的范围

问题描述 投票:0回答:3

我目前正在尝试弄清楚如何选择从第二行到最后一行的范围,但更具体地说是在一系列列之间。例如,我想选择电子表格中最后一行数据的范围(

A2:L2
)。

我已经尝试过了,

Dim Lastrow As Integer
Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

Range("A2:L2" & Lastrow).Select

但这会从

A2:L2
一直选择到电子表格的底部。我已检查
Lastrow
是否不正确,但我将其打印到单元格中并显示了正确的行数。

excel vba
3个回答
29
投票

试试这个:

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的范围。


4
投票
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)

0
投票

对于更通用的方法,我建议使用以下两个函数:

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 方法在所有情况下都运行良好。如果您喜欢其他的,只需更换即可。

© www.soinside.com 2019 - 2024. All rights reserved.