Tổng hợp số liệu 31 ngày vào sheet TH (11 người xem)

  • Thread starter Thread starter Excel365
  • Ngày gửi Ngày gửi
Liên hệ QC

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

Excel365

Thành viên tích cực
Tham gia
29/10/10
Bài viết
865
Được thích
127
Giới tính
Nam
Mỗi trang tính tương ứng với 1 tháng. Nay em muốn tổng hợp cột Thành tiền của 31 ngày vào sheet TH.
Mỗi tháng sẽ phát sinh thêm trường hợp TÊN mới. Tên mới này sẽ được cập nhật bên TH
Trân trọng cảm ơn
http://www.mediafire.com/view/n9lc726iil9kuua/Block-GPE.xlsm
 

File đính kèm

Bạn vào Sheet TH gõ vào cột G6 = IFERROR(VLOOKUP($B6;INDIRECT(G$5&"!b4:f60000");5;0);"")
 

File đính kèm

Upvote 0
Bạn xem file đính kèm

Mình tự cho rằng cần nhắc bạn 1 số điều từ nhỏ nhứt:

(*) Không nên tô màu (nền/font chữ) cả hàng hay cả cột; Chỉ nên tô những ô có dữ liệu mà thôi.
Nếu cần tô theo cột thì mình hay chỉ tô tiêu đề cột mà thôi.

(*) Thường trật tự các trường nên là
[STT] => [Mã] => [Họ & Tên]; Vì 1 lí đơn giản là 2 trường sau còn xài ở các trang tính khác tính liên tục của nó, còn [STT] rất hiếm khi được xài lại ở trang tính khác.
Ví dụ như bạn sẽ cản trở việc lọc duy nhất.

(**) Mình đã tách iêu cầu của bạn làm 2 macro. Việc này diễn ra đúng như trong thực tế vận hành CSDL của bạn; đò là
Lập danh sách duy nhất tại trang 'TH' được 1 macro sự kiện thực hiện.
Bạn cứ mở trang tính này lên là có danh sách duy nhất của toàn CQ bạn

Macro thứ 2 chỉ thực hiện công việc chuyên môn của nó mà thôi: Tổng hợp số liệu các ngày trong tháng.
Hiện tại macro thứ 2 này đang áp dụng fương thức rùa bò; & được biết CQ bạn rất đông CNV, vậy bạn thử chạy macro với CSDL thực của bạn; Nếu rùa thực sự thì sẽ có cách khác hơn từ diễn đàn đem lại cho bạn.

(*) Lần sau bạn nên giả lập file đa dạng hơn về dữ liệu; Ngõ hầu tránh lặp đi lặp lại giữa bạn & ~ thành viên giúp bạn.

Thân ái!
 

File đính kèm

Upvote 0
Mình tự cho rằng cần nhắc bạn 1 số điều từ nhỏ nhứt:

(*) Không nên tô màu (nền/font chữ) cả hàng hay cả cột; Chỉ nên tô những ô có dữ liệu mà thôi.
Nếu cần tô theo cột thì mình hay chỉ tô tiêu đề cột mà thôi.

(*) Thường trật tự các trường nên là
[STT] => [Mã] => [Họ & Tên]; Vì 1 lí đơn giản là 2 trường sau còn xài ở các trang tính khác tính liên tục của nó, còn [STT] rất hiếm khi được xài lại ở trang tính khác.
Ví dụ như bạn sẽ cản trở việc lọc duy nhất.

(**) Mình đã tách iêu cầu của bạn làm 2 macro. Việc này diễn ra đúng như trong thực tế vận hành CSDL của bạn; đò là
Lập danh sách duy nhất tại trang 'TH' được 1 macro sự kiện thực hiện.
Bạn cứ mở trang tính này lên là có danh sách duy nhất của toàn CQ bạn

Macro thứ 2 chỉ thực hiện công việc chuyên môn của nó mà thôi: Tổng hợp số liệu các ngày trong tháng.
Hiện tại macro thứ 2 này đang áp dụng fương thức rùa bò; & được biết CQ bạn rất đông CNV, vậy bạn thử chạy macro với CSDL thực của bạn; Nếu rùa thực sự thì sẽ có cách khác hơn từ diễn đàn đem lại cho bạn.

(*) Lần sau bạn nên giả lập file đa dạng hơn về dữ liệu; Ngõ hầu tránh lặp đi lặp lại giữa bạn & ~ thành viên giúp bạn.

