Giúp em Lọc và gộp nhiều dữ liệu để tính Trung bình (2 người xem)

Liên hệ QC

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

Hahai_123

Thành viên mới
Tham gia
11/1/19
Bài viết
37
Được thích
6
Em có 1 file trong đó có nhiều ID.
VD: ID 301 sẽ có các ID nhánh gồm 21301, 22301, 23301, 24301, 25301, 26301, 10301.
Em muốn lọc từ Sheet "Chi tiết" nếu có các ID nhánh thì gộp thành 1 và đưa kết quả ra Sheet "Báo cáo"
Em cảm ơn trước ạ.
 

File đính kèm

Bài này bạn chờ xem có thành viên nào giúp bạn bằng công thức không ,Nếu không thì chuyển qua dùng vba cho nhanh
 
Em có 1 file trong đó có nhiều ID.
VD: ID 301 sẽ có các ID nhánh gồm 21301, 22301, 23301, 24301, 25301, 26301, 10301.
Em muốn lọc từ Sheet "Chi tiết" nếu có các ID nhánh thì gộp thành 1 và đưa kết quả ra Sheet "Báo cáo"
Em cảm ơn trước ạ.
Bạn tham khảo công thức
 

File đính kèm

Dạ vâng đúng rồi ạ.
Bạn tham khảo file
Bài đã được tự động gộp:

Trong code thêm dòng này
Mã:
Sheet2.Range("B2").Resize(K, 4).Borders.LineStyle = 1
sau dòng
Mã:
Sheet2.Range("B2").Resize(K, 4).ClearContents
Để kẻ thành bảng
 

File đính kèm

Em có 1 file trong đó có nhiều ID.
VD: ID 301 sẽ có các ID nhánh gồm 21301, 22301, 23301, 24301, 25301, 26301, 10301.
Em muốn lọc từ Sheet "Chi tiết" nếu có các ID nhánh thì gộp thành 1 và đưa kết quả ra Sheet "Báo cáo"
Em cảm ơn trước ạ.
Dữ liệu nhiều thì nên dùng PivotPower cho nhanh, xem file đính kèm nhé
 

File đính kèm

Bạn tham khảo file
Bài đã được tự động gộp:

Trong code thêm dòng này
Mã:
Sheet2.Range("B2").Resize(K, 4).Borders.LineStyle = 1
sau dòng
Mã:
Sheet2.Range("B2").Resize(K, 4).ClearContents
Để kẻ thành bảng
Dữ liệu hơn 10.000 dòng, trong code trên sẽ có hơn 10.000 phép tính CHIA.
Thêm 1 vòng For ... Next chỉ còn K (khoảng 100) phép chia.
PHP:
Option Explicit

Sub Bao_Cao()
Dim DL(), KQ()
Dim I As Long, K As Long, R As Long, Rws As Long
Dim Dic As Object
Dim ID As String
    Set Dic = CreateObject("scripting.dictionary")
With Sheet1
    DL = .Range("B3", .Range("B" & Rows.Count).End(xlUp)).Resize(, 2).Value
    R = UBound(DL)
ReDim KQ(1 To R, 1 To 4)
    For I = 1 To UBound(DL)
            ID = Right(Trim(DL(I, 1)), 3)
        If Not Dic.exists(ID) Then
                K = K + 1
            Dic.Item(ID) = K
            KQ(K, 1) = ID
        End If
            Rws = Dic.Item(ID)
            KQ(Rws, 2) = KQ(Rws, 2) + 1
            KQ(Rws, 3) = KQ(Rws, 3) + DL(I, 2)
    Next I
    For I = 1 To K
        KQ(I, 4) = KQ(I, 3) / KQ(I, 2)
    Next I
End With
    Set Dic = Nothing
With Sheet2
    .Range("B2").Resize(R, 4).ClearContents
    .Range("B2").Resize(K, 4) = KQ
    .Range("B2").Resize(K, 4).Sort Key1:=.Range("B2"), Order1:=xlAscending
End With
End Sub
 
Data còn lưu trên Excel thì chắc Pivot là đủ dùng rồi bác. Giờ đưa Power Pivot cho bạn ấy sợ tẩu hỏa nhập ma lắm :D
File đó chỉ sử dụng hàm RIGHT() trong DAX để tách chuỗi thôi còn lại dùng PivotTable bình thường. Có thể tạo thêm cột phụ tách trước rồi PivotTable là được còn hơn sử dùng công thức phức tạp sẽ làm chậm file
 

File đính kèm

Mình thêm 1 một phụ ở D, xong pivot. Khi Pivot tính toán trường "Điểm" mặc định sẽ là Sum, có thể chuột phải->Value Field Setting để đổi sang Count và Average

View attachment 251020
Thực ra tôi bị chậm tiêu mất mấy phút thì phải :D , Cũng làm cột phụ, cũng count điểm, sum điểm cả rồi mà đến đoạn Average bị đứng hình :D, Bó tay thật
 
Ủa, chỉ là COUNTIF, SUMIF và AVERAGEIF thôi mà?

=COUNTIF('Chi tiết'!$B$3:$B$10567,"*"&$B2&"*")

=SUMIF('Chi tiết'!$B$3:$B$10567,"*"&$B2&"*",'Chi tiết'!$C$3:$C$10567)

=AVERAGEIF('Chi tiết'!$B$3:$B$10567,"*"&$B2&"*",'Chi tiết'!$C$3:$C$10567)
 

File đính kèm

Để tránh trường hợp mã nằm vị trí bất kỳ, mình sửa chút để quy định mã bắt đầu từ vị trí thứ 3 trong chuỗi ID

=COUNTIF('Chi tiết'!$B$3:$B$10567,"??"&$B2&"*")

=SUMIF('Chi tiết'!$B$3:$B$10567,"??"&$B2&"*",'Chi tiết'!$C$3:$C$10567)

=AVERAGEIF('Chi tiết'!$B$3:$B$10567,"??"&$B2&"*",'Chi tiết'!$C$3:$C$10567)
 
Để tránh trường hợp mã nằm vị trí bất kỳ, mình sửa chút để quy định mã bắt đầu từ vị trí thứ 3 trong chuỗi ID

=COUNTIF('Chi tiết'!$B$3:$B$10567,"??"&$B2&"*")

=SUMIF('Chi tiết'!$B$3:$B$10567,"??"&$B2&"*",'Chi tiết'!$C$3:$C$10567)

=AVERAGEIF('Chi tiết'!$B$3:$B$10567,"??"&$B2&"*",'Chi tiết'!$C$3:$C$10567)
Thực ra vấn đề chính nằm ở phần lấy danh sách ID 3 số đuôi đó bác, cũng phải dùng cột phụ lấy 3 số đuôi rồi lọc mã không trùng, mà dữ liệu ở đây khá nhiều nên pivot có lẽ là phương án dễ sử dụng nhất
 
Thực ra vấn đề chính nằm ở phần lấy danh sách ID 3 số đuôi đó bác, cũng phải dùng cột phụ lấy 3 số đuôi rồi lọc mã không trùng, mà dữ liệu ở đây khá nhiều nên pivot có lẽ là phương án dễ sử dụng nhất
OK, đã hiểu.
Dùng công thức, nếu không muốn cột phụ hay Pivot, hơi nặng, mất khoảng 5s
 

File đính kèm

Thực ra vấn đề chính nằm ở phần lấy danh sách ID 3 số đuôi đó bác, cũng phải dùng cột phụ lấy 3 số đuôi rồi lọc mã không trùng, mà dữ liệu ở đây khá nhiều nên pivot có lẽ là phương án dễ sử dụng nhất
nhưng mà tác giả cũng chưa thấy ý kiến là lấy duy nhất hay như nào,
 
Web KT

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

Back
Top Bottom