Nhờ giúp đỡ code tách dữ liệu có giá trị lớn nhất

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Eric.Shen

Thành viên chính thức
Tham gia
26/1/23
Bài viết
74
Được thích
9
Chào các bác,
Em đang có một bài toán là tách ra dữ liệu có giá trị lớn nhất
Bài toán này có thể giải quyết bằng Maxif nhưng mà vì dữ liệu quá lớn nên nó chạy rất chậm
Các bác giúp em một cái code để tách ra với nhé
Em cảm ơn ạ
 

File đính kèm

  • Capture.JPG
    Capture.JPG
    34.8 KB · Đọc: 15
Dùng aggregate chạy cũng nhanh đó bạn:

=AGGREGATE(14,6,$B$1:$B$12/($A$1:$A$12=D1),1)

Capture.JPG
 
Upvote 0
Chào các bác,
Em đang có một bài toán là tách ra dữ liệu có giá trị lớn nhất
Bài toán này có thể giải quyết bằng Maxif nhưng mà vì dữ liệu quá lớn nên nó chạy rất chậm
Các bác giúp em một cái code để tách ra với nhé
Em cảm ơn ạ
Bạn dùng PivotTable . . .
 
Upvote 0
Upvote 0
Dùng aggregate chạy cũng nhanh đó bạn:

=AGGREGATE(14,6,$B$1:$B$12/($A$1:$A$12=D1),1)

View attachment 295532
Em cảm ơn bác, nhưng em dùng hàm thì phải lọc mã duy nhất ra sau đó mới chạy hàm được, em muốn nhờ các bác cái code nó tự tách các dữ liệu tương ứng với giá trị lớn nhất với ạ
Bài đã được tự động gộp:

Pivot table luôn là cái chậm nhất.
Gặp dữ liệu lớn thì phải dùng data model và power pivot.
Data Model được thiết kế để làm việc với dữ liệu [mà nó đã tự] chuẩn rồi cho nên rất hiệu quả.
Em cảm ơn bác, chỉ là Em lại chưa biết dùng cái Data model này bác ạ
 
Upvote 0
Em cảm ơn bác, nhưng em dùng hàm thì phải lọc mã duy nhất ra sau đó mới chạy hàm được, em muốn nhờ các bác cái code nó tự tách các dữ liệu tương ứng với giá trị lớn nhất với ạ
Lọc mã duy nhất nếu dữ liệu lớn thì sẽ gây chậm máy.
Bạn post file (để vài ngàn dòng thôi) lên mình sẽ giúp phần code VBA nhé
 
Upvote 0
Bạn dùng PivotTable . . .
Em cũng có thử dùng pivot max nhưng dữ liệu biến động khá lớn các giá trị kia cũng được đưa vào từ công thức nên lại pivot nữa nên cũng hơi nặng ạ.
Bài đã được tự động gộp:

Lọc mã duy nhất nếu dữ liệu lớn thì sẽ gây chậm máy.
Bạn post file (để vài ngàn dòng thôi) lên mình sẽ giúp phần code VBA nhé
Vâng bác, em để mấy nghìn dòng, bác giúp em với ạ
 

File đính kèm

  • Book1.xlsm
    136.4 KB · Đọc: 5
Lần chỉnh sửa cuối:
Upvote 0
OK. Chạy thử code này:

PHP:
Option Explicit
Sub test()
Dim lr&, i&, rng, dic As Object
Set dic = CreateObject("Scripting.Dictionary")
lr = Cells(Rows.Count, "B").End(xlUp).Row
rng = Range("B3:C" & lr)
For i = 1 To UBound(rng)
    If Not dic.exists(rng(i, 1)) Then
        dic.Add rng(i, 1), rng(i, 2)
    Else
        If dic(rng(i, 1)) < rng(i, 2) Then dic(rng(i, 1)) = rng(i, 2)
    End If
Next
Range("E3").Resize(dic.Count, 2).Value = WorksheetFunction.Transpose(Array(dic.keys, dic.items))
End Sub
 

File đính kèm

  • Book1.xlsm
    149.8 KB · Đọc: 15
Upvote 0
OK. Chạy thử code này:

PHP:
Option Explicit
Sub test()
Dim lr&, i&, rng, dic As Object
Set dic = CreateObject("Scripting.Dictionary")
lr = Cells(Rows.Count, "B").End(xlUp).Row
rng = Range("B3:C" & lr)
For i = 1 To UBound(rng)
    If Not dic.exists(rng(i, 1)) Then
        dic.Add rng(i, 1), rng(i, 2)
    Else
        If dic(rng(i, 1)) < rng(i, 2) Then dic(rng(i, 1)) = rng(i, 2)
    End If