Thân ái!
Trân trọng cám ơn bạn nhiều,
Thật sự thì lúc đầu mình cũng có để kết quả giả lập nữa,
Đúng là công ty của em thì cũng đông công nhân.
Nếu trong quá trình sử dụng nó bị rùa thì em rất cũng mong muốn được các anh chị trên diễn đàn hỗ trợ tiếp tục
Một lần nữa trân trọng cảm ơn bạn rất nhiều.
 
Upvote 0
Mình tự cho rằng cần nhắc bạn 1 số điều từ nhỏ nhứt:

(*) Không nên tô màu (nền/font chữ) cả hàng hay cả cột; Chỉ nên tô những ô có dữ liệu mà thôi.
Nếu cần tô theo cột thì mình hay chỉ tô tiêu đề cột mà thôi.

(*) Thường trật tự các trường nên là
[STT] => [Mã] => [Họ & Tên]; Vì 1 lí đơn giản là 2 trường sau còn xài ở các trang tính khác tính liên tục của nó, còn [STT] rất hiếm khi được xài lại ở trang tính khác.
Ví dụ như bạn sẽ cản trở việc lọc duy nhất.

(**) Mình đã tách iêu cầu của bạn làm 2 macro. Việc này diễn ra đúng như trong thực tế vận hành CSDL của bạn; đò là
Lập danh sách duy nhất tại trang 'TH' được 1 macro sự kiện thực hiện.
Bạn cứ mở trang tính này lên là có danh sách duy nhất của toàn CQ bạn

Macro thứ 2 chỉ thực hiện công việc chuyên môn của nó mà thôi: Tổng hợp số liệu các ngày trong tháng.
Hiện tại macro thứ 2 này đang áp dụng fương thức rùa bò; & được biết CQ bạn rất đông CNV, vậy bạn thử chạy macro với CSDL thực của bạn; Nếu rùa thực sự thì sẽ có cách khác hơn từ diễn đàn đem lại cho bạn.

(*) Lần sau bạn nên giả lập file đa dạng hơn về dữ liệu; Ngõ hầu tránh lặp đi lặp lại giữa bạn & ~ thành viên giúp bạn.

Thân ái!

Bài tương tự nhờ anh viết giúp Bảng tổng hợp tháng, hiện tôi dùng hàm excel thì làm được nhưng hơi chậm do vậy nhờ anh viết code cho em lấy code của anh để sửa lại nhưng không được vì em không hiểu code.
Xin chân thành cảm ơn!
 

File đính kèm

Upvote 0
Bài tương tự nhờ anh viết giúp Bảng tổng hợp tháng, hiện tôi dùng hàm excel thì làm được nhưng hơi chậm do vậy nhờ anh viết code cho em lấy code của anh để sửa lại nhưng không được vì em không hiểu code.
Xin chân thành cảm ơn!

Bài tương tự nhưng tương tự ra sao?
Code này tuỳ nghi sử dungj vì chưa hiểu rõ vấn đề.
PHP:
Public Sub GPE()
Dim Ws As Worksheet, Col As Long, sArr(), dArr(1 To 1000, 1 To 12), I As Long
For Each Ws In ThisWorkbook.Worksheets
    If IsNumeric(Ws.Name) Then
        Col = Ws.Name
        sArr = Ws.Range("K14:K294").Value
        For I = 1 To UBound(sArr, 1)
            dArr(I, Col) = sArr(I, 1)
        Next I
    End If
Next Ws
Sheets("TH").Range("E7").Resize(I - 1, 12) = dArr
End Sub
 
Upvote 0
Em có hỏi trực tiếp trong file đính kèm nhờ các bác giúp cho. Em có lấy code ở bài sô 4 của bác ChanhTQ@ tại sheet TH có phần phát sinh mới theo mã nhân viên và tên nhân viên nhưng không biết cách sữa code
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Em có hỏi trực tiếp trong file đính kèm nhờ các bác giúp cho. Em có lấy code ở bài sô 4 của bác ChanhTQ@ tại sheet TH có phần phát sinh mới theo mã nhân viên và tên nhân viên nhưng không biết cách sữa code

Bó tay luôn, Bác ChanhTQ@ "mần" được chắc cũng oải với mấy cái Mã.
 
Upvote 0
Vấn đề của bạn không fải là thống kê số liệu; mà là . . . .

