Cách khai báo và sử dụng Sheets, Range và Cells trong Excel bằng VBA

Khi sử dụng VBA để lấy và gán dữ liệu vào Range hay Cells trong một Sheets của File Excel, điều đầu tiên bạn cần là nắm rõ cách thức khai báo và sử dụng các thành phần trên bằng lệnh VBA.

Vậy để có thể khai báo Sheets, Range và Cells của một File Excel bằng VBA, thì ngay trong bài viết này, mình sẽ chia sẻ với các bạn cách để thực hiện.

Cách sử dụng Sheets, Range và Cells bằng VBA

Để dễ hình dùng hơn về cách khai báo 1 File Excel bằng VBA thì File Excel gọi là Workbook, tiếp đến là Worksheet, và còn lại là Range và Cells.

Khi sử dụng dữ liệu trong bảng tính Excel bằng VBA, bạn sẽ có các ràng buộc về Sheets và Workbook như: Range và Cells thuộc Sheets và Sheets đó thuộc Workbook nào?

Để hiểu rõ hơn các bạn đi tiếp từng phần nhỏ nhé.

1) Workbooks

Thông thường khi làm việc với một Workbook thì bạn không cần khai báo trong VBA, nhưng khi truy vấn dữ liệu từ các File Excel khác thì các bạn có thể khai báo như sau:

'khai báo workbook biến wb
Dim wb As Workbook
'gán workbook hiện tại vào biến wb
Set wb = ThisWorkbook

hoặc khai báo cho một Workbook khác:

Dim wb As Workbook
'ví dụ: đường dẫn D:\Desktop\2018-calendar.xlsx
Set wb = Workbooks.Open("đường dẫn")

2) Worksheet

Sheets trong VBA sẽ được tự động tạo ra khi bạn tạo Sheets từ File Excel. Sheet có nhiều kiểu khai báo như khai báo theo tên, khai báo theo số thức tự Index trong VBAProject.

  • Cách khai báo theo số Index Sheets của Excel:

Số Index của Sheets được gán theo thứ tự tạo Sheets. Khi bạn tạo thêm Sheets thứ 2 thì số Index của Sheets đó là 2 và sẽ không thay đổi khi bạn thay đổi vị trí sắp xếp của Sheets.

sheets-range-cells-excel-vba-145-2
'khai báo workbsheet biến ws
Dim ws As Worksheet
'gán biến worksheet thứ 1 vào biến ws
Set ws = Sheets(1)
  • Hoặc khai báo theo tên của Sheet
sheets-range-cells-excel-vba-145-1
Dim ws As Worksheet
Set ws = Sheets("ten-sheet1")
  • Cách lấy Sheets đang sử dụng
Dim ws As Worksheet
Set ws = ActiveSheet
  • Cách chuyển Sheets đang sử dụng

Ví dụ: Khi bạn đang ở Sheet1 thì khi thực hiện câu lệnh dưới đây thì sẽ tự động chuyển sang Sheet2.

Sheet(2).Activate

hoặc:

Sheet(2).Select

3) Range và Cells

Khi truy xuất Range và Cells các bạn có một số lưu ý sau:

  • Truy xuất dạng tên đại diện hàng và cột. Ví dụ: A1, B1, C1 ….
  • Truy xuất theo vị trí hàng và cột. Ví dụ: Cells A1 sẽ có vị trí hàng 1 và cột 1, tương tự Cells B1 sẽ có bị trí là hàng 1 và cột 2.
  • Cột sẽ có vị trí theo số thứ tự như cột bên trái của bảng tính Excel, còn hàng sẽ qui ước theo thứ tự của chữ cái. Ví dụ: A sẽ có vị trí là 1, B là 2 và C là 3…
Cách khai báo Cells:
sheets-range-cells-excel-vba-145-3
Dim rg As Range
'gán Cells Cells có vị trí hàng 1 và cột 1, tức là Cells A1 vào biến rg
Set rg = Cells(1,1)

hoặc

Dim rg As Range 
Set rg = Range("A1")
Cách khai báo Range:
  • Dạng tên đại diện:
Dim rg As Range
'gán Range từ Cells A1 đến Cells D10 vào biến
Set rg = Range("A1:D10")
  • Khai báo dạng vị trí:
Dim rg As Range
'gán Range từ Cells A1 đến Cells D10 vào biến
Set rg = Range(Cells(1,1),Cells(10,4))
Khai váo Range và Cells với một Sheets xác định trước.
sheets-range-cells-excel-vba-145-5
Dim rg As Range
Dim ws As Worksheet
Set ws = Sheets("ten-sheet1")
Set rg = ws.Range(Cells(1,1),Cells(10,4))
Cách lấy giá trị và gán vào Cells
  • Cách lấy giá trị từ một Cells vào biến
sheets-range-cells-excel-vba-145-4
'khai báo biến giatriA2 là kiểu String, tương tự như kiểu Text trong Excel
Dim giatriA2 As String
'gán giá trị của Cell A2 của Sheet có tên là ten_sheet1 vào biến giatriA2
giatriA2 = Sheets("ten-sheet1").Range("A2").Value

🔺Nếu bạn không chỉ đích danh Sheets thì VBA sẽ mặc định trỏ đến ActiveSheet.

  • Cách gán giá trị một biến vào một Cells:
'khai báo biến giatriA2 là kiểu String, tương tự như kiểu Text trong Excel
Dim giatri As String
'gán giá trị vào biến giatriA2
giatri="VBA Sheet và Cells"
'gán giá trị của Cell A2 của Sheet có tên là ten_sheet1 vào biến giatriA2
Sheets("ten-sheet1").Range("A2").Value= giatri

