Mong mn giúp đỡ, bằng công thức hoặc VBA cũng được ạ.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
Cái ID này là cứ lấy 3 số cuối làm ID chính trong các ID nhánh hả bạn?
Dạ vâng đúng rồi ạ.Cái ID này là cứ lấy 3 số cuối làm ID chính trong các ID nhánh hả bạn?
Bạn tham khảo công thứcEm 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 fileDạ vâng đúng rồi ạ.
Sheet2.Range("B2").Resize(K, 4).Borders.LineStyle = 1
Sheet2.Range("B2").Resize(K, 4).ClearContents
Dữ liệu nhiều thì nên dùng PivotPower cho nhanh, xem file đính kèm nhé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 hơn 10.000 dòng, trong code trên sẽ có hơn 10.000 phép tính CHIA.Bạn tham khảo file
Bài đã được tự động gộp:
Trong code thêm dòng này
sau dòngMã:Sheet2.Range("B2").Resize(K, 4).Borders.LineStyle = 1
Để kẻ thành bảngMã:Sheet2.Range("B2").Resize(K, 4).ClearContents
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ắmDữ liệu nhiều thì nên dùng PivotPower cho nhanh, xem file đính kèm nhé
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 fileData 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![]()
Làm PivotTable như nào khai sáng tí bạn ơiData 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![]()
Thực ra tôi bị chậm tiêu mất mấy phút thì phảiMì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 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Để 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)
OK, đã hiểu.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,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
Ý này nè bạn:nhưng mà tác giả cũng chưa thấy ý kiến là lấy duy nhất hay như nào,
nếu có các ID nhánh thì gộp thành 1