Thử sửa, thêm, bớt dữ liệu ở các sheet "T.." rồi chọn Sheet "tonghop" xem kết quảMình có 1 file gồm nhiều sheet, bi giờ mình muốn gọp thành 1 sheet tonghop theo như mẫu định kèm. Các bác có đoạn Macro hay cách nào khác không cho mình xin để chạy sheet "tonghop" này cho nhanh. thanks
Mình lấy cột Tên làm chuẩn vì không biết dữ liệu của bạn cột nào là duy nhấtThanks concogia. Mình không rành về VBA nên cho mình hỏi xíu. Bạn lấy cột Họ tên hay cột SS làm chuẩn để cho ra các kết quả khác vậy, nếu cần chỉnh mình phải chỉnh ntn. Mình muốn thêm nhiều sheet nữa thì mình phải chỉnh như thế nào. VD: T1, T2 ... T24. View attachment 76739
Private Sub Worksheet_Activate()
Dim Vung, d, Mg(), Sh, K, I, kK, Thang, iThang
Set d = CreateObject("scripting.dictionary"): Set Thang = Range([b2], [IV2].End(xlToLeft))
For Each Sh In Worksheets
If Sh.Name <> "tonghop" Then K = K + Sh.Range(Sh.[b2], Sh.[b10000].End(xlUp)).Rows.Count
Next Sh
ReDim Mg(1 To K, 1 To Thang.Columns.Count)
For Each Sh In Worksheets
If Sh.Name <> "tonghop" Then
iThang = Application.WorksheetFunction.Match(Sh.Name, Thang, 0)
Vung = Sh.Range(Sh.[b2], Sh.[b10000].End(xlUp)).Resize(, 5).Value
For I = 1 To UBound(Vung)
If Not d.exists(Vung(I, 2)) Then
kK = kK + 1
d.Add Vung(I, 2), kK
Mg(kK, 1) = Vung(I, 1): Mg(kK, 2) = Vung(I, 2): Mg(kK, 3) = Vung(I, 3): Mg(kK, 4) = Vung(I, 4): Mg(kK, iThang) = Vung(I, 5)
Else
Mg(d.Item(Vung(I, 2)), iThang) = Vung(I, 5)
End If
Next I
End If
Next Sh
[A3:K10000].ClearContents
[B3].Resize(kK, 10) = Mg
Range([B3], [b10000].End(xlUp)).Offset(, -1) = [row(A:A)]
End Sub
Khi nhập cột Họ tên, SS, ST, Năm sinh thì bên cột tổng hợp chạy được nhưng cột Tiền thì không nhảy. Nó bị sao vậy bạn.
Híc, nó bị....mình đưa lộn code. "Xó dzì" bạn nhé. Bạn chép lại code này giúp mìnhNó bị sao vậy bạn.
Private Sub Worksheet_Activate()
Dim Vung, d, Mg(), Sh, K, I, kK, Thang, iThang
Set d = CreateObject("scripting.dictionary"): Set Thang = Range([b2], [IV2].End(xlToLeft))
For Each Sh In Worksheets
If Sh.Name <> "tonghop" Then K = K + Sh.Range(Sh.[b2], Sh.[b10000].End(xlUp)).Rows.Count
Next Sh
ReDim Mg(1 To K, 1 To Thang.Columns.Count)
For Each Sh In Worksheets
If Sh.Name <> "tonghop" Then
iThang = Application.WorksheetFunction.Match(Sh.Name, Thang, 0)
Vung = Sh.Range(Sh.[b2], Sh.[b10000].End(xlUp)).Resize(, 5).Value
For I = 1 To UBound(Vung)
If Not d.exists(Vung(I, 2)) Then
kK = kK + 1
d.Add Vung(I, 2), kK
Mg(kK, 1) = Vung(I, 1): Mg(kK, 2) = Vung(I, 2): Mg(kK, 3) = Vung(I, 3): Mg(kK, 4) = Vung(I, 4): Mg(kK, iThang) = Vung(I, 5)
Else
Mg(d.Item(Vung(I, 2)), iThang) = Vung(I, 5)
End If
Next I
End If
Next Sh
[A3:BW10000].ClearContents
[B3].Resize(kK, Thang.Columns.Count) = Mg
Range([B3], [b10000].End(xlUp)).Offset(, -1) = [row(A:A)]
End Sub
Option Explicit
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
Sub CopyTheUsedRangeOfEachSheet()
Dim Sh As Worksheet
Dim DestSh As Worksheet
Dim Last As Long
On Error Resume Next
If Len(ThisWorkbook.Worksheets.Item("Master").Name) = 0 Then
On Error GoTo 0
Application.ScreenUpdating = False
Set DestSh = ThisWorkbook.Worksheets.Add
DestSh.Name = "Master"
For Each Sh In ThisWorkbook.Worksheets
If Sh.Name <> DestSh.Name Then
Last = LastRow(DestSh)
Sh.UsedRange.Copy DestSh.Cells(Last + 1, "A")
'Instead of this line you can use the code below to copy only the values
'or use the PasteSpecial option to paste the format also.
'With sh.UsedRange
'DestSh.Cells(Last + 1, "A").Resize(.Rows.Count, _
'.Columns.Count).Value = .Value
'End With
'sh.UsedRange.Copy
'With DestSh.Cells(Last + 1, "A")
' .PasteSpecial xlPasteValues, , False, False
' .PasteSpecial xlPasteFormats, , False, False
' Application.CutCopyMode = False
'End With
End If
Next
DestSh.Cells(1).Select
Application.ScreenUpdating = True
Else
MsgBox "The sheet Master already exist"
End If
End Sub
Đoạn LastRow = Sh.Cells.Find(What:="*", After:=Sh.Range("A1"), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row tôi chưa hiểu hết, xin thày cocogia giải thích hộ dùm?