2013年1月24日 星期四

VBA 小學堂-進階一點的儲存格語法

在介紹了儲存格的基本語法以及跟變數的搭配使用之後

這篇來介紹 2 個也很常用的但是稍微進階一點的語法

Offset() 以及 End()

其實這兩個語法原理也很簡單的

讓我們繼續看下去

1. Offset()

簡單的說 Offset() 就是在已選定的儲存格做移動

寫法是 Offset(a, b)

a, b 的意思跟 Cells() 差不多

a 就是直方向的移動 (1, 2, 3…)、b 就是橫方向的移動 (A, B, C…)

舉個例子可能比較好懂

Sub test()
Range("A1").Offset(1, 0).Select
End Sub

這段程式碼的意思就是選擇 A1 往下 1 格的儲存格 (也就是 A2)

同理

Sub test()
Range("A1").Offset(0, 1).Select
End Sub

指的就是選擇儲存格 B1

那考考大家

Sub test()
Range("A1").Offset(1, 1).Select
End Sub

是哪個儲存格?

不知道的話就寫來執行看看嚕

這邊額外說明一下

Offset(a, b) 的 a, b 可以是負數的 (Cells 不可負數)

負數就是可以往負的地方移動 (廢話 = =)

譬如說 Offset(-1, 0) 就是往上移動 1 格,以此類推嚕

另外 Offset() 移動儲存格不一定只有單一儲存格的移動

也可以是範圍儲存格的移動,舉個例子如下

Sub test()
Range("A1", "C3").Offset(0, 1).Select
End Sub

指的就是將 A1:C3 整個範圍往右移動一格

image

image

2. End()

End() 其實跟平常在使用 Excel 的 Ctrl + ↑、↓、←、→ 的功能是一樣的

意思就是找最後一筆資料

End(xlUp) = Ctrl + ↑

End(xlDown) = Ctrl + ↓

End(xlLeft) = Ctrl + ←

End(xlRight) = Ctrl + →

譬如說你選在 A1 儲存格 (此時整張表都沒有資料)

按一下 Ctrl + ↓,你會發現儲存格選取位置跑到  A1048576

也就是資料的底端 (Excel 2010 可以到 1048576 列)

這個動作同等於 End(xlDown)

此時再按一次 Ctrl + ↑ 可回到 A1

這個動作同等於 End(xlDown)

但是假設今天 A1:A20 有資料

同樣的一開始選取 A1,接著按一下 Ctrl + ↓

你會發現會選取的儲存格會是 A20 (資料的底端),而不是 A1048576

此時在 A20 再按一下 Ctrl + ↓,才會到 A1048576

接著再按一下 Ctrl + ↑,則會回到 A20 而非 A1

這其中的奧妙還要請大家體會一下 (茶)

而 End() 大部份的用法就是用來找資料的最後一筆

然後配合 Offset() 接著填寫新的資料下去

再來一個 End() 配合 Offset() 的例子來做個 Ending

Sub test()
Range("A1048576").End(xlUp).Offset(1, 0) = Range("A1048576").End(xlUp) + 1
End Sub

寫好之後指定到一個按鈕

並在儲存格 A1 隨便填一個數字進去

接著按下按鈕

你會發現每按一次,會往下填一個數字

而且數字會是 +1

以此類推

image

是不是有點樣子了呢

這個例子就留給大家想一下為什麼會有這樣的執行結果嚕

介紹到這篇,雖然可以達成一些目標了

但是還沒有達到 VBA 最方便的地方

就是 "自動化"

像是以上的例子

如果我想填 1-1000 不就得按 1000 次~Orz

雖然還是比打得快

但是科技始終來自於惰性嘛 XD

下次就來介紹一下怎麼一步到位嚕

2 則留言:

Related Posts Plugin for WordPress, Blogger...