1. 程式人生 > >如何引用Excel單元格(Range)

如何引用Excel單元格(Range)

使用 Visual Basic 的普通任務是指定單元格或單元格區域,然後對該單元格或單元格區域進行一些操作,如輸入公式或更改格式。
通常用一條語句就能完成操作,該語句可標識單元格,還可更改某個屬性或應用某個方法。

在 Visual Basic 中,Range 物件既可表示單個單元格,也可表示單元格區域。下列主題說明了標識和處理 Range 物件最常用的方法。

用 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 列

用編號引用單元格

通過使用行列編號,可用 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 屬性。有關詳細資訊,請參閱用 A1 樣式記號引用單元格。

引用行和列

可用 Rows 屬性或 Columns 屬性來處理整行或整列。這兩個屬性返回代表單元格區域的 Range 物件。下例中,用 Rows(1) 返回 Sheet1 上的第一行,然後將單元格區域的 Font 物件的 Bold 屬性設定為 True。

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

用快捷記號引用單元格

可用方括號將 A1 引用樣式或命名區域括起來,作為 Range 屬性的快捷方式。這樣就不必鍵入單詞“Range”或使用引號,如下例所示。

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

Sub SetValue()
[MyRange].Value = 30
End Sub

引用命名區域

用名稱比用 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

也可以用

ActiveWorkbook.Names( "MyRange").RefersToRange.Value

獲取命名單元格的值

相對於其他單元格來引用單元格

處理相對於另一個單元格的某一單元格的常用方法是使用 Offset 屬性。下例中,將位於活動工作表上活動單元格下一行和右邊三列的單元格的內容設定為雙下劃線格式。

Sub Underline()
ActiveCell.Offset(1, 3).Font.Underline = xlDouble
End Sub
注意 可錄製使用 Offset 屬性(而不是絕對引用)的巨集。在“工具”選單上,指向“巨集”,再單擊“錄製新巨集”,然後單擊“確定”,再單擊錄製巨集工具欄上的“相對引用”按鈕。

若要在單元格區域中迴圈,請在迴圈中將變數與 Cells 屬性一起使用。下例以 5 為步長,用 5 到 100 之間的值填充第三列的前 20 個單元格。變數 counter 用作 Cells 屬性的行號。

Sub CycleThrough()
Dim counter As Integer
For counter = 1 To 20
Worksheets("Sheet1").Cells(counter, 3).Value = counter * 5
Next counter
End Sub

用 Range 物件引用單元格

如果將物件變數設定為 Range 物件,即可用變數名方便地操作單元格區域。

下述過程建立了物件變數 myRange,然後將活動工作簿中 Sheet1 上的單元格區域 A1:D5 賦予該變數。隨後的語句用該變數代替該區域物件,以修改該區域的屬性。

Sub Random()
Dim myRange As Range
Set myRange = Worksheets("Sheet1").Range("A1:D5")
myRange.Formula = "=RAND()"
myRange.Font.Bold = True
End Sub

引用工作表上的所有單元格

如果對工作表應用 Cells 屬性時不指定編號,該屬性將返回代表工作表上所有單元格的 Range 物件。下述 Sub 過程清除活動工作簿中 Sheet1 上的所有單元格的內容。

Sub ClearSheet()
Worksheets("Sheet1").Cells.ClearContents
End Sub

引用多個單元格區域

使用適當的方法可以很容易地同時引用多個單元格區域。可用 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 "Cannot do this to a multiple selection."
End If
End Sub