1. Di chuyển chọn 1 ô khác so với ô hiện hành có tọa độ (cách a hàng, cách b cột): a, b có thể âm hoặc dương.
* Mẫu câu lệnh: ActiveCell.Offset(a số hàng, bsố cột).Range("A1").Select
* Ví dụ:
- Con trỏ ô đang ở ô B1. Ta muốn chuyển qua chọn ô khác mà có vị trí cách dưới ô "B1" 2 hàng (tức hàng 3), qua phải 3 cột (tức cột E).
- Câu lệnh: ActiveCell.Offset(2, 3).Range("A1").Select
- Kết quả: sẽ chọn ô E3.
2. Di chuyển chọn 1 khối ô khác so với ô hiện hành:
* Mẫu câu lệnh: ActiveCell.Offset(số hàng, số cột).Range("Khối ô có dòng và cột mong muốn với ô đầu tiên gọi là A1").Select
Ví dụ:
- Con trỏ ô đang ở ô B3. Ta muốn chuyển qua chọn (khối ô gồm: 10 dòng, 4 cột) có vị trí cách ô hiện tại 3 dòng, 4 cột.
- Câu lệnh: ActiveCell.Offset(3, 4).Range("A1: D10").Select
- Kết quả: sẽ chọn (khối ô F6:I15)
==> Các bạn sẽ đặt câu hỏi:
1. Tại sao lại có chữ Range("A1") trong khi chúng ta chẳng đụng gì đến ô A1 cả (chúng ta chuyển từ ô B1 sang ô E3 mà)?
2. Tại sao lại có chữ Range("A1:D10") trong khi kết quả lại chọn (khối ô F6:I15)?
* Phân tích:
- Thật ra Khi bộ thu macro làm việc thì nó coi như phần chọn mới là 1 bảng tính mini:
+ Nếu chỉ chọn mới 1 ô: thì nó xem bảng tính mini này có 1 ô duy nhất là ô A1 (mang nghĩa định danh tương đối). Tương đối chính là ý nghĩa này.
Ở trường hợp chọn 1 ô duy nhất thì ta xóa Range("A1") câu lệnh vẫn thực hiện bình thường.
+ Nếu chọn vùng ô: thì nó xem bảng tính mini này có số dòng và số cột theo yêu cầu, bắt đầu từ ô A1 (mang nghĩa định danh tương đối). Ở ví dụ khối chúng ta cần gồm 10 dòng, 4 cột nên ở câu lệnh nó định danh kích cỡ bảng tính mini là "A1: D10" = 10 dòng, 4 cột (cột A, B, C, D).