Có thể gọi sheets bằng biến trong 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.

Để 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.

Có thể gọi sheets bằng biến trong vba

'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

Có thể gọi sheets bằng biến trong vba

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:

Có thể gọi sheets bằng biến trong vba

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.

Có thể gọi sheets bằng biến trong vba

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

Có thể gọi sheets bằng biến trong vba

'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.
Có thể gọi sheets bằng biến trong vba

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

Có thể gọi sheets bằng biến trong vba

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.

Có thể gọi sheets bằng biến trong vba
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.

Có thể gọi sheets bằng biến trong vba

👉 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ẻ!