Mục lục
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 SubSao 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 SubExcel 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 SubSao 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 SubLư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 SubVớ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 SubSao 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 SubKhi 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 SubSau 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 SubNgoà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 SubMacro để 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 SubExcel 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.
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.
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:
- Mở trang tính bạn muốn sao chép.
- Nhấn Alt + F11 để mở Trình soạn thảo Visual Basic.
- 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 .
- Dán mã vào cửa sổ Mã.
- 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:
- Mở sổ làm việc đã tải xuống và bật nội dung nếu được nhắc.
- 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. <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!