💡 Lưu ý: Khi sử dụng Cells thay cho Range khi gán hoặc lấy giá trị thì các bạn sử dụng vị trí. Ví dụ: Sheets(“ten-sheet1”).Cells(2, 1).Value = giatriA2

Cách chọn 1 Cells hoặc 1 Range
'chọn Cells A1
Sheets(1).Range("A1").Select
'chọn Cells A2 và A4
Sheets(1).Range("A2,A4").Select
'chọn Range từ A1 đến D10
Sheets(1).Range("A1:D10").Select

💡 Lưu ý: Khi bạn thực hiện câu lệnh Select 1 Cells hay Range thì bạn phải Activate Sheets trước.

4) Một số ví dụ về Sheets, Range và Cells

Trước khi thực hiện các vị dụ dưới đây bạn hãy tạo 1 File Excel với thành phần sau:

  • Tạo 3 Sheet có tên lần lượt là: ten-sheet1, ten-sheet2, ten-sheet3.
  • Tạo 1 Module trong VBA.

💡 Nếu muốn truy vấn Sheets theo tên thì bạn không nên đặt tên Sheets dài và có dấu.

Ví dụ 1: Đọc tên Workbook và Sheet1
Sub doc_ten_Wb_Ws()
Dim tenwb As String
Dim tenws As String
Dim wb As Workbook
Dim ws As Worksheet
Set wb = ThisWorkbook
Set ws = wb.Sheets(1)
tenwb = wb.Name
tenws = ws.Name
'hiển thị tên Workbook và Worksheets lên Message Box
MsgBox tenwb & " " & tenws
'tiếp tục ví dụ 2 ở đây
End Sub

Khi tạo hàm trong Module xong, bạn có thể nhấn F5 để chạy lệnh hoặc Click vào ▶ Run Macro.

  • Nếu bạn đang đặt con trỏ vào hàm thì Run Macro sẽ thực hiện tại hàm đó.
  • Khi con trỏ chuột đang trỏ ở vị trí ngoài bảng soạn lệnh thì VBA sẽ hiện 1 bảng chọn hàm, bạn chọn vào hàm muốn thực hiện và Run để chạy lệnh.
sheets-range-cells-excel-vba-145-6

Kết quả: Một cửa sổ thông báo hiển thị lên tên Workbook và tên Worksheet.

sheets-range-cells-excel-vba-145-7
Ví dụ 2: Gán tên Workbook vào A1 và tên Sheet vào Cell A2 ở mỗi Sheets.

Tiếp theo ví dụ 1, sau khi gán tên Workbook và Worksheet vào biến thì bạn có thể ghi vào A1 và A2 của Sheet1.

Qua Sheet2 và Sheet3, vì tên Worbook không thay đổi nên bạn chỉ cần gán lại Worksheet vào biến và ghi vào Sheets tương ứng.

ws.Range("A1").Value = tenwb
ws.Range("A2").Value = tenws
Set ws = wb.Sheets(2)
tenws = ws.Name
ws.Range("A1").Value = tenwb
ws.Range("A2").Value = tenws
Set ws = wb.Sheets(3)
tenws = ws.Name
ws.Range("A1").Value = tenwb
ws.Range("A2").Value = tenws

Kết quả: Ở cả 3 Sheets, tên Workbook sẽ được ghi vào Cells a1, tên Sheets được ghi vào Cell A2.

sheets-range-cells-excel-vba-145-8
Ví dụ 3: Đọc giá trị Cell A1 và A2 ở Sheet2 và ghi sang Cells B1 và B2 của Sheet1
Sub doc_giatri_sheet2()
Dim giatriA1 As String
Dim giatriA2 As String
Sheets(2).Activate
giatriA1 = Sheets(2).Cells(1, 1).Value
giatriA2 = Sheets(2).Cells(2, 1).Value
Sheets(1).Activate
Sheets(1).Range("B1").Value = giatriA1
Sheets(1).Range("B2").Value = giatriA2
End Sub

Kết quả: Giá trị của Cells A1 và A2 của Sheet2 sẽ được ghi vào Cells B1 và B2 của Sheet1.

sheets-range-cells-excel-vba-145-9

👉 Link tải File VBA mẫu: http://123link.pro/AkAjl


OK! Trên đầy là tổng hợp các cách khai báo và sử dụng Sheets, Range và Cells trong Excel bằng VBA. Khi nắm được cách sử dụng các thành của một File Excel bằng VBA thì ứng dụng vào các hàm phức tạp bạn sẽ dễ dàng nắm bắt hơn.

Hy vọng bài viết này đã giúp các bạn giải quyết được vấn đề đang tìm kiếm.

Chúc các bạn một ngày vui vẻ!

7 BÌNH LUẬN

  1. Dễ hiểu, lấy tên sheet làm biến có được không nhỉ, ví dụ dim i as interger
    I=1
    Msgbox Sheet i . Range a1

    Thanks

    • Không được bạn ơi, Sheets là lấy theo Name trong VBA. Còn gộp dạng chuỗi thì VBA nó không hiểu là tên Sheets nhé bạn.

  2. Mình muốn hỏi cách tìm các phương thức với ActiveSheet ở đâu. Khi viết câu lệnh VBA trong excel , sau dấu chấm thì các gợi ý sẽ hiện ra. Trường hợp gợi ý không hiện ra thì tra cứu phương thức để viết câu lẹnh ở đâu. Xin cảm ơn !

  3. Chỉ giúp mình
    Trên file 1 có list mã số. Mình tạo nút mở link nhưng link liên kết ở file2 và khác thư mục.
    Trong file 2 có list mã số đã được hepylink
    Giúp mình mở hepylink ở file 1
    Cám ơn rất nhiều

BÌNH LUẬN

Please enter your comment!
Please enter your name here