当前位置:文档之家› 在EXCEL中使用VBA代码选择区域

在EXCEL中使用VBA代码选择区域

目录

1)如何选择当前工作表中的单元格?

2)如何选择同一工作簿中其它工作表上的单元格?

3)如何选择不同工作簿中的单元格?

4)如何选择当前工作表中的单元格区域?

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

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

7)如何在当前工作表中选择命名区域?

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

9)如何选择不同工作簿中工作表上的命名区域?

10)如何选择与当前单元格相关的单元格?

11)如何选择与另一单元格(不是当前单元格)相关的单元格?

12)如何选择偏离指定区域的一个单元格区域?

13)如何选择一个指定的区域并扩展区域的大小?

14)如何选择一个指定的区域,再偏离,然后扩展区域的大小?

15)如何选择两个或多个指定区域?

16)如何选择两个或多个指定区域的交叉区域?

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

18)如何选择连续数据列底部的空单元格?

19)如何选择某列中连续数据单元格区域?

20)如何选择某列中非连续数据单元格区域?

21)如何选择一个矩形(规则的)单元格区域?

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

23)引用工作表上的所有单元格

24)使用 A1 表示法引用单元格和区域

25)引用行和列

26)使用索引号引用单元格

27)使用快捷表示法引用单元格

28)使用 Range 对象引用单元格

29)引用命名区域

30)引用多个区域

31)处理三维区域



--------------------------------------------------------------------------------


1)如何选择当前工作表中的单元格?

例如,可以使用下面的代码选择当前工作表中的单元格D5:

ActiveSheet.Cells(5, 4).Select

或:ActiveSheet.Range("D5").Select



--------------------------------------------------------------------------------


2)如何选择同一工作簿中其它工作表上的单元格?

例如,要选择同一工作簿中另一工作表上的单元格E6,可以使用下面的代码:

Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(6, 5)

或:Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6"))

也可以先激活该工作表,然后再选择:

Sheets("Sheet2").Activate

ActiveSheet.Cells(6, 5).Select



--------------------------------------------------------------------------------


3)如何选择不同工作簿中的单元格?

例如,要选择另一工作簿中的一个工作表上的单元格F7,可以使用下面的代码:

Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Cells(7, 6)

或:Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("F7")

也可以先激活该工作簿中的工作表,然后再选择:

Workbook

s("BOOK2.XLS").Sheets("Sheet1").Activate

ActiveSheet.Cells(7, 6).Select



--------------------------------------------------------------------------------


4)如何选择当前工作表中的单元格区域?

例如,要选择当前工作表中的单元格区域C2:D10,可以使用下面的代码:

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

或:ActiveSheet.Range("C2:D10").Select

或:ActiveSheet.Range("C2", "D10").Select



--------------------------------------------------------------------------------


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

例如,要选择同一工作簿中另一工作表上的单元格区域D3:E11,可以使用下面的代码:

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

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

也可以先激活该工作表,然后再选择:

Sheets("Sheet3").Activate

ActiveSheet.Range(Cells(3, 4), Cells(11, 5)).Select



--------------------------------------------------------------------------------


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

例如,要选择另一工作簿中某工作表上的单元格区域E4:F12,可以使用下面的代码:

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

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

也可以先激活该工作表,然后再选择:

Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate

ActiveSheet.Range(Cells(4, 5), Cells(12, 6)).Select



--------------------------------------------------------------------------------


7)如何在当前工作表中选择命名区域?

例如,要选择当前工作表中名为“Test”的区域,可以使用下面的代码:

Range("Test").Select

或:Application.Goto "Test"



--------------------------------------------------------------------------------


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

例如,选择同一工作簿中另一工作表上名为“Test”的区域,可使用下面的代码:

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

也可以先激活工作表,再选择:

Sheets("Sheet1").Activate

Range("Test").Select



--------------------------------------------------------------------------------


9)如何选择不同工作簿中工作表上的命名区域?

例如,要选择不同工作簿中工作表上名为“Test”的区域,可使用下面的代码:

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

也可以先激活工作表,再选择:

Workbooks("BOOK2.XLS").Sheets("Sheet2").Activate

Range("Test").Select



--------------------------------------------------------------------------------


10)如何选择与当前单元格相关的单元格?

例如,要选择距当前单元格下面5

行左侧4列的单元格,可以使用下面的代码:

ActiveCell.Offset(5, -4).Select

要选择距当前单元格上方2行右侧3列的单元格,可以使用下面的代码:

ActiveCell.Offset(-2, 3).Select

注意:一定要保证当前单元格与所选单元格之间的距离在工作表范围内,否则会出错。



--------------------------------------------------------------------------------


11)如何选择与另一单元格(不是当前单元格)相关的单元格?

例如,要选择距单元格C7下方5行右侧4列的单元格,可以使用下面的代码:

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

或:ActiveSheet.Range("C7").Offset(5, 4).Select



--------------------------------------------------------------------------------


12)如何选择偏离指定区域的一个单元格区域?

例如,要选择与名为“Test”的区域大小相同但在该区域下方4行右侧3列的一个区域,可以使用下面的代码:

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

如果该命名区域不在当前工作表中,可以先激活该工作表,然后再选择,如下面的代码:

Sheets("Sheet3").Activate

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



--------------------------------------------------------------------------------


13)如何选择一个指定的区域并扩展区域的大小?

例如,要选择当前工作表中名为“Database”区域,然后将该区域向下扩展5行,可以使用下面的代码:

Range("Database").Select

Selection.Resize(Selection.Rows.Count + 5, Selection.Columns.Count).Select



--------------------------------------------------------------------------------


14)如何选择一个指定的区域,再偏离,然后扩展区域的大小?

例如,选择名为“Database”区域下方4行右侧3列的一个区域,然后扩展2行和1列,可以使用下面的代码:

Range("Database").Select

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



--------------------------------------------------------------------------------


15)如何选择两个或多个指定区域?

例如,为了同时选择名为“Test”和“Sample”的两个区域,可以使用下面的代码:

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

注意,这两个区域须在同一工作表中,如下面的代码:

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

但Union方法不能处理不同工作表中的区域,可下面的代码:

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

将会出错。



--------------------------------------------------------------------------------


16)如何选择两个或多个指定区域的交叉区域?

例如,要选择名为“Test”和“Sample”的两个区域的交叉区域,可以使用下面的代码



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

注意,两个区域必须在同一工作表中。




--------------------------------------------------------------------------------


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

例如,要选择一个连续列中的最后一个单元格,可以使用下面的代码:

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

该代码使用在上面的工作表中,单元格A4被选择。



--------------------------------------------------------------------------------


18)如何选择连续数据列底部的空单元格?

例如,要选择连续单元格区域下面的单元格,可以使用下面的代码:

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

该代码使用在上面的工作表中,单元格A5被选择。



--------------------------------------------------------------------------------


19)如何选择某列中连续数据单元格区域?

例如,要选择一列中的连续数据单元格区域,可以使用下面的代码:

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

或:ActiveSheet.Range("a1:" & ActiveSheet.Range("a1").End(xlDown).Address).Select

该代码使用在上面的工作表中,单元格区域A1:A4将被选择。



--------------------------------------------------------------------------------


20)如何选择某列中非连续数据单元格区域?

例如,要选择某列中非连续数据单元格区域,可以使用下面的代码:

ActiveSheet.Range("a1", ActiveSheet.Range("a65536").End(xlUp)).Select

或:ActiveSheet.Range("a1:" & ActiveSheet.Range("a65536").End(xlUp).Address).Select

该代码使用在上面的工作表中,单元格区域A1:A6将被选择。



--------------------------------------------------------------------------------


21)如何选择一个矩形(规则的)单元格区域?

要选择围绕某单元格的一个矩形区域,可以使用CurrentRegion方法。CurrentRegion方法将选择四周被空行和空列围绕的区域,如下面的代码:

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

该代码使用在上面的工作表中,将选择单元格区域A1:C4。也可以使用下面的代码:

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

或:

ActiveSheet.Range("a1:" & ActiveSheet.Range("a1").End(xlDown).End(xlToRight).Address).Select

若想选择单元格区域A1:C6,可使用下面的代码:

lastCol = ActiveSheet.Range("a1").End(xlToRight).Column

lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row

ActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select

或:

lastCol = ActiveSheet.Range("a1").End(xlToRight).Column

lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row

ActiveSheet.Range("a1:" & ActiveSheet.Cells(lastRow, lastCol).Address).Select



--------

------------------------------------------------------------------------


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

例如,有下图所示的工作表:



要同时选择A列和C列中的数据,即单元格区域A1:A3和C1:C6,可使用下面的代码:

StartRange = "A1"

EndRange = "C1"

Set a = Range(StartRange, Range(StartRange).End(xlDown))

Set b = Range(EndRange, Range(EndRange).End(xlDown))

Union(a, b).Select



注:使用Application.Goto方法,如果指定另一工作表(不是当前工作表)中的指定区域,在Range属性中使用两个Cells属性时,则必须包括Sheets对象,如:

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



在VBA中,Range 对象既可表示单个单元格,也可表示单元格区域。下面的内容说明了标识和处理Range对象最常用的方法。



--------------------------------------------------------------------------------


23)引用工作表上的所有单元格

如果对工作表应用 Cells 属性时不指定索引号,该方法将返回代表工作表上所有单元格的 Range 对象。以下 Sub 过程清除活动工作簿中 Sheet1 上的所有单元格的内容。

Sub ClearSheet()

Worksheets("Sheet1").Cells.ClearContents

End Sub



--------------------------------------------------------------------------------


24)使用 A1 表示法引用单元格和区域

可使用 Range 属性引用 A1 引用样式中的单元格或单元格区域。下述子例程将单元格区域 A1:D5 的字体设置为加粗。

Sub FormatRange()

Workbooks("Book1").Sheets("Sheet1").Range("A1:D5") _

.Font.Bold = True

End Sub

下表演示了使用 Range 属性的一些 A1 样式引用。

引用 含义

Range("A1") 单元格 A1

Range("A1:B5") 从单元格 A1 到单元格 B5 的区域

Range("C5:D9,G9:H16") 多块选定区域

Range("A:A") A 列

Range("1:1") 第一行

Range("A:C") 从 A 列到 C 列的区域

Range("1:5") 从第一行到第五行的区域

Range("1:1,3:3,8:8") 第 1、3 和 8 行

Range("A:A,C:C,F:F") A 、C 和 F 列



--------------------------------------------------------------------------------


25)引用行和列

可用 Rows 属性或 Columns 属性来处理整行或整列。这两个属性返回代表单元格区域的 Range 对象。在下例中,Rows(1) 返回 Sheet1 上的第一行,然后将区域字体加粗。

Sub RowBold()

Worksheets("Sheet1").Rows(1).Font.Bold = True

End Sub

下表举例说明了使用 Rows 和 Columns 属性的一些行和列的引用。

引用 含义

Rows(1) 第一行

Rows 工作表上所有的行

Columns(1) 第一列

Columns("A") 第一列

Columns 工作表上所有的列

若要

同时处理若干行或列,可创建一个对象变量并使用 Union 方法,将对 Rows 属性或 Columns 属性的多个调用组合起来。下例将活动工作簿中第一张工作表上的第一行、第三行和第五行的字体设置为加粗。

Sub SeveralRows()

Worksheets("Sheet1").Activate

Dim myUnion As Range

Set myUnion = Union(Rows(1), Rows(3), Rows(5))

myUnion.Font.Bold = True

End Sub



--------------------------------------------------------------------------------


26)使用索引号引用单元格

通过使用行列索引号,可用 Cells 属性引用单个单元格。该属性返回代表单个单元格的 Range 对象。在下例中,Cells(6,1) 返回 Sheet1 上的单元格 A6,然后将 Value 属性设置为 10。

Sub EnterValue()

Worksheets("Sheet1").Cells(6, 1).Value = 10

End Sub

因为可用变量替代编号,所以 Cells 属性非常适合于在单元格区域中循环,如下例中所示。

Sub CycleThrough()

Dim Counter As Integer

For Counter = 1 To 20

Worksheets("Sheet1").Cells(Counter, 3).Value = Counter

Next Counter

End Sub

如果要同时更改某个区域中所有单元格的属性(或将方法应用于该区域中的所有单元格),建议使用 Range 属性。



--------------------------------------------------------------------------------


27)使用快捷表示法引用单元格

可用方括号将 A1 引用样式或命名区域括起来,作为 Range 属性的快捷方式。这样就不必键入单词“Range”或使用引号了,如下例中所示。

Sub ClearRange()

Worksheets("Sheet1").[A1:B5].ClearContents

End Sub

Sub SetValue()

[MyRange].Value = 30

End Sub



--------------------------------------------------------------------------------


28)使用 Range 对象引用单元格

如果将对象变量设置为 Range 对象,即可用变量名轻松地操作单元格区域。

以下过程将创建对象变量 myRange,然后将活动工作簿中 Sheet1 上的区域 A1:D5 赋予该变量。随后的语句用该变量名称代替 Range 对象,以修改该区域的属性。

