Offset là một hàm thú vị trong Excel. Và trong VBA chúng ta cũng có Offset dưới dạng 1 thuộc tính của đối tượng Cells, Range. Trong bài viết này chúng ta cùng tìm hiểu về thuộc tính OFFSET trong VBA Excel nhé.
Xem nhanh
Bản chất của Offset là việc di chuyển từ 1 vị trí này tới vị trí khác. Gồm có điểm gốc và điểm đến. Điểm đến sẽ cách điểm gốc bao nhiêu dòng, bao nhiêu cột, và theo hướng nào.
Offset trong VBA được viết như sau:
Expression có thể là 1 Range (vùng ô) hoặc 1 Cells (ô)
Khi viết thuộc tính Offset thì kèm theo dấu chấm, sau đó gọi tên thuộc tính theo cú pháp
Tham số bên trong Offset được viết trong cặp dấu ngoặc đơn, gồm:
Ví dụ1 : Range(“A1”).Offset(0, 1)
=> Điểm gốc là ô A1, di chuyển 0 dòng và 1 cột về bên phải => Kết quả là tham chiếu tới ô B1
Ví dụ 2: Cells(5, 3).Offset(-1, 2)
=> Điểm gốc là ô C5 (dòng 5 cột 3), di chuyển 1 dòng lên phía trên, 2 cột về bên phải => Kết quả tham chiếu tới ô E4 (dòng 4 cột 5)
* Chú ý:
Để biết kết quả của Range, Cells có phương thức Offset sẽ di chuyển tới đâu, lấy chính số dòng, số cột cộng trực tiếp tương ứng với tham số bên trong Offset. Kết quả của số dòng, cột mới chính là tọa độ của điểm mới sẽ di chuyển tới.
Ví dụ 1:
Range(“A1”) = Cells(1, 1)
Range(“A1”).Offset(0, 1) = Cells(1 + 0, 1 + 1) = Cells(1, 2) là dòng 1 cột 2, chính là ô B1
Ví dụ 2:
Cells(5, 3).Offset(-1, 2) = Cells(5 – 1, 3 + 2) = Cells(4, 5) là dòng 4 cột 5, chính là ô E4
Trong bảng danh sách nhân viên, hãy xác định mức thưởng cho nhân viên biết: Nếu nhân viên ở bộ phận kinh doanh có mức thưởng là 500:
Câu lệnh VBA là:
Trong ví dụ này, ta thấy câu lệnh:
bien_DoiTuong.Offset(0, 1).Value = Range(“F2”).Value
Câu lệnh này có ý nghĩa là kết quả được lấy vào vị trí ô tương ứng với ô bien_DoiTuong, cách ô đó 1 cột (chính là cột Mức thưởng) theo giá trị tại ô F2.
Khi sử dụng cú pháp For Each, chúng ta phải căn cứ vào biến đối tượng, kết quả phải có liên quan tới biến đối tượng. Do vậy dùng hàm Offset để di chuyển tới ô kết quả tương ứng theo ô Biến đối tượng.