Em cần giúp đỡ về tao bảng tổng hợp (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

vutruonghainam

Thành viên chính thức
Tham gia
31/10/09
Bài viết
78
Được thích
0
Em có 1 file gồm rất nhiều sheet, bác nào có thể giúp em tạo bảng tổng hợp số liệu: ví dụ Sheet Ninh Hoa, Ninh Hoa (1), Ninh Hoa (2),... Ninh Hoa (31) thành 1 sheet tổng, rồi Bai 1, Bai 1 (1),... Bai 1 (31) thành 1 sheet tổng nữa, tương tự với các sheet khác được không ạ? em chân thành cảm ơn ạ.
file mẫu đây ạ:
 

File đính kèm

Em có 1 file gồm rất nhiều sheet, bác nào có thể giúp em tạo bảng tổng hợp số liệu: ví dụ Sheet Ninh Hoa, Ninh Hoa (1), Ninh Hoa (2),... Ninh Hoa (31) thành 1 sheet tổng, rồi Bai 1, Bai 1 (1),... Bai 1 (31) thành 1 sheet tổng nữa, tương tự với các sheet khác được không ạ? em chân thành cảm ơn ạ.
file mẫu đây ạ:
Vậy là tổng hợp theo từng nhóm ( Bai 1, Bai 1 (1)...) hay là tổng hợp toàn bộ ?
Số liệu trong bảng tổng hợp là điền công thức hay điền kết quả tổng ?
 
dạ tổng hợp theo từng nhóm a ạ, số liệu trong bảng tổng hợp là điền công thức đó a
 
Em có 1 file gồm rất nhiều sheet, bác nào có thể giúp em tạo bảng tổng hợp số liệu: ví dụ Sheet Ninh Hoa, Ninh Hoa (1), Ninh Hoa (2),... Ninh Hoa (31) thành 1 sheet tổng, rồi Bai 1, Bai 1 (1),... Bai 1 (31) thành 1 sheet tổng nữa, tương tự với các sheet khác được không ạ? em chân thành cảm ơn ạ.
file mẫu đây ạ:

Trong File bạn đã dùng Link các sheet cùng loại vào 1 sheet tổng.

Nhưng cách theo dõi mỗi ngày 1 sheet là không hợp lý, nếu theo dõi 1 năm có đến vài trăm sheet thì theo dõi chắc ná thở.

Cách tốt nhất là theo dõi chỉ 1 sheet, muốn tổng kết tuần hay tháng thì dùng 1 sheet trích lọc nó ra, sau đó dùng PivotTable để tổng hợp thì công việc sẽ nhẹ nhàng hơn rất nhiều, đồng thời làm giảm dung lượng File đáng kể.

Trên đây chỉ là 1 gợi ý để bạn có thể định ra 1 hướng đi khác cho phù hợp hơn, Bạn cần thiết kế lại như nội dung tôi đã nêu, hoặc bạn nêu vấn đề để các thành viên khác có rảnh rỗi thì thiết kế lại dùm cho bạn.

Tôi chỉ góp ý, vì hiện tại tôi bận nhiều việc nên chưa thể giúp bạn, khi nào rảnh rỗi tôi mới giúp bạn được.
 
Lần chỉnh sửa cuối:
dạ không a, tức là tổng hợp ninh hoa, ninh hoa (1),...ninh hoa (30) thành 1 bảng, rồi mấy cái dien khanh, dien khanh (1),... dien khanh (30) thành 1 bảng khác, cứ thế cho đc 8 bảng anh ạ
 
Trong File bạn đã dùng Link các sheet cùng loại vào 1 sheet tổng.

Nhưng cách theo dõi mỗi ngày 1 sheet là không hợp lý, nếu theo dõi 1 năm có đến vài trăm sheet thì theo dõi chắc ná thở.

Cách tốt nhất là theo dõi chỉ 1 sheet, muốn tổng kết tuần hay tháng thì dùng 1 sheet trích lọc nó ra, sau đó dùng PivotTable để tổng hợp thì công việc sẽ nhẹ nhàng hơn rất nhiều, đồng thời làm giảm dung lượng File đáng kể.

Trên đây chỉ là 1 gợi ý để bạn có thể định ra 1 hướng đi khác cho phù hợp hơn, Bạn cần thiết kế lại như nội dung tôi đã nêu, hoặc bạn nêu vấn đề để các thành viên khác có rảnh rỗi thì thiết kế lại dùm cho bạn.

Tôi chỉ góp ý, vì hiện tại tôi bận nhiều việc nên chưa thể giúp bạn, khi nào rảnh rỗi tôi mới giúp bạn được.
từ tháng này em làm em không cần nữa, em đối chiếu hẳn từng ngày luôn ạ, còn mấy tháng trước, sếp bắt em tổng hợp lại, mà bạn cũ nghỉ việc rồi ạ
 
dạ không a, tức là tổng hợp ninh hoa, ninh hoa (1),...ninh hoa (30) thành 1 bảng, rồi mấy cái dien khanh, dien khanh (1),... dien khanh (30) thành 1 bảng khác, cứ thế cho đc 8 bảng anh ạ
Copy toàn bộ các sheets sang wbook khác, dán code dưới vào wbook mới.
Chạy kiểm tra code này
Các sheet tổng hợp mới nằm cuối sheets tab
Các dòng 100:101 chưa tính
Máy cùi bắp cor i3 chạy khoảng ~ 20s

Mã:
Public Sub TongHop()
Dim Ws As Worksheet, Rng As Range, Tam, r As Long, c As Long, i, k
Dim TH, Tg
Tg = Timer

Application.DisplayAlerts = False
Application.ScreenUpdating = False
TH = "TH_"

With CreateObject("Scripting.Dictionary")
For Each Ws In Worksheets
If Left(Ws.Name, 3) = TH Then
Ws.Delete
Else
.Item(Trim(Split(Ws.Name, "(")(0))) = .Item(Trim(Split(Ws.Name, "(")(0))) + 1
End If
Next Ws
Tam = .keys

For i = 0 To .Count - 1
k = 0
For Each Ws In Worksheets
If Trim(Split(Ws.Name, "(")(0)) = Tam(i) Then
Ws.Copy after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = TH & Tam(i)
Sheets(Sheets.Count).Tab.ColorIndex = 5
Exit For
End If
Next Ws

For Each Ws In Worksheets
If Trim(Split(Ws.Name, "(")(0)) = Tam(i) Then
k = k + 1
For Each Rng In Ws.UsedRange.SpecialCells(xlCellTypeConstants)
r = Rng.Row: c = Rng.Column
If c <> 1 Then
If IsNumeric(Rng.Value) And Trim(Rng.Value) <> "" Then
If k = 1 Then Sheets(TH & Tam(i)).Cells(r, c) = ""
Sheets(TH & Tam(i)).Cells(r, c) = IIf(k < .Item(Tam(i)), "", "=") & Sheets(TH & Tam(i)).Cells(r, c) & "+" & _
"'" & Ws.Cells(r, c).Parent.Name & "'!" & Rng.Address
End If
End If
Next Rng
End If
Next Ws

'Sheets(Sheets.Count).Cells(49, 1) = Timer - Tg
Next i
End With

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
 
Lần chỉnh sửa cuối:
Copy toàn bộ các sheets sang wbook khác, dán code dưới vào wbook mới.
Chạy kiểm tra code này
Các sheet tổng hợp mới nằm cuối sheets tab
Các dòng 100:101 chưa tính
Máy cùi bắp cor i3 chạy khoảng ~ 20s

Mã:
Public Sub TongHop()
Dim Ws As Worksheet, Rng As Range, Tam, r As Long, c As Long, i, k
Dim TH, Tg
Tg = Timer

Application.DisplayAlerts = False
Application.ScreenUpdating = False
TH = "TH_"

With CreateObject("Scripting.Dictionary")
For Each Ws In Worksheets
If Left(Ws.Name, 3) = TH Then
Ws.Delete
Else
.Item(Trim(Split(Ws.Name, "(")(0))) = .Item(Trim(Split(Ws.Name, "(")(0))) + 1
End If
Next Ws
Tam = .keys

For i = 0 To .Count - 1
k = 0
For Each Ws In Worksheets
If Trim(Split(Ws.Name, "(")(0)) = Tam(i) Then
Ws.Copy after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = TH & Tam(i)
Sheets(Sheets.Count).Tab.ColorIndex = 5
Exit For
End If
Next Ws

For Each Ws In Worksheets
If Trim(Split(Ws.Name, "(")(0)) = Tam(i) Then
k = k + 1
For Each Rng In Ws.UsedRange.SpecialCells(xlCellTypeConstants)
r = Rng.Row: c = Rng.Column
If c <> 1 Then
If IsNumeric(Rng.Value) And Trim(Rng.Value) <> "" Then
If k = 1 Then Sheets(TH & Tam(i)).Cells(r, c) = ""
Sheets(TH & Tam(i)).Cells(r, c) = IIf(k < .Item(Tam(i)), "", "=") & Sheets(TH & Tam(i)).Cells(r, c) & "+" & _
"'" & Ws.Cells(r, c).Parent.Name & "'!" & Rng.Address
End If
End If
Next Rng
End If
Next Ws

'Sheets(Sheets.Count).Cells(49, 1) = Timer - Tg
Next i
End With

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
anh ơi, em đã test và nó bị lỗi, đây là file chạy của em, anh xem giúp em nhé
 

File đính kèm

Hình như file thực của bạn có khác so với file mẫu bài 1, chưa kiểm tra được
Bạn xem thử file này làm theo mẫu của bài 1 có lỗi gì không
Em cảm ơn bác nhiều nhé, hoạt động rất tốt, mà cái này tên sheet mà khác nhau 1 chút là không chạy được hả bác?
 
Web KT

Bài viết mới nhất

Back
Top Bottom