Hướng dẫn cách viết code với đối tượng Range trong VBA Excel

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é.

Cách viết đối tượng Range trong VBA

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.

Một số phương thức, thuộc tính của Range thường sử dụng 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à:

Một số ví dụ minh họa về ứng dụng của Range trong lập trình VBA

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

Lưu ý khi lập trình liên quan tới Range tại các Worksheet, Workbook khác nhau

Range chỉ là 1 đối tượng nhỏ nằm trong đối tượng lớn hơn là các Worksheet, Workbook. Do đó:

  • Khi không nói cụ thể thuộc Worksheet nào, Workbook nào thì chúng ta hiểu: Đó là Range thuộc ActiveSheet (Sheet đang được kích hoạt), Sheet này thuộc ActiveWorkbook (Workbook đang được kích hoạt)

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.

  • Nếu muốn nói 1 Range thuộc 1 Sheet khác, cần nói cụ thể Sheet đó trước khi nhắc tới Range. Nếu muốn nhắc tới Sheet đó thuộc 1 Workbook khác, cần chỉ rõ tên Workbook.

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

Hướng dẫn sử dụng vòng lặp For.. Next trong VBA

Hướng dẫn cách sử dụng vòng lặp For Each trong VBA Excel


Tác giả: duongquan211287

· · ·

Khóa học mới xuất bản