VBA中的常用單元格引用方式

VBA編程經常和“對象”打交道,其中最頻繁的對象大概就是“單元格”了。(聽說您還沒有對象?那……我想你大概需要一份Excel,包郵988……)


VBA中的常用單元格引用方式

今天我們就來聊一下單元格的各種引用方式,比如單個單元格、行列、連續和不連續的單元格區域、相連的和交叉的單元格區域等等……。


1,當前表所有的單元格

Cells.ClearContents 清空當前表所有單元格的內容

2,當前活動單元格

ActiveCell.Value = "看見星光"

活動單元格的值等於聰明可愛的看見星光。

3,單個單元格

例如A1單元格,最常用的方式有3種:

[a1]

Range("a1") 等同於 Range("a"&1)

Cells(1,1) 等同於 Cells(1,"a"),也就是說也可以用字母表示。

三種方式裡書寫最簡便的是[a1],運算效率最高的是cells(1,1),自帶方法屬性的是Range,最後,後兩種方式支持使用變量。

4,連續單元格區域

比如選取A1:B10單元格區域……

[a1:b10]

Range("a1:b10") 等同於 Range("a" & 1 & ":b" & 10)

Range("a1","b10") 等同於 Range(cells(1,1),cells(10,2)

Range("a1").Resize(10,2),意思是以[A1]為起點,向下取10行,向右取2列……

第一種方法輸入最簡便,但不支持變量。第二種方法支持變量,但書寫麻煩,第三種方法比較少用,第四種Resize常用,它也可搭配數組使用,以便將數組結果寫入單元格區域。

5,不連續單元格區域

比如選取A1:A10,C1:C10,F1:F10三個單元格區域。

Range("a1:a10, c1:c10, f1:f10")

Union(Range("a1:a10"), Range("c1:c10"), Range("f1:f10"))

第一種方法是直接選取,缺乏足夠的靈活性。第二種union是必會語句,常用於搭配變量進行單元格高效批量操作,例如合併單元格處理等等。

6,行和列

比如第一行

Rows(1)

Range("a1").EntireRow

Rows("1:2") 第1和2行

比如第一列

Columns(1)

Columns("a:a")

Range("a1").EntireColumn

7,數據相連的單元格區域

例如以A1為點,數據相連的單元格區域。

Range("a1").CurrentRegion.Select

VBA中的常用單元格引用方式

如果一個表格的數據足夠規範(字段和記錄不缺失),我們通常使用CurrentRegion來選取整份表格的數據。

8,當前表已使用的單元格區域

ActiveSheet.UsedRange.Select

VBA中的常用單元格引用方式

這裡需要說明的是,一張表格,即便從未輸入任何數據,它依然存在UsedRange,也就是默認的A1單元格。因此……使用UsedRange並無法直接判斷一張表格是否空白……

以下語句清除當前表格除了第一行以外的內容,常用於保存標題,清除明細記錄。

ActiveSheet.UsedRange.Offset(1).ClearContents

9,交叉的單元格區域

比如選取當前表c:d列已使用的單元格區域,也就是C:D列和當前表已使用的單元格區域交叉的部分……

Intersect([c:d], ActiveSheet.UsedRange).Select

VBA中的常用單元格引用方式


10,以某個單元格或區域偏移取值

例如已知變量K,並假定K=10

以A1單元格為起點,向下移動K行後的指定單元格:

[a1].Offset(K, 0).Select

注意,該語句選取A11單元格,不是A10。

Offset第二參數可以省略,省略意味為0,以上語句也可以簡寫成:

[a1].Offset(K).Select

另外,Offset參數可以為負數。

……

以A1單元格為起點,向下擴展K行1列後的指定單元格區域:

[a1].Resize(k, 1).Select

注意,該語句選取A1:A10單元格區域,不是A1:B10。

Resize第二參數也可以省略,但省略意味為1,以上語句可以簡寫成:

[a1].Resize(k).Select

Resize的參數不能為0(選取的單元格區域不可能是0行或0列)或負數。


11,特殊單元格定位

類似於基礎操作中的定位功能(快捷鍵F5或Ctrl+G)。

比如定位一張表的錯誤值單元格:

Cells.SpecialCells(xlCellTypeFormulas, 16).Select

再比如快速刪除A列單元格為空白的記錄行:

Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

相關語句均可以通過錄制宏獲取,初學階段並不需要刻意去記憶。

……

就醬紫,溫暖的擁抱,安,愛你們。


圖文作者 看見星光


分享到:


相關文章: