如何:使用 Excel 中的 Visual Basic 过程选择单元格/范围

摘自:https://docs.microsoft.com/zh-cn/previous-versions/office/troubleshoot/office-developer/select-cells-rangs-with-visual-basic

Microsoft 提供的编程示例仅用于进行说明,而不提供明示或默示担保。 这包括但不限于适销性或对特定用途的适用性的默示担保。 本文假设您熟悉正在演示的编程语言和用于创建和调试过程的工具。 Microsoft 支持工程师可帮助说明特定过程的功能,但不会修改这些示例以提供额外的功能或构建过程来满足您的特定要求。 本文中的示例使用下表中列出的 Visual Basic 方法。

Method             Arguments
------------------------------------------
Activate           none
Cells              rowIndex, columnIndex
Application.Goto   reference, scroll
Offset             rowOffset, columnOffset
Range              cell1
                   cell1, cell2
Resize             rowSize, columnSize
Select             none
Sheets             index (or sheetName)
Workbooks          index (or bookName)
End                direction
CurrentRegion      none

本文中的示例使用下表中的属性。

Property         Use
---------------------------------------------------------------------
ActiveSheet      to specify the active sheet
ActiveWorkbook   to specify the active workbook
Columns.Count    to count the number of columns in the specified item
Rows.Count       to count the number of rows in the specified item
Selection        to refer to the currently selected range

如何选择活动工作表上的单元格

若要选择活动工作表上的单元格 D5,您可以使用下面的两个示例之一:

ActiveSheet.Cells(5, 4).Select
-or-
ActiveSheet.Range("D5").Select

如何在同一工作簿中的另一工作表上选择单元格

若要选择同一工作簿中另一工作表上的单元格 E6,您可以使用以下示例之一:

Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(6, 5)
   -or-
Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6"))

或者,您可以激活工作表,然后使用上面的方法1选择单元格:

Sheets("Sheet2").Activate
ActiveSheet.Cells(6, 5).Select

如何在其他工作簿中的工作表上选择单元格

若要选择其他工作簿中的工作表上的单元格 F7,您可以使用以下两个示例之一:

Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Cells(7, 6)
-or-
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("F7")

或者,您可以激活工作表,然后使用上面的方法1选择单元格:

Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
ActiveSheet.Cells(7, 6).Select

如何选择活动工作表上的单元格区域

若要选择活动工作表上的区域 C2: D10,您可以使用以下任何示例:

ActiveSheet.Range(Cells(2, 3), Cells(10, 4)).Select
ActiveSheet.Range("C2:D10").Select
ActiveSheet.Range("C2", "D10").Select

or

ActiveSheet.Range(ActiveSheet.Cells(2, 3), ActiveSheet.Cells(10, 4)).Select

or, alternatively, it could be simplified to this:

Range(Cells(2, 3), Cells(10, 4)).Select

如何在同一工作簿中的另一工作表上选择单元格区域

若要选择同一工作簿中另一个工作表上的区域 D3: E11,可以使用以下两个示例之一:

Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3:E11")
Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3", "E11")

或者,您可以激活工作表,然后使用上面的方法4来选择区域:

Sheets("Sheet3").Activate
ActiveSheet.Range(Cells(3, 4), Cells(11, 5)).Select

如何在不同的工作簿中选择工作表上的单元格区域

若要选择其他工作簿中的工作表上的单元格区域 E4: F12,您可以使用以下两个示例之一:

Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4:F12")
Application.Goto _
      Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4", "F12")

或者,您可以激活工作表,然后使用上面的方法4来选择区域:

Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
   ActiveSheet.Range(Cells(4, 5), Cells(12, 6)).Select

如何在活动工作表上选择命名区域

若要选择活动工作表上的命名区域 "Test",可以使用以下两个示例之一:

Range("Test").Select
Application.Goto "Test"

如何在同一工作簿中的另一工作表上选择命名区域

若要在同一工作簿中的另一工作表上选择命名区域 "Test",可以使用以下示例:

Application.Goto Sheets("Sheet1").Range("Test")

或者,您可以激活工作表,然后使用上面的方法7选择命名区域:

Sheets("Sheet1").Activate
Range("Test").Select

如何在其他工作簿中的工作表上选择命名区域

若要在其他工作簿中的工作表上选择命名区域 "Test",可以使用以下示例:

Application.Goto _
   Workbooks("BOOK2.XLS").Sheets("Sheet2").Range("Test")

或者,您可以激活工作表,然后使用上面的方法7选择命名区域:

Workbooks("BOOK2.XLS").Sheets("Sheet2").Activate
Range("Test").Select

选择相对于活动单元格的单元格

若要选择位于活动单元格的下五行和四列的单元格,可以使用以下示例:

ActiveCell.Offset(5, -4).Select

若要选择位于活动单元格上、上有两行的单元格,可以使用以下示例:

ActiveCell.Offset(-2, 3).Select

 备注

如果您尝试选择 "工作表外" 单元格,则会发生错误。 如果活动单元格在列 A 到 D 中,则上面显示的第一个示例将返回一个错误,因为向左移动四个列将使活动单元格成为无效的单元格地址。

选择相对于另一个单元格的单元格(非活动)单元格

若要选择位于单元格 C7 的下5行和右侧四列的单元格,可以使用以下两个示例之一:

ActiveSheet.Cells(7, 3).Offset(5, 4).Select
ActiveSheet.Range("C7").Offset(5, 4).Select

如何选择从指定区域偏移的单元格区域

若要选择与命名区域 "Test" 大小相同的单元格区域,但将向下移动四行,在右侧移动三列,可以使用以下示例:

ActiveSheet.Range("Test").Offset(4, 3).Select

如果命名区域位于另一(非活动)工作表上,请先激活该工作表,然后使用以下示例选择区域:

Sheets("Sheet3").Activate
ActiveSheet.Range("Test").Offset(4, 3).Select

如何选择指定区域并调整所选内容的大小

若要选择命名区域 "Database",然后将所选内容扩展五行,可以使用以下示例:

Range("Database").Select
Selection.Resize(Selection.Rows.Count + 5, _
   Selection.Columns.Count).Select

如何选择指定区域,对其进行偏移,然后调整其大小

若要依次选择范围四行和命名区域 "Database" 右侧的三列,并且包含两行和一列以上的命名区域,则可以使用以下示例:

Range("Database").Select
Selection.Offset(4, 3).Resize(Selection.Rows.Count + 2, _
   Selection.Columns.Count + 1).Select

如何选择两个或多个指定区域的联合

若要选择两个命名区域 "Test" 和 "Sample" 的联合(即组合区域),您可以使用以下示例:

Application.Union(Range("Test"), Range("Sample")).Select

 备注

这两个区域必须位于同一个工作表上,此示例才有效。 另请注意,Union 方法在工作表中不起作用。 例如,此行的工作正常。

Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet1!C3:D4"))

但此行

Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet2!C3:D4"))

返回错误消息:

Application 类的 Union 方法失败

如何选择两个或多个指定区域的交集

若要选择两个命名区域的交集 "Test" 和 "Sample",您可以使用以下示例:

Application.Intersect(Range("Test"), Range("Sample")).Select

请注意,这两个区域必须位于同一个工作表上,此示例才有效。

本文中的示例17-21 引用了下面的示例数据集。 每个示例都说明了要选择的示例数据中的单元格范围。

A1: Name    B1: Sales    C1: Quantity
A2: a       B2: $10      C2: 5
A3: b       B3:          C3: 10
A4: c       B4: $10      C4: 5
A5:         B5:          C5:
A6: Total   B6: $20      C6: 20

如何选择连续数据列的最后一个单元格

若要选择连续列中的最后一个单元格,请使用以下示例:

ActiveSheet.Range("a1").End(xlDown).Select

在示例表中使用此代码时,将选择单元格 A4。

如何:选择连续数据列底部的空白单元格

