Cách nhân đôi trang tính trong Excel bằng VBA

  • Chia Sẻ Cái Này
Michael Brown

Hướng dẫn cung cấp một bộ sưu tập macro để sao chép các trang tính trong Excel: sao chép và đổi tên dựa trên giá trị ô, sao chép nhiều trang tính, sao chép một trang tính đang hoạt động sang một tệp khác mà không cần mở tệp đó, v.v.

Việc sao chép các trang tính trong Excel theo cách thủ công khá nhanh chóng và đơn giản... nếu chỉ thực hiện một hoặc hai lần. Sao chép nhiều trang nhiều lần rất nhàm chán và tốn thời gian. Trên trang này, bạn sẽ tìm thấy một số macro hữu ích để tự động hóa tác vụ này.

    VBA Excel để sao chép trang tính sang sổ làm việc mới

    Macro một dòng đơn giản nhất này thực hiện đúng như tên gọi của nó - sao chép trang tính đang hoạt động sang sổ làm việc mới.

    Public Sub CopySheetToNewWorkbook() activeSheet.Copy End Sub

    Sao chép nhiều trang tính trong Excel bằng VBA

    Nếu bạn muốn sao chép một số trang tính từ sổ làm việc đang hoạt động sang một sổ làm việc mới, chọn tất cả các trang tính quan tâm và chạy macro này:

    Public Sub CopySelectedSheets() ActiveWindow.SelectedSheets.Copy End Sub

    Excel VBA để sao chép trang tính sang sổ làm việc khác

    Tùy thuộc vào vị trí bạn muốn chèn trang tính đã sao chép, hãy sử dụng một trong các macro sau.

    Sao chép trang tính vào đầu một sổ làm việc khác

    Macro này sao chép trang tính hiện hoạt trước đó tất cả các trang tính khác trong tệp đích, Book1 trong ví dụ này. Để sao chép sang một tệp khác, hãy thay thế "Book1.xlsx" bằng tên đầy đủ của sổ làm việc đích của bạn.

    Phụ công khaiCopySheetToBeginningAnotherWorkbook() activeSheet.Copy Before:=Workbooks( "Book1.xlsx" ).Sheets(1) End Sub

    Sao chép trang tính vào cuối một sổ làm việc khác

    Đoạn mã này sao chép trang tính đang hoạt động và đặt bản sao vào cuối Book1 . Một lần nữa, hãy nhớ thay thế "Book1.xlsx" bằng tên sổ làm việc đích của bạn.

    Public Sub CopySheetToEndAnotherWorkbook() activeSheet.Copy After:=Workbooks( "Book1.xlsx" ).Sheets(Workbooks( "Book1.xlsx " .Worksheets.Count) End Sub

    Lưu ý. Để macro hoạt động, sổ làm việc đích phải được lưu trên ổ cứng hoặc mạng của bạn.

    Sao chép trang tính vào sổ làm việc đã chọn

    Để có thể sao chép trang tính hiện tại vào bất kỳ sổ làm việc đang mở nào, bạn có thể tạo UserForm (có tên UserForm1 ) bằng điều khiển ListBox ( named ListBox1 ) và hai nút:

    Tiếp theo, nhấp đúp vào biểu mẫu và dán mã bên dưới vào cửa sổ Mã:

    Public SelectedWorkbook As String Private Sub UserForm_Initialize() SelectedWorkbook = "" ListBox1.Clear For Each wbk In Application.Workbooks ListBox1.AddItem (wbk.Name) Next End Sub Private Sub CommandButton1_Click() If ListBox1.ListIndex > -1 Then SelectedWorkbook = ListBox1.List(ListBox1.ListIndex) End If Me.Hide End Sub Private Sub CommandButton2_Click() SelectedWorkbook = "" Me.Hide End Sub

    Với UserForm tại chỗ, bạn có thể sử dụng một trong các cách sau macro để sao chéptrang tính đang hoạt động vào sổ làm việc bạn chọn.

    Sao chép trang tính vào phần đầu của sổ làm việc đã chọn :

    Public Sub CopySheetToBeginningAnotherWorkbook() Load UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook " " ) Sau đó activeSheet.Copy Before:=Workbooks(UserForm1.SelectedWorkbook).Sheets(1) End If Unload UserForm1 End Sub

    Sao chép trang tính đến cuối của sổ làm việc đã chọn :

    Public Sub CopySheetToEndAnotherWorkbook() Tải UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy After:=Workbooks( _ UserForm1.SelectedWorkbook).Sheets( _ Workbooks(UserForm1.SelectedWorkbook). _ Worksheets.Count) End If Dỡ tải UserForm1 End Sub

    Khi chạy trong Excel, macro sẽ hiển thị cho bạn danh sách tất cả các sổ làm việc hiện đang mở. Bạn chọn cái cần thiết và nhấp vào OK:

    Macro Excel để sao chép trang tính và đổi tên

    Khi bạn sao chép một trang tính trong Excel, bản sao sẽ được cung cấp một tên ở định dạng mặc định như Sheet1 (2) . Các macro sau đây có thể giúp bạn không gặp rắc rối khi thay đổi tên mặc định theo cách thủ công.

    Mã này sao chép trang tính đang hoạt động, đặt tên cho bản sao là "Bảng kiểm tra" (bạn có thể tự do thay thế bằng bất kỳ tên nào khác mà mình thích) và đặt trang tính đã sao chép ở cuối sổ làm việc hiện tại.

    Public Sub CopySheetAndRenamePredefined() activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name ="Test Sheet" End Sub

    Để cho phép người dùng chỉ định tên cho trang tính đã sao chép , hãy sử dụng mã này:

    Public Sub CopySheetAndRename() Dim newName As String On Error Resume Next newName = InputBox( "Nhập tên cho trang tính đã sao chép" ) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End Sub

    Sau khi chạy, macro hiển thị hộp nhập sau, trong đó bạn nhập tên mong muốn và nhấn OK:

    Macro Excel để sao chép trang tính và đổi tên dựa trên giá trị ô

    Trong trong một số trường hợp, có thể thuận tiện hơn khi đặt tên cho bản sao có giá trị ô cụ thể, chẳng hạn như tiêu đề cột. Đối với điều này, bạn chỉ cần lấy đoạn mã trên và cung cấp giá trị của ô hiện được chọn vào hộp nhập tự động. Như với ví dụ trước, bản sao sẽ được đặt ở cuối sổ làm việc đang hoạt động.

    Phần khó nhất là yêu cầu người dùng của bạn luôn chọn đúng ô trước khi chạy macro :)

    Public Sub CopySheetAndRenameByCell() Dim newName As String On Error Resume Next newName = InputBox( "Nhập tên cho trang tính đã sao chép", "Sao chép trang tính", ActiveCell.Value) If newName "" Then activeSheet. Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End Sub

    Ngoài ra, bạn có thể mã hóa cứng địa chỉ củaô mà bản sao sẽ được đặt tên, ô A1 trong mã bên dưới. Để đặt tên cho trang tính đã sao chép dựa trên một ô khác, hãy thay thế A1 bằng một tham chiếu ô thích hợp.

    Public Sub CopySheetAndRenameByCell2() Dim wks As Worksheet Set wks = activeSheet activeSheet.Copy After:=Worksheets(Sheets.Count) If wks.Range ( "A1" ).Value "" Then On Error Resume Next activeSheet.Name = wks.Range( "A1" ).Value End If wks.Activate End Sub

    Macro để sao chép trang tính vào sổ làm việc đã đóng

    Macro này sao chép trang tính đang hoạt động vào cuối sổ làm việc đã đóng. Tên của sổ làm việc khác không được chỉ định trong mã - macro sẽ mở cửa sổ Windows Explorer tiêu chuẩn và cho phép bạn chọn bất kỳ tệp đích nào:

    Sau khi bạn chọn tệp và nhấp vào Mở , macro sẽ sao chép trang tính đang hoạt động và tự động đóng sổ làm việc đích.

    Public Sub CopySheetToClosedWorkbook() Dim fileName Dim closedBook As Workbook Dim currentSheet As Worksheet fileName = Application.GetOpenFilename( "Excel Tệp (*.xlsx), *.xlsx" ) Nếu tên tệp sai thì Application.ScreenUpdating = False Đặt currentSheet = Application.activeSheet Đặt closedBook = Workbooks. Mở (tên tệp) currentSheet.Copy After:=closedBook.Sheets(closedBook.Worksheets.Count) closedBook. Đóng ( True ) Application.ScreenUpdating = True End If End Sub

    Excel VBA để sao chép trang tính từ sổ làm việc khác mà không cầnmở

    Macro này cho phép bạn sao chép một trang tính từ một tệp Excel khác mà không cần mở nó. Trang tính đã sao chép sẽ được chèn vào cuối sổ làm việc hiện tại.

    Chỉ cần nhớ thực hiện một vài thay thế trong mã:

    • C:\Users\XXX\Documents\ Target_Book.xlsx phải được thay đổi thành đường dẫn thực tế và tên của sổ làm việc mà bạn muốn sao chép trang tính từ đó.
    • Trang tính 1 phải được thay thế bằng tên của trang tính bạn muốn sao chép.
    Public Sub CopySheetFromClosedWorkbook() Dim sourceBook As Workbook Application.ScreenUpdating = False Đặt sourceBook = Workbooks. Mở ( "C:\Users\XXX\Documents\Target_Book.xlsx" ) sourceBook.Sheets( "Sheet1" ).Sao chép sau:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) sourceBook. Close Application.ScreenUpdating = True End Sub

    Excel VBA để sao chép trang tính nhiều lần

    Đôi khi, bạn có thể cần sao chép cùng một trang tính nhiều lần, chẳng hạn như để kiểm tra các công thức khác nhau trên cùng một tập dữ liệu. Điều này có thể dễ dàng thực hiện với macro sau.

    Public Sub DuplicateSheetMultipleTimes() Dim n As Integer On Error Resume Next n = InputBox( "Bạn muốn tạo bao nhiêu bản sao của trang tính đang hoạt động?" ) Nếu n > = 1 Then For numtimes = 1 To n activeSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count) Next End If End Sub

    Mở trang tính gốc, chạy macro, chỉ định số lượng bản sao của trang tính đang hoạt độngbạn muốn tạo và nhấp vào OK :

    Cách sao chép trang tính trong Excel bằng VBA

    Để sao chép trang tính trong Excel với một trong các macro ở trên, bạn có thể chèn mã VBA vào sổ của riêng mình hoặc chạy macro từ sổ làm việc mẫu của chúng tôi.

    Cách thêm macro vào sổ làm việc của bạn

    Cách chèn macro trong sổ làm việc của bạn, hãy thực hiện các bước sau:

    1. Mở trang tính bạn muốn sao chép.
    2. Nhấn Alt + F11 để mở Trình soạn thảo Visual Basic.
    3. Bật ngăn bên trái, nhấp chuột phải vào ThisWorkbook , sau đó nhấp vào Chèn > Mô-đun .
    4. Dán mã vào cửa sổ Mã.
    5. Nhấn F5 để chạy macro.

    Để biết hướng dẫn chi tiết từng bước, vui lòng xem Cách chèn mã VBA trong Excel.

    Cách chạy một macro từ sổ làm việc mẫu của chúng tôi

    Ngoài ra, bạn có thể tải sổ làm việc mẫu của chúng tôi xuống Sao chép Trang tính Excel và chạy mã từ đó.

    Sổ làm việc mẫu chứa các macro sau:

    CopySheetToNewWorkbook - sao chép các thuê trang tính sang sổ làm việc mới.

    CopySelectedSheets - sao chép nhiều trang tính mà bạn chọn vào sổ làm việc mới.

    CopySheetToBeginningAnotherWorkbook - sao chép trang tính đang hoạt động đến đầu một sổ làm việc khác.

    CopySheetToEndAnotherWorkbook - sao chép trang tính đang hoạt động vào cuối một tệp Excel khác.

    CopySheetAndRename - sao chép trang tính hiện tại tờ giấy,đổi tên nó theo chỉ định của người dùng và đặt bản sao sau tất cả các trang tính khác trong sổ làm việc hiện tại.

    CopySheetAndRenamePredefined - sao chép trang tính đang hoạt động, đặt tên được mã hóa cứng cho bản sao và đặt nó ở cuối sổ làm việc hiện tại.

    CopySheetAndRenameByCell - tạo một bản sao của trang tính đang hoạt động và đổi tên trang tính dựa trên giá trị ô đã chọn.

    CopySheetAndRenameByCell2 - sao chép trang tính đang hoạt động và đổi tên trang tính dựa trên địa chỉ ô được mã hóa cứng.

    CopySheetToClosedWorkbook - cho phép bạn sao chép trang tính vào sổ làm việc đã đóng.

    CopySheetFromClosedWorkbook - cho phép bạn sao chép một trang tính từ một tệp Excel khác mà không cần mở.

    DuplicateSheetMultipleTimes - cho phép bạn sao chép một trang tính trong Excel nhiều lần.

    Để chạy macro trong Excel của bạn, chỉ cần làm như sau:

    1. Mở sổ làm việc đã tải xuống và bật nội dung nếu được nhắc.
    2. Mở sổ làm việc của riêng bạn và điều hướng đến trang tính bạn muốn sao chép.
    3. <1 7>Trong trang tính của bạn, nhấn Alt + F8 , chọn macro quan tâm và nhấp vào Chạy .

    Đó là cách bạn có thể sao chép một trang tính trong Excel bằng VBA. Tôi cảm ơn bạn đã đọc và hy vọng sẽ gặp bạn trên blog của chúng tôi vào tuần tới!

    Michael Brown là một người đam mê công nghệ chuyên dụng với niềm đam mê đơn giản hóa các quy trình phức tạp bằng các công cụ phần mềm. Với hơn một thập kỷ kinh nghiệm trong ngành công nghệ, anh ấy đã trau dồi kỹ năng của mình trong Microsoft Excel và Outlook, cũng như Google Trang tính và Tài liệu. Blog của Michael dành để chia sẻ kiến ​​thức và chuyên môn của anh ấy với những người khác, cung cấp các mẹo và hướng dẫn dễ thực hiện để cải thiện năng suất và hiệu quả. Cho dù bạn là một chuyên gia dày dạn kinh nghiệm hay người mới bắt đầu, blog của Michael đều cung cấp những hiểu biết có giá trị và lời khuyên thiết thực để tận dụng tối đa những công cụ phần mềm thiết yếu này.