Tìm hiểu thuộc tính FormulaR1C1 trong VBA
Trong bài này mình sẽ giải thích thuộc tính FormulaR1C1 trong VBA, đây là thuộc tính mà bạn sẽ thấy khi sử dụng tính năng Record Macro.
Trong VBA có thuộc tính Formula dùng để tạo công thức rồi, nhưng tại sao lại xuất hiện thêm thuộc tính FormulaR1C1? Điều này dễ hiểu bởi tính năng Record Macro không đủ thông minh như con người để đưa ra công thức chuẩn, nó sẽ dựa vào một quy luật khác và dùng FormulaR1C1 thay thế cho Formula.
* Lưu ý: Bạn phải đọc hai bài dưới đây trước khi xem bài này nhé.
Ta sẽ làm từng bước để các bạn dễ hiểu hơn nhé.
Bài viết này được đăng tại [free tuts .net]
I. Formula A1 Style
Tạo một command button trong worksheet mà bạn đang sử dụng, sau đó nhập giá trị cho ô B3 = 2. Cuối cùng nhập công thức sau vào sự kiện click của button đó.
Range("D4").Formula = "=B3*10"
Khi bạn click vào button thì kết quả sẽ như sau:
Rất dể hiểu, bởi công thức mà ta gắn vào rất giống với công thức Excel mà ta đã học ở series Excel căn bản.
Và cách sử dụng công thức kiểu này ta gọi là A1 Style.
II. Formula R1C1 - tham chiếu tương đối
Vẫn là bài toán ở phần 1, hãy thay đổi công thức cho sự kiện click vào button thành:
Range("D4").FormulaR1C1 = "=R3C2*10"
Lưu lại và click vào button thì bạn sẽ nhận kết quả:
Kết quả vẫn như nhau nhưng công thức thì lại khác.
Giải thích:
- Công thức R3C2 chính là ô nằm ở Row 3 và Cột 2 => chính là ô B3
- Style này là tham tương đối nên nhìn vào công thức bạn sẽ thấy có ký hiệu
$
đằng trước ($B$3).
Nếu quay lại bài tham chiếu khi record macro thì nó chính là tùy chọn Use Relative References.
3. Formula R[1]C[1] - Tham chiếu tuyệt đối
Công thức này nó sẽ tính từ vị trí của ô đang chạy công thức tiến tới hoặc lùi bao nhiêu ô tùy vào giá trị mà ta truyền vào, điểm tiếp giáp chính là vị trí tham chiếu.
- R[1]C[1] => Nhảy xuống 1 row và tiến tới 1 column
- R[-1]C[-1] => Nhảy lên 1 row và lùi 1 column
Xét đến ví dụ ở trên thì ta phân tích như sau: Ô đang chọn là ô D4, ô cần tham chiếu là ô B3 nên:
- Nhảy lên 1 row => R[-1]
- Lùi 2 column => C[-2]
- => Kéte quả là R[-1]C[-2]
Bạn hãy đổi lại công thức ở macro như sau:
Range("D4").FormulaR1C1 = "=R[-1]C[-2]*10"
Chạy macro thì kết quả sẽ như sau:
Giải thích: Vì là tham chiếu tuyệt đối nên công thức không có ký tự đô la $
.
Qua bài này thì ta thấy macro sẽ dựa vào công thức của FormulaR1C1 để nhận biết đang là tham chiếu tương đối hay tuyệt đối.
Như vậy là mình đã giải thích được ý nghĩa của hai thuộc tính Formula và FormulaR1C1 trong Excel. Chúc bạn học tốt nhé.