若要选择连续单元格区域下方的单元格,请使用以下示例:

ActiveSheet.Range("a1").End(xlDown).Offset(1,0).Select

在示例表中使用此代码时,将选择单元格 A5。

如何在列中选择整个连续单元格区域

若要在列中选择连续单元格区域,请使用以下示例之一:

ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown)).Select
   -or-
ActiveSheet.Range("a1:" & ActiveSheet.Range("a1"). _
      End(xlDown).Address).Select

在示例表中使用此代码时,单元格 A1 到 A4 将被选中。

如何在列中选择整个非连续单元格区域

若要选择非连续单元格的范围,请使用以下示例之一:

ActiveSheet.Range("a1",ActiveSheet.Range("a" & ActiveSheet.Rows.Count).End(xlUp)).Select
   -or-
ActiveSheet.Range("a1:" & ActiveSheet.Range("a" & ActiveSheet.Rows.Count). _
   End(xlUp).Address).Select

在示例表中使用此代码时,它将选择单元格区域 A1 至 A6。

如何选择矩形单元格区域

为了在单元格周围选择矩形单元格区域,请使用 CurrentRegion 方法。 由 CurrentRegion 方法选择的范围是由空行和空列的任意组合构成的区域。 下面的示例演示如何使用 CurrentRegion 方法:

ActiveSheet.Range("a1").CurrentRegion.Select

此代码将选择单元格区域 A1 至 C4。 下面列出了选择相同区域单元格的其他示例:

ActiveSheet.Range("a1", _
   ActiveSheet.Range("a1").End(xlDown).End(xlToRight)).Select
   -or-
ActiveSheet.Range("a1:" & _
   ActiveSheet.Range("a1").End(xlDown).End(xlToRight).Address).Select

在某些情况下,您可能需要选择单元格 A1 到 C6。 在此示例中,CurrentRegion 方法将因行5上的空行而不起作用。 以下示例将选择所有单元格:

lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, lastCol).End(xlUp).Row
ActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select
    -or-
lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, lastCol).End(xlUp).Row
ActiveSheet.Range("a1:" & _
   ActiveSheet.Cells(lastRow, lastCol).Address).Select

如何选择长度不同的多个非连续列

若要选择长度不同的多个非连续列,请使用下面的示例表和宏示例:

A1: 1  B1: 1  C1: 1  D1: 1
A2: 2  B2: 2  C2: 2  D2: 2
A3: 3  B3: 3  C3: 3  D3: 3
A4:    B4: 4  C4: 4  D4: 4
A5:    B5: 5  C5: 5  D5:
A6:    B6:    C6: 6  D6:
StartRange = "A1"
EndRange = "C1"
Set a = Range(StartRange, Range(StartRange).End(xlDown))
Set b = Range(EndRange, Range(EndRange).End(xlDown))
Union(a,b).Select

将此代码用于示例表时,单元格 A1: A3 和 C1: C6 将被选中。

示例说明

ActiveSheet 属性通常可省略,因为如果指定的工作表不命名,则隐含。 例如,而不是

ActiveSheet.Range("D5").Select

您可以使用:

Range("D5").Select

通常也可以省略 ActiveWorkbook 属性。 除非指定了特定工作簿,否则活动工作簿是隐含的。

使用应用程序. Goto 方法时,如果在指定区域位于另一(非活动)工作表上时,您希望在 Range 方法中使用两个单元格方法,则必须每次包含 Sheets 对象。 例如:

    With ActiveWorkbook.Sheets("Sheet1")
        Application.Goto .Range(.Cells(2, 3), .Cells(4, 5))
    End With

对于引号中的任何项(例如,命名区域 "Test"),您还可以使用其值为文本字符串的变量。 例如,而不是

ActiveWorkbook.Sheets("Sheet1").Activate

您可以使用

ActiveWorkbook.Sheets(myVar).Activate

其中 myVar 的值为 "Sheet1"。

作者: Hugh

Welcome to Wan's world~