Đôi khi chúng ta muốn gộp nhiều sheet thành một sheet để có thể dễ dàng phân tích dữ liệu và biến nó thành một số thông tin hữu ích. Bài viết này sẽ cho bạn biết cách hợp nhất nhiều trang tính thành một trang tính bằng VBA.

Ví dụ:

008

Ở đây tôi đã tìm nạp một số dữ liệu từ máy chủ trả về dữ liệu vào các trang tính khác nhau. Tôi đã thêm một trang tính nữa và đặt tên nó là “Master”. Các tên trang tính khác không quan trọng.

Bây giờ hãy chạy macro này.

Sub Merge_Sheets()

Dim startRow, startCol, lastRow, lastCol As Long

Dim headers As Range

'Set Master sheet for consolidation

Set mtr = Worksheets("Master")

Set wb = ThisWorkbook

'Get Headers

Set headers = Application.InputBox("Select the Headers", Type:=8)

'Copy Headers into master

headers.Copy mtr.Range("A1")

startRow = headers.Row + 1

startCol = headers.Column

Debug.Print startRow, startCol

'loop through all sheets

For Each ws In wb.Worksheets

'except the master sheet from looping

If ws.Name <> "Master" Then

ws.Activate

lastRow = Cells(Rows.Count, startCol).End(xlUp).Row

lastCol = Cells(startRow, Columns.Count).End(xlToLeft).Column

'get data from each worksheet and copy it into Master sheet

Range(Cells(startRow, startCol), Cells(lastRow, lastCol)).Copy _

mtr.Range("A" & mtr.Cells(Rows.Count, 1).End(xlUp).Row + 1)

End If

Next ws

Worksheets("Master").Activate

End Sub

Làm thế nào để hợp nhất các trang tính bằng VBA Macro này?

  1. Chèn một trang tính mới và đặt tên là “Master” trong sổ làm việc. Đổi tên nó sau nếu bạn muốn.

  2. Chèn một mô-đun trong trình soạn thảo VBA và sao chép mã VBA trên.

  3. Chạy macro.

  4. Bạn sẽ được yêu cầu chọn các tiêu đề. Chọn tiêu đề và nhấn OK.

Và nó được thực hiện. Tất cả các trang tính được hợp nhất trong bản chính.

0012

Nó hoạt động như thế nào?

Tôi giả sử rằng bạn biết những điều cơ bản về tạo đối tượng và biến trong VBA. trong phần đầu tiên, chúng ta đã tạo đối tượng và các biến mà chúng ta sẽ cần trong hoạt động của mình.

Hầu hết những điều tôi đã giải thích bằng cách sử dụng nhận xét trong mã vba.

Hãy xem phần chính của mã vba này.

For Each ws In wb.Worksheets

'except the master sheet from looping

If ws.Name <> "Master" Then

ws.Activate

lastRow = Cells(Rows.Count, startCol).End(xlUp).Row

lastCol = Cells(startRow, Columns.Count).End(xlToLeft).Column

'get data from each worksheet and copy it into Master sheet

Range(Cells(startRow, startCol), Cells(lastRow, lastCol)).Copy _

mtr.Range("A" & mtr.Cells(Rows.Count, 1).End(xlUp).Row + 1)

End If

Next ws

Trong các bài viết trước, chúng ta đã học cách lặp qua các trang tính và cách lấy hàng và cột cuối cùng bằng vba.

Ở đây chúng ta đang lặp qua từng trang tính trong sổ làm việc chính bằng vòng lặp for.

Đối với mỗi ws Trong wb.Worksheets Sau đó, chúng tôi loại trừ trang tính “chính” khỏi vòng lặp, vì chúng tôi sẽ hợp nhất dữ liệu của mình trong trang tính đó.

Sau đó, chúng tôi nhận được hàng cuối cùng và số cột cuối cùng.

Bây giờ dòng tiếp theo là rất quan trọng. Chúng tôi đã thực hiện nhiều thao tác thành một dòng.

Phạm vi (Cells (startRow, startCol), Cells (lastRow, lastCol)). Copy _ mtr.Range (“A” & mtr.Cells (Rows.Count, 1) .End (xlUp) .Row + 1)

Đầu tiên, chúng tôi tạo một phạm vi bằng cách sử dụng startRow, startCol và lastRow và lastCol.

Range(Cells(startRow, startCol), Cells(lastRow, lastCol))

We have copied it using copy method of range.

Range(Cells(startRow, startCol), Cells(lastRow, lastCol)).Copy

We pasted it directly into first blank cell after last non blank cell in column A of master sheet (mtr.Cells(Rows.Count, 1).End(xlUp).Row + 1).

Range(Cells(startRow, startCol), Cells(lastRow, lastCol)).Copy _

mtr.Range("A" & mtr.Cells(Rows.Count, 1).End(xlUp).Row + 1)

Vòng lặp này chạy cho tất cả các trang tính và sao chép dữ liệu từng trang tính vào trang tính chính.

Cuối cùng, ở phần cuối của macro, chúng tôi kích hoạt trang tính chính để xem kết quả.

Vì vậy, các bạn, đây là cách bạn có thể hợp nhất mọi trang tính trong một sổ làm việc. Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi nào liên quan đến mã VBA này hoặc bất kỳ chủ đề excel nào trong phần nhận xét bên dưới.

Tải xuống tệp:

Bài viết liên quan:

Cách lặp qua trang tính

cách lấy hàng và cột cuối cùng bằng vba

Bài viết phổ biến: