如何在 Excel 中使用 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

如何在活动工作表上选择命名范围

若要在活动工作表上选择命名范围“测试”,可以使用以下示例之一:

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

如何在同一工作簿中选择另一个工作表上的命名范围

若要在同一工作簿中的另一个工作表上选择命名范围“测试”,可以使用以下示例:

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

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

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

如何在不同工作簿的工作表上选择命名范围

若要在其他工作簿中的工作表上选择命名范围“测试”,可以使用以下示例:

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 右侧四列的单元格,可以使用以下示例之一:

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

如何选择指定的范围并调整所选内容的大小

若要选择命名范围“数据库”,然后将所选内容扩展五行,可以使用以下示例:

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"))

返回错误消息:

应用程序类的联合方法失败

如何选择两个或多个指定范围的交集

若要选择两个命名范围“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。 在此示例中,由于第 5 行上的空白行,CurrentRegion 方法将不起作用。 以下示例将选择所有单元格:

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 属性。 除非指定了特定工作簿,否则会隐含活动工作簿。

使用 Application.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”。