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:

img1

img2

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

img3

  • 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

img4

img5

img6

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.

img7

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]