(/ấn đề của bạn là tạo mã cho thật sự khoa học.

Bạn tham khảo cách này xem;

Mà bạn trình bày vấn đề hơi bị lôi thôi! File giả lập thì thật quá, đến nổi các tháng có đơn vị nào tăng giảm đâu!

Nếu bạn chấp nhận fương án của mình đề xuất thì có thể thêm thoải mái:

(*) Số bến có thể tăng đến 26

(*) Số tuyến trong 1 bến có thể tăng đến 100

(*) Số đơn vị trong 1 tuyến có thể đến 26
 

File đính kèm

Upvote 0
[thongbao]Fải nói là mình rất nhẫn nại với bài này![/thongbao]
 

File đính kèm

Upvote 0
File #12 chạy trên máy bạn được chưa vậy?

File đó còn vài nhược điểm:

(1) Có quá nhiều ô được CF; Ta có thể giảm chuyện này ở các tháng để khỏi nặng máy.
Bằng cách ta tiến hành CF cho tiêu chí 'Chuyến' thay vì theo tiêu chí 'Đơn vị' như hiện tại;
Điều kiện để CF theo tiêu chí này là =RIGHT(A14, 3)*1>0

(2) Bạn xài macro này thay vì macro trong bài đó; Thời gian sẽ rút ngắn được chừng 10 lần (với máy cà tèng của mình rút từ 2 gy xuống còn 02 gy:
PHP:
Sub TongHop()
 Dim Sh As Worksheet, Cls As Range, Rng As Range, sRng As Range, dArr(), Arr()
 Dim Rws&, Col As Byte, Tmr#, J&
 
 Sheets("TH").Select:                   Tmr = Timer()
 Rws = [c14].CurrentRegion.Rows.Count
 [e14].Resize(Rws, 13).ClearContents
 Application.ScreenUpdating = False
 Arr() = [b14].Resize(Rws).Value
 ReDim dArr(1 To Rws, 1 To 12)
 For J = 1 To UBound(Arr())
    If Right(Arr(J, 1), 1) >= "A" Then
        For Each Sh In ThisWorkbook.Worksheets
            If IsNumeric(Sh.Name) Then
                Set Rng = Sh.Columns("A:A")
                Set sRng = Rng.Find(Arr(J, 1), , xlFormulas, xlWhole)
                If Not sRng Is Nothing Then
                    Col = CByte(Sh.Name)
                    dArr(J, Col) = Sh.Cells(sRng.Row, "K").Value
                End If
            End If
        Next Sh
    End If
 Next J
 [e14].Resize(Rws, 12).Value = dArr()
 [A10].Value = Timer() - Tmr
 Application.ScreenUpdating = True
End Sub

& xin lưu í bạn file đã nặng, chớ làm nó nặng thêm bỡi các công thức =VLOOKUP() của bạn;
Sau khi bạn xài =VLOOKUP() thì nên Copy & Paste Value đi cho khỏe máy (Bạn cần chịu khó thì máy mới giúp bạn thoát nhanh được những khốn khó!, . . . )


Chúc ngày cuối tuần vui vẻ & tự thân vận động với những kết quả mĩ mãn!
 
Upvote 0
Mình tự cho rằng cần nhắc bạn 1 số điều từ nhỏ nhứt:

(*) Không nên tô màu (nền/font chữ) cả hàng hay cả cột; Chỉ nên tô những ô có dữ liệu mà thôi.
Nếu cần tô theo cột thì mình hay chỉ tô tiêu đề cột mà thôi.

(*) Thường trật tự các trường nên là
[STT] => [Mã] => [Họ & Tên]; Vì 1 lí đơn giản là 2 trường sau còn xài ở các trang tính khác tính liên tục của nó, còn [STT] rất hiếm khi được xài lại ở trang tính khác.
Ví dụ như bạn sẽ cản trở việc lọc duy nhất.

(**) Mình đã tách iêu cầu của bạn làm 2 macro. Việc này diễn ra đúng như trong thực tế vận hành CSDL của bạn; đò là
Lập danh sách duy nhất tại trang 'TH' được 1 macro sự kiện thực hiện.
Bạn cứ mở trang tính này lên là có danh sách duy nhất của toàn CQ bạn

Macro thứ 2 chỉ thực hiện công việc chuyên môn của nó mà thôi: Tổng hợp số liệu các ngày trong tháng.
Hiện tại macro thứ 2 này đang áp dụng fương thức rùa bò; & được biết CQ bạn rất đông CNV, vậy bạn thử chạy macro với CSDL thực của bạn; Nếu rùa thực sự thì sẽ có cách khác hơn từ diễn đàn đem lại cho bạn.

(*) Lần sau bạn nên giả lập file đa dạng hơn về dữ liệu; Ngõ hầu tránh lặp đi lặp lại giữa bạn & ~ thành viên giúp bạn.

Thân ái!

Chào bạn!
Cám ơn bạn đã nhiệt tình giúp đỡ mình.
Bạn ơi cho mình hỏi (thực tế trong quá trình sử dụng phát sinh) trường hợp danh sách các tháng chi tiết (01, 02, 03, ... ) danh sách họ và tên nó không liền nhau (Vd: dòng 5 có tên, dòng 6 rỗng, đến dòng 7 thì mới có tên) thì code không thể tổng hợp hợp được kết quả của 31 ngày.
Nay nhờ bạn và các anh chị giúp em khắc phục lỗi trên.
Trân trọng cảm ơn
P/s: ý của em là dù cho Ds chi tiết các tháng có dòng rỗng thì nó vẫn tổng hợp luôn ạ
 
Upvote 0
Trước tiên cần khẳng định 1 điều là: CSDL mà có dòng rỗng là chưa hay.
Với mình thì không bao giờ được vậy!

Tuy nhiên chìu theo bạn thì bạn mở trang tính 'TH' lên & lấy macro này chép đề lên toàn bộ cái cũ là được
PHP:
Option Explicit
Const SoNV As Integer = 1800                'Tương ứng với số CNV CQ bạn là 1.200 '
Private Sub Worksheet_Activate()
 Dim Sh As Worksheet
 
 Sheets("TH").Select:                       [Ba2].CurrentRegion.Clear
 Application.ScreenUpdating = False
 [Ba1].Resize(, 3).Value = [c5].Resize(, 3).Value
 For Each Sh In ThisWorkbook.Worksheets
    If IsNumeric(Sh.Name) Then
        Sh.[c4].Resize(SoNV, 3).Copy Destination:=[Ba65500].End(xlUp).Offset(1) '*'
    End If
 Next Sh
 Columns("BA:BC").AdvancedFilter Action:=xlFilterCopy, _
    CopyToRange:=Range("C5:E5"), Unique:=True
 Columns("BA:BC").Clear
 Application.ScreenUpdating = True
End Sub
 
Upvote 0
Trước tiên cần khẳng định 1 điều là: CSDL mà có dòng rỗng là chưa hay.
Với mình thì không bao giờ được vậy!

Tuy nhiên chìu theo bạn thì bạn mở trang tính 'TH' lên & lấy macro này chép đề lên toàn bộ cái cũ là được
PHP:
Option Explicit
Const SoNV As Integer = 1800                'Tương ứng với số CNV CQ bạn là 1.200 '
Private Sub Worksheet_Activate()
 Dim Sh As Worksheet
 
 Sheets("TH").Select:                       [Ba2].CurrentRegion.Clear
 Application.ScreenUpdating = False
 [Ba1].Resize(, 3).Value = [c5].Resize(, 3).Value
 For Each Sh In ThisWorkbook.Worksheets
    If IsNumeric(Sh.Name) Then
        Sh.[c4].Resize(SoNV, 3).Copy Destination:=[Ba65500].End(xlUp).Offset(1) '*'
    End If
 Next Sh
 Columns("BA:BC").AdvancedFilter Action:=xlFilterCopy, _
    CopyToRange:=Range("C5:E5"), Unique:=True
 Columns("BA:BC").Clear
 Application.ScreenUpdating = True
End Sub
Cám ơn anh, nhưng không đúng ý của em rồi anh
Ý của em là cái code này
[GPECODE=vb]Sub THLuong()
Dim Cls As Range, Sh As Worksheet, Rng As Range, sRng As Range
Dim Rws&, Off_ As Byte, Tmr#

Sheets("TH").Select: Tmr = Timer()
Rws = [c6].CurrentRegion.Rows.Count
[g6].Resize(Rws, 31).ClearContents
For Each Cls In Range([c6], [c6].End(xlDown)) '
For Each Sh In ThisWorkbook.Worksheets
If IsNumeric(Sh.Name) Then
Off_ = CByte(Sh.Name)
Set Rng = Sh.[c3].Resize(Rws)
Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlWhole)
If Not sRng Is Nothing Then
Cells(Cls.Row, "F").Offset(, Off_).Value = sRng.Offset(, 3).Value
End If
End If
Next Sh
Next Cls
[a4].Value = Timer() - Tmr
End Sub
[/GPECODE]
 
Upvote 0
À; Giờ bạn thay Rws bằng 1.800 nêu trên là được, chắc vậy.
 
Upvote 0
Web KT

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

Back
Top Bottom