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.
'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
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:
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.
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
'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.
Kết quả: Một cửa sổ thông báo hiển thị lên tên Workbook và tên Worksheet.
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.
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.
👉 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ẻ!
Rất dễ hiểu.
Cảm ơn chitietcach
Cảm ơn bạn đã giúp mình đánh giá được “chất lượng” bài viết.
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.
Thank you
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 !
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