在介紹了儲存格的基本語法以及跟變數的搭配使用之後
這篇來介紹 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 整個範圍往右移動一格
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
以此類推
是不是有點樣子了呢
這個例子就留給大家想一下為什麼會有這樣的執行結果嚕
介紹到這篇,雖然可以達成一些目標了
但是還沒有達到 VBA 最方便的地方
就是 "自動化"
像是以上的例子
如果我想填 1-1000 不就得按 1000 次~Orz
雖然還是比打得快
但是科技始終來自於惰性嘛 XD
下次就來介紹一下怎麼一步到位嚕
簡明易懂喔!很棒的教學文!謝啦
回覆刪除簡明易懂!很棒的教學文!謝謝
回覆刪除