如何引用Excel單元格(Range)

原文地址:http://www.cnblogs.com/sunrack/articles/804522.html

參考帖子:http://topic.csdn.net/t/20040804/20/3243066.html

 

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章