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.

Cells with formula in Excel

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

Cách sao chép dữ liệu từ file Excel đến file khác bằng VBA

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

Tổng hợp các thuật ngữ quan trọng trong VBA

Cách thêm, xóa, chặn nhận xét trong Excel VBA

Tags