Sao chép usedRange của mỗi trang tính thành một trang tính bằng VBA trong Microsoft Excel
Trong trường hợp bạn muốn sao chép phạm vi đã sử dụng của từng bảng tính vào Master sheet thì bạn nên đọc bài viết này. Chúng tôi sẽ sử dụng mã VBA để sao chép dữ liệu từ mỗi trang tính và sau đó dán vào trang tính khác mà không ghi đè .
_ Macro sẽ thêm một trang tính có tên Master vào sổ làm việc của bạn và sẽ sao chép các ô từ mọi trang trong sổ làm việc của bạn trong trang tính này._
_ Macro đầu tiên thực hiện sao chép bình thường và macro thứ hai sao chép Giá trị. Các sub của macro sử dụng các chức năng bên dưới; macro sẽ không hoạt động nếu không có các chức năng._
Sau đây là ảnh chụp nhanh dữ liệu từ Sheet1 & Sheet2:
Chúng ta cần làm theo các bước sau để khởi chạy trình soạn thảo VB:
Nhấp vào tab Nhà phát triển Từ nhóm Mã, chọn Visual Basic
-
Sao chép đoạn mã dưới đây trong mô-đun chuẩn
Sub CopyUsedRange() Dim sh As Worksheet Dim DestSh As Worksheet Dim Last As Long If SheetExists("Master") = True Then MsgBox "The sheet Master already exist" Exit Sub End If Application.ScreenUpdating = False Set DestSh = Worksheets.Add DestSh.Name = "Master" For Each sh In ThisWorkbook.Worksheets If sh.Name <> DestSh.Name Then If sh.UsedRange.Count > 1 Then Last = LastRow(DestSh) sh.UsedRange.Copy DestSh.Cells(Last + 1, 1) End If End If Next Application.ScreenUpdating = True End Sub Sub CopyUsedRangeValues() Dim sh As Worksheet Dim DestSh As Worksheet Dim Last As Long If SheetExists("Master") = True Then MsgBox "The sheet Master already exist" Exit Sub End If Application.ScreenUpdating = False Set DestSh = Worksheets.Add DestSh.Name = "Master" For Each sh In ThisWorkbook.Worksheets If sh.Name <> DestSh.Name Then If sh.UsedRange.Count > 1 Then Last = LastRow(DestSh) With sh.UsedRange DestSh.Cells(Last + 1, 1).Resize(.Rows.Count, _ .Columns.Count).Value = .Value End With End If End If Next Application.ScreenUpdating = True End Sub Function LastRow(sh As Worksheet) On Error Resume Next LastRow = sh.Cells.Find(What:="*", _ After:=sh.Range("A1"), _ Lookat:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False).Row On Error GoTo 0 End Function Function Lastcol(sh As Worksheet) On Error Resume Next Lastcol = sh.Cells.Find(What:="*", _ After:=sh.Range("A1"), _ Lookat:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByColumns, _ SearchDirection:=xlPrevious, _ MatchCase:=False).Column On Error GoTo 0 End Function Function SheetExists(SName As String, _ Optional ByVal WB As Workbook) As Boolean On Error Resume Next If WB Is Nothing Then Set WB = ThisWorkbook SheetExists = CBool(Len(Sheets(SName).Name)) End Function
Bây giờ, mã macro đã được thiết lập; chúng ta sẽ chạy macro “CopyUsedRange” và nó sẽ chèn một trang tính mới “Master” và sao chép dữ liệu từ mỗi trang tính.
Kết luận: * Sao chép dữ liệu từ nhiều trang tính là một công việc thủ công; Tuy nhiên; với đoạn mã trên, chúng tôi có thể hợp nhất dữ liệu chỉ bằng một cú nhấp chuột vào macro.
Nếu bạn thích blog của chúng tôi, hãy chia sẻ nó với bạn bè của bạn trên Facebook. Và bạn cũng có thể theo dõi chúng tôi trên Twitter và Facebook.
Chúng tôi rất muốn nghe ý kiến từ bạn, hãy cho chúng tôi biết cách chúng tôi có thể cải thiện, bổ sung hoặc đổi mới công việc của mình và làm cho nó tốt hơn cho bạn. Viết thư cho chúng tôi tại [email protected]