Sub Random()

Dim myRange As Range

Set myRange = Worksheets("Sheet1").Range("A1:D5")

myRange.Formula = "=RAND()"

myRange.Font.Bold = True

End Sub



--------------------------------------------------------------------------------


29)引用命名区域

用名称比用 A1 样式记号更容易标识单元格区域。若要命名选定的单元格区域,请单击编辑栏左端的名称框,键入名称,再按 Enter。



>>>引用命名区域

以下示例引用名为“MyBook.xls”的工作簿中名为“MyRange”的区域。

Sub FormatRange()

Range("MyBook.xls!MyRange").Font.Italic = True

End Sub

以下示例引用名为“Report.xls”的工作簿中特定于工作表的区域“Sheet1!Sales

”。

Sub FormatSales()

Range("[Report.xls]Sheet1!Sales").BorderAround Weight:=xlthin

End Sub

要选定命名区域,可使用 GoTo 方法,该方法将激活工作簿和工作表,然后选定该区域。

Sub ClearRange()

Application.Goto Reference:="MyBook.xls!MyRange"

Selection.ClearContents

End Sub

以下示例显示对于活动工作簿将如何编写与上例相同的过程。

Sub ClearRange()

Application.Goto Reference:="MyRange"

Selection.ClearContents

End Sub



>>>在命名区域中的单元格上循环

下例用 For Each...Next 循环语句在命名区域中的每一个单元格上循环。如果该区域中的任一单元格的值超过 limit 的值,就将该单元格的颜色更改为黄色。

Sub ApplyColor()

Const Limit As Integer = 25

For Each c In Range("MyRange")

If c.Value > Limit Then

c.Interior.ColorIndex = 27

End If

Next c

End Sub



--------------------------------------------------------------------------------


30)引用多个区域

使用适当的方法可以很容易地同时引用多个单元格区域。可用 Range 和 Union 方法引用任意组合的单元格区域;用 Areas 属性可引用工作表上选定的一组单元格区域。



>>>使用 Range 属性

通过在两个或多个引用之间插入逗号,可使用 Range 属性引用多个区域。以下示例清除了 Sheet1 上三个区域的内容。

Sub ClearRanges()

Worksheets("Sheet1").Range("C5:D9,G9:H16,B14:D18"). _

ClearContents

End Sub

命名区域使得用 Range 属性处理多个区域更加容易。以下示例可在所有这三个命名区域处于同一工作表时运行。

Sub ClearNamed()

Range("MyRange, YourRange, HisRange").ClearContents

End Sub



>>>使用 Union 方法

使用 Union 方法可将多个区域组合到一个 Range 对象中。以下示例创建了名为 myMultipleRange 的 Range 对象,并将其定义为区域 A1:B2 和 C3:D4 的组合,然后将该组合区域的字体设置为加粗。

Sub MultipleRange()

Dim r1, r2, myMultipleRange As Range

Set r1 = Sheets("Sheet1").Range("A1:B2")

Set r2 = Sheets("Sheet1").Range("C3:D4")

Set myMultipleRange = Union(r1, r2)

myMultipleRange.Font.Bold = True

End Sub



>>>使用 Areas 属性

可用 Areas 属性引用选定的单元格区域或多块选定区域中的区域集合。下述过程计算选定区域中的块数目,如果有多个块,就显示一则警告消息。

Sub FindMultiple()

If Selection.Areas.Count > 1 Then

MsgBox "不能对多个选区进行操作."

End If

End Sub



--------------------------------------------------------------------------------


31)处理三维区域

如果要处理若干工作表上相同位置的单元格区域,可用 Array 函数选定两张或多张工作

表。下例设置三维单元格区域的边框格式。

Sub FormatSheets()

Sheets(Array("Sheet2", "Sheet3", "Sheet5")).Select

Range("A1:H1").Select

Selection.Borders(xlBottom).LineStyle = xlDouble

End Sub

下例应用 FillAcrossSheets 方法,将 Sheet2 上的区域中的格式和所有数据传送到活动工作簿中所有工作表上的相应区域。

Sub FillAll()

Worksheets("Sheet2").Range("A1:H1") _

.Borders(xlBottom).LineStyle = xlDouble

Worksheets.FillAcrossSheets (Worksheets("Sheet2") _

.Range("A1:H1"))

End Sub

相关主题
文本预览
相关文档 最新文档