Next
Range("E3").Resize(dic.Count, 2).Value = WorksheetFunction.Transpose(Array(dic.keys, dic.items))
End Sub
Tuyệt vời luôn bác ạ,
Em cảm ơn bác nhiều ạ
 
Upvote 0
Thêm giải pháp nữa dành cho thớt nghiên cứu;
SQL cho Excel...
Thử click nút Clear, Maxx...
 

File đính kèm

  • Book222.xlsm
    157.6 KB · Đọc: 11
Upvote 0
Dữ liệu lớn thì dùng Data Model:
1.Hàm đơn giản:
Giá trị lớn nhất = max('Table1'[Giá trị])
2.Nếu cần viết bảng ảo trong quá trình tính toán dữ liệu lớn:
Giá trị lớn nhất 2 = MAXX(GROUPBY('Table1', 'Table1'[Loại], "MaxValue", MAXX(CURRENTGROUP(), 'Table1'[Giá trị])), [MaxValue])
3.Nếu cần phân tách và sử dụng lại biến:
Giá trị lớn nhất 3 =
VAR SummaryTable =
SUMMARIZE('Table1', 'Table1'[Loại], "MaxValue", MAX('Table1'[Giá trị]))
RETURN
MAXX(SummaryTable, [MaxValue])
4.Có thể sử dụng cách thức xếp hạng sau đó lấy giá trị lớn nhất:
MaxValueByGroup7 =
VAR RankingTable = ADDCOLUMNS('Table1', "Rank", RANKX(FILTER('Table1', 'Table1'[Loại] = EARLIER('Table1'[Loại])), 'Table1'[Giá trị], , DESC))
RETURN
SUMX(FILTER(RankingTable, [Rank] = 1), 'Table1'[Giá trị])
//Tìm giá trị lớn nhất
5.Có thể sử dụng TopN để xếp hạng và lấy giá trị lớn nhất:
MaxValueByGroup9 =
VAR TopNTable = TOPN(1, SUMMARIZE('Table1', 'Table1'[Loại]), [Tổng giá trị], DESC)
RETURN
SUMX(TopNTable, [Tổng giá trị])
 
Upvote 0
Thêm giải pháp nữa dành cho thớt nghiên cứu;
SQL cho Excel...
Thử click nút Clear, Maxx...
Em cảm ơn bác nhiều ạ
Bài đã được tự động gộp:

Dữ liệu lớn thì dùng Data Model:
1.Hàm đơn giản:
Giá trị lớn nhất = max('Table1'[Giá trị])
2.Nếu cần viết bảng ảo trong quá trình tính toán dữ liệu lớn:
Giá trị lớn nhất 2 = MAXX(GROUPBY('Table1', 'Table1'[Loại], "MaxValue", MAXX(CURRENTGROUP(), 'Table1'[Giá trị])), [MaxValue])
3.Nếu cần phân tách và sử dụng lại biến:
Giá trị lớn nhất 3 =
VAR SummaryTable =
SUMMARIZE('Table1', 'Table1'[Loại], "MaxValue", MAX('Table1'[Giá trị]))
RETURN
MAXX(SummaryTable, [MaxValue])
4.Có thể sử dụng cách thức xếp hạng sau đó lấy giá trị lớn nhất:
MaxValueByGroup7 =
VAR RankingTable = ADDCOLUMNS('Table1', "Rank", RANKX(FILTER('Table1', 'Table1'[Loại] = EARLIER('Table1'[Loại])), 'Table1'[Giá trị], , DESC))
RETURN
SUMX(FILTER(RankingTable, [Rank] = 1), 'Table1'[Giá trị])
//Tìm giá trị lớn nhất
5.Có thể sử dụng TopN để xếp hạng và lấy giá trị lớn nhất:
MaxValueByGroup9 =
VAR TopNTable = TOPN(1, SUMMARIZE('Table1', 'Table1'[Loại]), [Tổng giá trị], DESC)
RETURN
SUMX(TopNTable, [Tổng giá trị])
Vâng, rất chi tiết, em cảm ơn bác rất nhiều ạ, em sẽ dành thời gian nghiên cứu
Bài đã được tự động gộp:

Nghiên cứu? Bạn đùa hơi dai.
Làm việc với dữ liệu khủng mà không chịu học Data Model thì còn nghiên cứu cái chi nữa.
Vâng ạ,
E rất cảm ơn bác đã nhắt nhở, đây là thiếu sót của em, em sẽ tìm hiểu thêm ạ
 
Upvote 0
Web KT

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

Back
Top Bottom