Trong lập trình VBA Excel, Range là đối tượng thường xuyên được sử dụng nhất. Nhưng cụ thể cách viết đối tượng này ra sao, ứng dụng của đối tượng Range trong VBA như thế nào? Các bạn hãy cùng Học Excel Online tìm hiểu cách viết code với đối tượng Range trong VBA Excel để biết cách làm nhé.
Xem nhanh
Range được hiểu là 1 ô hoặc 1 vùng ô trong Excel. Trong VBA có 2 dạng biểu diễn đối tượng Range:
Dạng thứ 1: Range cố định địa chỉ (hay đã xác định cụ thể tọa độ)
Khi muốn biểu diễn 1 vùng ô mà bạn đã xác định rõ tọa độ của các dòng, cột trong vùng ô đó thì bạn có thể viết theo các cách sau:
Bạn có thể viết Range chỉ với 1 ô hoặc nhiều ô, trong đó các vùng ô có thể liên tiếp nhau hoặc tách rời nhau.
Bạn có thể viết Range dựa theo ô ở điểm đầu và ô ở điểm cuối (Range dựa vào Cells để viết)
Dạng thứ 2: Range không cố định địa chỉ
Khi bạn chưa xác định rõ được vùng cần làm việc là vùng nào, dòng bao nhiêu, cột bao nhiêu bởi vùng đó có thể thay đổi trong quá trình làm việc thì bạn phải thông qua các biến. Mỗi khi câu lệnh hoạt động thì biến đó sẽ nhận 1 giá trị, Căn cứ vào giá trị đó để xác định vùng ô mà bạn muốn làm việc.
Cách viết như sau:
Khi viết dạng này, thường chỉ xác định cho 1 ô hoặc 1 vùng ô liên tiếp nhau. Chúng ta chỉ dùng 1 cách viết giống như cách viết thứ 1 của dạng Range cố định địa chỉ vì đây là cách dễ viết nhất, thông dụng nhất trong VBA.
Vì Range là đối tượng thường sử dụng trong lập trình VBA nên có rất nhiều phương thức, thuộc tính được sử dụng. Một số cú pháp gọi thuộc tính tiêu biểu là:
Ví dụ thứ 1: Chọn vùng ô A2:D2
Range(“A2:D2”).Select
[A2:D2].Select
Ví dụ thứ 2: Gán giá trị vào 1 vùng ô
Range(“A1”).Value = “abc”
Có nghĩa là gán vào ô A1 đoạn text là abc
Range(“A2:A5”).Value = Range(“B2:B5”).Value
Có nghĩa là lấy giá trị vào vùng A2:A5 tương ứng theo giá trị vùng B2:B5
Range(“D5”).Formula = “=COUNTIF(D1:D4,””abc””)”
Có nghĩa là gán vào ô D5 công thức =COUNTIF(D1:D4,”abc”)
Ví dụ thứ 3: Ẩn dòng, cột
Range(“A1:A5”).EntireRow.Hidden = True
Có nghĩa là ẩn từ dòng 1 đến dòng 5
Range(“A1:F1”).EntireColumn.Hidden = False
Có nghĩa là bỏ ẩn từ cột A tới cột F
Ví dụ thứ 4: Xóa dữ liệu, xóa ô, xóa dòng, cột
Range(“A1:F10”).ClearContents
Có nghĩa là chỉ xóa dữ liệu trong vùng A1:F10
Range(“A1:F10”).Clear
Có nghĩa là xóa toàn bộ dữ liệu và định dạng trong vùng A1:F10
Range(“A2:A5”).Delete
Có nghĩa là xóa toàn bộ các ô trong vùng A2:A5
Range(“A2:A5”).EntireRow.Delete
Có nghĩa là xóa toàn bộ các dòng từ dòng 2 tới dòng 5
Range chỉ là 1 đối tượng nhỏ nằm trong đối tượng lớn hơn là các Worksheet, Workbook. Do đó:
Range(“A1”).ClearContents cũng chính là ActiveWorkbook.ActiveSheet.Range(“A1”).ClearContents
Trong khi đó nếu file Excel có nhiều Sheet, rất dễ xảy ra trường hợp ActiveSheet thay đổi liên tục trong quá trình chạy lệnh code, dẫn tới kết quả sai.
Trong trường hợp làm việc với nhiều Workbook cùng lúc, cũng rất dễ xảy ra việc ActiveWorkbook được thay đổi liên tục trong quá trình làm việc, dẫn tới kết quả chạy sai vị trí mong muốn.
Ví dụ:
Sheet5.Range(“A2:A5”).Select
Chọn vùng A2:A5 của Sheet5, trong Workbook đang làm việc
Workbook(“abc.xlsm”).Sheets(“VD”).Range(“A1”).Value = “123”
Gán giá trị 123 vào ô A1 trong Sheet có tên là VD, thuộc Workbook có tên là abc, loại file là xlsm
ThisWorkbook.Worksheets(1).Range(“VungDK”).ClearContents
Xóa dữ liệu trong vùng được đặt tên (Define Name) là VungDK, vùng này nằm trong Sheet có thứ tự là 1 của Workbook nơi đặt lệnh code.
Khi mới học lập trình VBA, chúng ta nên lưu ý viết đầy đủ cả Workbook và Worksheet khi làm việc với đối tượng Range. Trường hợp chỉ có duy nhất 1 Workbook thì nên viết cụ thể tên sheet chứa Range cần làm việc. Điều này sẽ giúp các bạn tránh nhầm lẫn, biết rõ vị trí kết quả, tránh trường hợp chạy câu lệnh bị sai vùng Range sang sheet khác.
Hy vọng qua bài viết này các bạn có thể biết cách viết code với đối tượng Range trong VBA. Đây là một đối tượng rất quan trọng, thường xuyên sử dụng trong VBA. Chúc các bạn áp dụng tốt những kiến thức này vào công việc của mình.
Ngoài ra các bạn có thể xem thêm các bài viết:
Tìm hiểu sự khác nhau giữa các thuộc tính Text Value và Value2 của đối tượng Range trong VBA
Hướng dẫn cách viết thuộc tính OFFSET của đối tượng Range trong VBA Excel
Hướng dẫn cách viết thuộc tính RESIZE của đối tượng Range trong VBA Excel