Khi làm việc trên Excel, chúng ta có thể dùng nhiều tệp khác nhau cùng một lúc. Một trong những thao tác thường dùng đó là sao chép dữ liệu file Excel này đến file khác. Trong bài viết này, UniTrain sẽ hướng dẫn bạn cách sao chép dữ liệu từ file Excel này sang file Excel khác trong VBA.
Tệp nguồn Excel
Giả sử, người dùng có tệp Excel, gồm 3 sheets: April, May và Sheet3 (như hình dưới). Worksheet April có số lượng bán hàng cùng với các ô có công thức (cột D). Hai sheet còn lại có dữ liệu tương tự nhau. Và nhiệm vụ chúng ta bây giờ là sao chép nguồn dữ liệu này vào một file khác.
The Macro trong VBA
Viết macro dưới đây trong Workbook_Open() của tệp Excel. Ngoài ra, bạn cũng có thể viết mã trong Module.
Option Explicit Private Sub Workbook_Open() Call copyDataFromAnotherFile End Sub Sub copyDataFromAnotherFile() On Error GoTo ErrHandler Application.ScreenUpdating = False Dim src As Workbook Set src = Workbooks.Open("D:\sample.xlsx", True, True) ' Open the source file in "read only" mode. Dim iSheetCount As Integer iSheetCount = 1 Dim srcWs As Worksheet For Each srcWs In src.Sheets ' Get source row and column count. Dim iRows, iCols As Integer iRows = src.Worksheets(srcWs.Name).UsedRange.Rows.Count iCols = src.Worksheets(srcWs.Name).UsedRange.Columns.Count Worksheets(iSheetCount).Name = srcWs.Name ' Rename the worksheet. Dim iC1, iC2 As Integer ' just counters. ' Start copying data from source to destination. For iC1 = 1 To iRows For iC2 = 1 To iCols ' Check if cell (in source) has formula. If src.Worksheets(srcWs.Name).Cells(iC1, iC2).HasFormula() Then Worksheets(srcWs.Name).Cells(iC1, iC2) = src.Worksheets(srcWs.Name).Cells(iC1, iC2).Formula Else Worksheets(srcWs.Name).Cells(iC1, iC2) = src.Worksheets(srcWs.Name).Cells(iC1, iC2) End If Next iC2 Next iC1 ' Add a new sheet (to this workbook or destination file) if sheet does not exist. If (Worksheets.Count < src.Worksheets.Count) Then Sheets.Add After:=src.Worksheets(srcWs.Name) iSheetCount = iSheetCount + 1 End If Next ' Done! Now close the source file. src.Close False ' False - Do not save the source file. Set src = Nothing ErrHandler: Application.EnableEvents = True Application.ScreenUpdating = True End Sub
Đầu tiên, chúng ta sẽ mở sổ làm việc nguồn, nằm trong thư mục “D:\” bằng cách nhập mã dưới đây:
Dim src As Workbook Set src = Workbooks.Open("D:\sample.xlsx", True, True)
Thao tác này sẽ được lặp lại với từng “worksheet” trong tệp nguồn và tìm kiếm dữ liệu.
Tệp Excel khác có thể có hoặc không có các worksheets (trang tính) có trong tệp nguồn. Người dùng sẽ đặt tên lại cho sheet đó bằng mã dưới đây:
Worksheets(iSheetCount).Name = srcWs.Name
Tiếp theo, macro sao chép dữ liệu từ nguồn đến file Excel khác (bao gồm các công thức có trong file Excel cũ).
Bạn nhập mã dưới đây để kiểm tra xem tệp Excel mới có cùng số trang tính hay không. Nếu không, chúng sẽ tạo (hoặc thêm) một trang tính mới trong tệp Excel mới.
If (Worksheets.Count < src.Worksheets.Count) Then Sheets.Add After:=src.Worksheets(srcWs.Name) iSheetCount = iSheetCount + 1 End If
Và cuối cùng, đóng file nguồn bằng cách nhập mã:
src.Close False Set src = Nothing
Xem thêm
Khóa học Ứng dụng VBA trong Excel
[Tải tài liệu miễn phí] Template Update tỷ giá tự động bằng Power Query, Dashboard và VBA