Bạn xài tạm code này cho sheet Tonghop nhé:Tôi có nhiều sheet có chung tiêu đề khác nội dung và muốn tổng hợp lại thành 1 sheet thì làm thế nào? Xin xem file đính kèm sẽ rõ hơn. Xin Cám ơn
Private Sub Worksheet_Activate()
Dim i As Byte
Application.ScreenUpdating = False
Me.Move before:=Sheets(1)
[3:10000].Delete
For i = 2 To Sheets.Count
Sheets(i).[3:1000].Copy [A65536].End(xlUp).Offset(1)
Next
Application.ScreenUpdating = True
End Sub
Bạn sửa số 1000 trong code trên thành số lớn hơn là được.Phúc ới, khi bỏ vào dữ liệu thật thì có sheet nó không copy hết data là vì sao nhỉ!?
Bạn sử dụng code này thay cho code trên nhé:Phúc ơi, có một nhu cầu mới về cái này là:
1. Chỉ tổng hợp 1 số sheet nhất định chứ không copy hết có được không?
2. Khi copy thì chỉ copy giá trị, không copy công thức
Xin cám ơn nhiều
Private Sub Worksheet_Activate()
Dim Ws As Worksheet
Application.ScreenUpdating = False
[3:65536].Delete
For Each Ws In ThisWorkbook.Worksheets
If InStr(".A.C.", "." & Ws.Name & ".") > 0 Then
With Ws.Range("A3:P" & Ws.[A65536].End(xlUp).Row)
[A65536].End(xlUp).Offset(1).Resize(.Rows.Count, 16).Value = .Value
End With
End If
Next
Application.ScreenUpdating = True
End Sub
Bạn xài tạm code này cho sheet Tonghop nhé:
Mỗi lần chọn sheet Tonghop thì dữ liệu sẽ được "Refresh" lại.PHP:Private Sub Worksheet_Activate() Dim i As Byte Application.ScreenUpdating = False Me.Move before:=Sheets(1) [3:10000].Delete For i = 2 To Sheets.Count Sheets(i).[3:1000].Copy [A65536].End(xlUp).Offset(1) Next Application.ScreenUpdating = True End Sub
Điều kiện: Tất cả các sheet đều có cấu trúc giống sheet Tonghop.
Câu trả lời nằm tại bài #7 đó bạn.Với code này thì mình chỉ tổng hợp loại trừ 1 sheet nào đó
VD: Tổng hợp tất cả các sheet Nhưng loại trừ 1 sheet Lương chẳng hạn
Vậy thì phải làm sao vậy anh
If InStr(".A.C.", "." & Ws.Name & ".") > 0 Then
If Ws.Name <> "Luong" Then
Ok, nhưng mình còn 1 thắc măc nưa anh Phúc ơi.Câu trả lời nằm tại bài #7 đó bạn.
Có thể sửa điều kiện
bởi điều kiệnPHP:If InStr(".A.C.", "." & Ws.Name & ".") > 0 Then
PHP:If Ws.Name <> "Luong" Then
Bạn thử nghiệm 2 dạng câu lệnh: Nguồn.Copy Đích và Đích.Value=Nguồn.Value, bạn sẽ thấy: Với câu lệnh 1 thì ở Nguồn có định dạng ra sao thì Đích sẽ có định dạng giống như vậy, còn câu lệnh thứ 2 chỉ copy giá trị từ Nguồn tới Đích mà không làm thay đổi định dạng của Đích. Bạn chỉ cần vận dụng linh hoạt 2 dạng câu lệnh trên là được.Ok, nhưng mình còn 1 thắc măc nưa anh Phúc ơi.
Nhưng mình muốn Sheets Tong hop nó sẽ thể hiện theo định dang của sheest chi tiết, Có dấu phân cách ( lần gach liền nhau, hay là màu khác ) khi kết thúc số liệu cúa sheets 1 và sheet 2, ...
Bạn thử nghiệm 2 dạng câu lệnh: Nguồn.Copy Đích và Đích.Value=Nguồn.Value, bạn sẽ thấy: Với câu lệnh 1 thì ở Nguồn có định dạng ra sao thì Đích sẽ có định dạng giống như vậy, còn câu lệnh thứ 2 chỉ copy giá trị từ Nguồn tới Đích mà không làm thay đổi định dạng của Đích. Bạn chỉ cần vận dụng linh hoạt 2 dạng câu lệnh trên là được.
Private Sub Worksheet_Activate()
Dim Ws As Worksheet
Dim i As Byte
Application.ScreenUpdating = False
[3:65536].Delete
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name <> "Luong" Then
[COLOR=#ff0000] For i = 2 To Sheets.Count[/COLOR]
[COLOR=#ff0000] Sheets(i).[3:1000].Copy [A65536].End(xlUp).Offset(1)[/COLOR]
Next
End If
Next
Application.ScreenUpdating = True
End Sub
Trời đất, đã For Each Ws In ThisWorkbook.Worksheets rồi còn For i = 2 To Sheets.Count nữa thì nó trùng là đúng rồi chứ sao nữa. Bạn bỏ vòng For thứ 2 đi nhé.Anh xem dùm em, em thêm vào, sao nó lại copy lại trùng nhiều lầnMã:Private Sub Worksheet_Activate() Dim Ws As Worksheet Dim i As Byte Application.ScreenUpdating = False [3:65536].Delete For Each Ws In ThisWorkbook.Worksheets If Ws.Name <> "Luong" Then [COLOR=#ff0000] For i = 2 To Sheets.Count[/COLOR] [COLOR=#ff0000] Sheets(i).[3:1000].Copy [A65536].End(xlUp).Offset(1)[/COLOR] Next End If Next Application.ScreenUpdating = True End Sub
Bạn sử dụng code này thay cho code trên nhé:
Để thay đổi danh sách các sheet cần tổng hợp, bạn thay đổi chuỗi ".A.C." nhé (các tên sheet được đặt giữa 2 dấu chấm để phòng trường hợp có nhiều tên sheet gần giống nhau kiểu như Sheet1, Sheet10, Sheet11,...)PHP:Private Sub Worksheet_Activate() Dim Ws As Worksheet Application.ScreenUpdating = False [3:65536].Delete For Each Ws In ThisWorkbook.Worksheets If InStr(".A.C.", "." & Ws.Name & ".") > 0 Then With Ws.Range("A3:P" & Ws.[A65536].End(xlUp).Row) [A65536].End(xlUp).Offset(1).Resize(.Rows.Count, 16).Value = .Value End With End If Next Application.ScreenUpdating = True End Sub
Nguyên nhân là các sheet thành phần của bạn không đồng bộ. Sheet thì nhập từ hàng 2, sheet thì nhập từ hàng 3. Với những bài toán tổng hợp từ nhiều sheet hoặc nhiều file thì cấu trúc file/bảng và quy ước nhập phải được thống nhất và đồng bộ, ngược lại thì việc tổng hợp sẽ khó và dễ sai sót.mình muốn khi nhấn vô 1 nhãn "tong hop sheet" trong sheet TONG HOP thì nó sẽ thu thập thông tin từ các sheet còn lại, trừ sheet Ref ra, mình có làm theo chổ anh phúc hướng dẫn nhưng nó chỉ lấy giá trị cuối thôi, mong được sự giúp đỡ của mọi người, thank!
Với dữ liệu hiện có trong file thì bạn dùng code này nhé:mình muốn khi nhấn vô 1 nhãn "tong hop sheet" trong sheet TONG HOP thì nó sẽ thu thập thông tin từ các sheet còn lại, trừ sheet Ref ra, mình có làm theo chổ anh phúc hướng dẫn nhưng nó chỉ lấy giá trị cuối thôi, mong được sự giúp đỡ của mọi người, thank!
Private Sub Worksheet_Activate()
Dim i As Long, fR As Long, lR As Long, Rws As Long
Application.ScreenUpdating = False
[2:65000].Delete 'Xoa du lieu hien co
Sheets(Array("TONGHOP", "Ref")).Move Before:=Sheets(1) 'Di chuyen sheet len dau
For i = 3 To Sheets.Count 'Lam viec voi sheet thu 3 tro di (tru sheet TONGHOP va Ref)
lR = Sheets(i).[A65000].End(xlUp).Row 'Xac dinh dong cuoi chua du lieu
If lR > 1 Then 'Neu co du lieu thi thuc hien
fR = 2 'Xac dinh dong dau cua sheet i
Do While Sheets(i).Cells(fR, 1) = ""
fR = fR + 1 'Xac dinh dong dau chua du lieu cua sheet i
Loop
Rws = lR - fR + 1 'So dong du lieu cua sheet i
[A65000].End(xlUp).Offset(1).Resize(Rws, 18).Value = Sheets(i).Cells(fR, 1).Resize(Rws, 18).Value 'Copy gia tri qua sheet TONGHOP
End If
Next
ActiveSheet.ListObjects("TongHop").Resize Range("A1:R" & [A65000].End(xlUp).Row) 'Mo rong Table TongHop
Application.ScreenUpdating = True
End Sub