Kết hợp các bảng tính từ nhiều sổ làm việc (Microsoft Excel)
David có một số sổ làm việc có một số trang tính trong mỗi sách. Anh ấy muốn kết hợp một trang tính nhất định (chỉ một) từ mỗi sổ làm việc này thành một sổ làm việc mới. Anh ấy biết cách thực hiện việc này theo cách thủ công bằng cách sử dụng Move hoặc Copy Sheet, nhưng anh ấy muốn một cách thực hiện tự động hơn, đặc biệt vì có thể có nhiều sổ làm việc mà anh ấy cần “kết hợp” theo cách này.
Có một số cách khác nhau để bạn có thể tiếp cận vấn đề này và tất cả chúng đều liên quan đến việc sử dụng macro. (Điều này không có gì đáng ngạc nhiên — macro được thiết kế để thực hiện nhanh các tác vụ thủ công tẻ nhạt.)
Macro sau đây là đơn giản trong thiết kế; nó lặp qua tất cả các sổ làm việc hiện đang mở và đối với mỗi sổ làm việc (ngoại trừ sổ làm việc có chứa macro) sao chép trang tính có tên “Sheet1” từ sổ làm việc đó sang sổ làm việc có chứa mã.
Sub CopySheets1() Dim wkb As Workbook Dim sWksName As String sWksName = "Sheet1" For Each wkb In Workbooks If wkb.Name <> ThisWorkbook.Name Then wkb.Worksheets(sWksName).Copy _ Before:=ThisWorkbook.Sheets(1) End If Next Set wkb = Nothing End Sub
Nếu bạn muốn macro lấy một trang tính khác với Sheet1, chỉ cần thay đổi giá trị của biến sWksName để phản ánh tên trang tính mong muốn. Nếu bạn không biết tên của trang tính sẽ là gì, nhưng bạn biết trang tính cần sao chép sẽ luôn là trang tính thứ hai trong mỗi sổ làm việc, thì bạn có thể sử dụng biến thể này trên macro:
Sub CopySheets2() Dim wkb As Workbook Dim sWksName As String For Each wkb In Workbooks If wkb.Name <> ThisWorkbook.Name Then wkb.Worksheets(2).Copy _ Before:=ThisWorkbook.Sheets(1) End If Next Set wkb = Nothing End Sub
Có lẽ hạn chế lớn nhất đối với các phương pháp cho đến nay là tất cả các sổ làm việc cần phải mở. Điều này có thể không phải lúc nào cũng khả thi. Ví dụ: bạn có thể có hàng trăm sổ làm việc khác nhau trong một thư mục và bạn cần kết hợp một trang tính trong số chúng. Mở hàng trăm sách bài tập, trong khi về mặt kỹ thuật, có lẽ không thực tế đối với hầu hết mọi người. Trong trường hợp đó, bạn cần phải có một cách tiếp cận khác.
Macro sau đây, CombineSheets, có tính chất tương tác. Nó yêu cầu bạn cung cấp một số thông tin, và sau đó thêm các trang tính vào sổ làm việc dựa trên phản hồi của bạn. Đầu tiên nó yêu cầu một đường dẫn đến các trang tính (không bao gồm dấu gạch chéo ở cuối) và sau đó là một mẫu để sử dụng cho các sổ làm việc. Bạn có thể chỉ định một mẫu sổ làm việc bằng cách sử dụng ký tự đại diện dấu hoa thị () và dấu chấm hỏi (?) Thông thường. Ví dụ: một mẫu của sẽ phù hợp với tất cả các sổ làm việc, trong khi một mẫu của Budget20 ??
sẽ chỉ trả về các sổ làm việc có “Budget20” ở đầu và hai ký tự bất kỳ sau đó.
Sub CombineSheets() Dim sPath As String Dim sFname As String Dim wBk As Workbook Dim wSht As Variant Application.EnableEvents = False Application.ScreenUpdating = False sPath = InputBox("Enter a full path to workbooks") ChDir sPath sFname = InputBox("Enter a filename pattern") sFname = Dir(sPath & "\" & sFname & ".xl*", vbNormal) wSht = InputBox("Enter a worksheet name to copy") Do Until sFname = "" Set wBk = Workbooks.Open(sFname) Windows(sFname).Activate Sheets(wSht).Copy Before:=ThisWorkbook.Sheets(1) wBk.Close False sFname = Dir() Loop ActiveWorkbook.Save Application.EnableEvents = True Application.ScreenUpdating = True End Sub
Khi bạn chạy macro, bạn cũng được hỏi tên của trang tính để sao chép từ mỗi sổ làm việc phù hợp. Cung cấp tên và nếu một trang tính như vậy tồn tại trong sổ làm việc, nó sẽ được sao chép vào đầu sổ làm việc hiện tại.
Nếu bạn không muốn tạo macro của riêng mình để kết hợp các trang tính, bạn có thể xem xét bổ trợ RDBMerge được tạo bởi Excel MVP Ron de Bruin.
Bạn có thể tìm thấy nó miễn phí tại đây:
http://www.rondebruin.nl/win/addins/rdbmerge.htm
_Lưu ý: _
Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.
ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.
Mẹo này (7425) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003.