Khi sử dụng VBA hai đối tượng ta thường làm việc chính là Range và Cells. Ví dụ để truy cập vào ô A4 trong Excel ta có thể sử dụng lệnh: Range(“A4”).Select hoặc Cells(4,”A”).Select. Nhưng thực tế Range và Cells không hoàn toàn giống nhau chúng ta cùng xem một số ví dụ sau:
-
Range là đối tượng, Cells là thuộc tính.
Khác biệt đầu tiên là Range là một đối tượng còn Cells chỉ là thuộc tính. Dễ hiểu hơn là chúng ta có thể cells có thể kết hợp cùng workbook hay Range khi khai báo còn Range có thể khai báo độc lập.
-
Range.cells
Thông thường khi sử dụng ta chỉ khai báo cells(dòng,cột) để truy cập đến vị trí dòng cột trong worksheet. Một số trường hợp ta có thể truy cập đến vị trí dòng cột bất kỳ trong vùng dữ liệu như một số ví dụ sau:
Range(“A1:A3”).cells sẽ cho ta vùng dữ liệu từ A1 đến A3.
Range(“A1:A3”).cells(1,2) sẽ trả về giá trị của dòng 1 cột 2 trong vùng A1 đến A3.
Range(“A1:A3”).cells(2) là cách viết tắt khác của chọn dòng 1 và cọt 2 trong vùng. -
Worksheets.Cells
Đây là cách thông thường để chúng ta làm việc với cells. Ta thường viết tắt như Cells.Select là sẽ chọn toàn bộ các ô trong worksheet đang mở. Còn cúa pháp đúng sẽ là Sheets(tên sheet).cells(dòng , cột)
Sheets(“Sheet1”).cells sẽ chọn toàn bộ vùng trong sheet1.Sheets(“Sheet1”).cells(1,2) sẽ chọn ô dòng 1 cột 2 trong sheet1
-
Khi nào sử dụng cells
Range thường dùng khi biết chính xác địa chỉ một ô hay vùng. Còn Cells thường dùng trong vòng lặp khi ta muốn chạy hết các dòng các cột trong vùng dữ liệu. Ví dụ sau sẽ chạy 5 dòng 5 cột và ghi vị trí vào ô tương ứng.
For iRow = 1 To 5
For iCol = 1 To 5
Cells(iRow, iCol).Value = iRow & ” , ” & iCol
Next
Next
Thực thi đoạn code ta sẽ được kết quả như hình sau: