Tìm giá trị lớn nhất theo điều kiện bằng VBA

Liên hệ QC

anhbanvuitinh9x

Thành viên mới
Tham gia
4/10/14
Bài viết
43
Được thích
14
Giới tính
Nam
Hiện tại mình đang dùng function để chạy với maxifs nhưng cách này quá chậm khi có nhiều dữ liệu.
Các bác giúp mình cách nào nhanh hơn với. many thanks.
 

File đính kèm

  • test.xlsm
    136.1 KB · Đọc: 24
Bạn thử xài hàm CSDL (DMAX()) chắc sẽ cải thiện hơn.

[Bạn thử thì đo thời gian mà 2 macro trãi qua nha!]
 
Upvote 0
Hiện tại mình đang dùng function để chạy với maxifs nhưng cách này quá chậm khi có nhiều dữ liệu.
Các bác giúp mình cách nào nhanh hơn với.
Một cách khác là bạn có thể sử dụng Scripting.Dictionary.
 
Upvote 0
Bạn thử xài hàm CSDL (DMAX()) chắc sẽ cải thiện hơn.

[Bạn thử thì đo thời gian mà 2 macro trãi qua nha!]
em đang chỉ muốn chạy macro cho file nó đỡ chậm bác à. giờ file toàn công thức nên cứ vào load rất lâu.
bác có thể chỉ rõ hơn giúp em cách sử dụng Dmax trong VBA được không?
Bài đã được tự động gộp:

Bạn tham khảo PivotTable
Thanks bạn nhé! cách này nhanh và hay. Nhưng trong file của mình còn những dữ liệu phụ nữa nên mình đang muốn chỉ viết VBA để trả về dữ liệu. Còn Pivot thì sẽ hơi vướng những dữ liệu khác
Bài đã được tự động gộp:

Một cách khác là bạn có thể sử dụng Scripting.Dictionary.
Nếu sử dụng Dic thì em đoán nó sẽ nhanh hơn rất nhiều. Tuy nhiên Dic thì quá cao cấp so với khả năng của em rồi bác à.
Bác có thể viết giúp em 1 chút được không?
 
Upvote 0
Thanks bạn nhé! cách này nhanh và hay. Nhưng trong file của mình còn những dữ liệu phụ nữa nên mình đang muốn chỉ viết VBA để trả về dữ liệu. Còn Pivot thì sẽ hơi vướng những dữ liệu khác
Vướng chỗ nào vậy bạn? Như file đính kèm thì dùng pivot table là cách tốt nhất rồi, nếu phức tạp hơn có thể sử dụng PowerPivot hoặc Power Query
 
Upvote 0
Vướng chỗ nào vậy bạn? Như file đính kèm thì dùng pivot table là cách tốt nhất rồi, nếu phức tạp hơn có thể sử dụng PowerPivot hoặc Power Query
Vướng ở chỗ "làm việc với dữ liệu nhiều mà không có thời giờ cập nhật kiến thức bảng tính"
Kinh điển GPE: đã lên đây là nhờ viết code công việc xong chỉ trong vòng một hai ngày. May mắn có thể trong vòng một hai tiếng đồng hồ.
PowerPivot, PowerQuery mất công học 1 tuần lễ.
 
Upvote 0

File đính kèm

  • test1.xlsm
    157 KB · Đọc: 24
Upvote 0
Mới chơi với Excel thì hàm là đủ rồi. Được một thời gian, thay vì học hết phần này thì nghe tới VBA.
Nghe tới VBA ai mà chả nghĩ đến sự "huyền diệu, bấm một phát là xong hết"?
Mới chơi với VBA thì sort và duyệt mảng là phê rồi. Nhưng nếu vào GPE sẽ thấy Dictionary "huyền diệu" hơn. Thế là kỹ thuật sort và duyệt mảng chả ai thèm học.
Chơi với Dictionary thấy nó ngon quá. Cho đến khi chịu khó nhìn quanh quất và thấy ADODB.
Câu lệnh SQL chứa kỹ thuật Group By thật ngon để tổng hợp dữ liệu mà khoảng 90% code Đít-sần ở đây sử dụng. Lại thêm cái khả năng của ADO có thể lấy dữ liệu từ files mà không cần [trực tiếp] mở file. Ngon quá sức. (ngày xưa tôi có viết bài khuyến cáo là dùng ADO trongn file hiện tại có thể đưa đến kẹt bộ nhớ. Nhưng bây giừo thì MS có lẽ đã khắc phục được cái bug ấy rồi, không thấy xảy ra nữa)

Với ba cái mớ ấy, tội gì phải học thêm về Excel? Đưa lên GPE tíc tắc là có code giải quyết công việc. Nhiều lúc còn hong cần phải hiểu cong việc, dân GPE sẵn sàng dẫn dắt từng bước để phân tích vấn đề.

Vì không chịu cập nhật kiến thức về Excel cho nên người ta không hề biết là Excel hiện nay có nhiều công cụ giải quyết dữ liệu khủng.
"công ty bắt buộc phải thế này, thế nọ..." là câu biện hộ quá đúng. Với loại kiến thức như vậy làm sao đủ sức thuyết phục công ty làm theo cách khác, hiệu quả hơn?
 
Upvote 0
Bài này copy data ra một vùng mới, sort ngày newest to oldest rồi remove duplicate theo biển số cũng được
 
Upvote 0
Bài này copy data ra một vùng mới, sort ngày newest to oldest rồi remove duplicate theo biển số cũng được
Với người thông thạo Excel thì mất dưới 1 phút.
Với tay mơ thi từ vài phút đến vài tiếng đồng hồ (tuỳ theo độ siêng). GPE cho code bấm một phát 1 giây là xong (trên một giây thì quay lại GPE "tối ưu code...")
:p:p:p
 
Upvote 0
Hiện tại mình đang dùng function để chạy với maxifs nhưng cách này quá chậm khi có nhiều dữ liệu.
Các bác giúp mình cách nào nhanh hơn với. many thanks.
Nếu bạn cài Office 2019 thì Excel có sẵn hàm MAXIFS rồi, khỏi viết!
Còn không bạn cứ dùng hàm mảng bình thường thế này trên bảng tính:
Mã:
=MAX(IF(Data!$A$2:$A$7669=A2,Data!$B$2:$B$7669,""))
Tốc độ còn nhanh hơn gấp nhiều lần so với code bạn viết
 
Lần chỉnh sửa cuối:
Upvote 0
Vướng chỗ nào vậy bạn? Như file đính kèm thì dùng pivot table là cách tốt nhất rồi, nếu phức tạp hơn có thể sử dụng PowerPivot hoặc Power Query
mình viết code sử dụng pivot đúng là nhanh hơn rất nhiều. ok bạn nhé!
Bài đã được tự động gộp:

Mới chơi với Excel thì hàm là đủ rồi. Được một thời gian, thay vì học hết phần này thì nghe tới VBA.
Nghe tới VBA ai mà chả nghĩ đến sự "huyền diệu, bấm một phát là xong hết"?
Mới chơi với VBA thì sort và duyệt mảng là phê rồi. Nhưng nếu vào GPE sẽ thấy Dictionary "huyền diệu" hơn. Thế là kỹ thuật sort và duyệt mảng chả ai thèm học.
Chơi với Dictionary thấy nó ngon quá. Cho đến khi chịu khó nhìn quanh quất và thấy ADODB.
Câu lệnh SQL chứa kỹ thuật Group By thật ngon để tổng hợp dữ liệu mà khoảng 90% code Đít-sần ở đây sử dụng. Lại thêm cái khả năng của ADO có thể lấy dữ liệu từ files mà không cần [trực tiếp] mở file. Ngon quá sức. (ngày xưa tôi có viết bài khuyến cáo là dùng ADO trongn file hiện tại có thể đưa đến kẹt bộ nhớ. Nhưng bây giừo thì MS có lẽ đã khắc phục được cái bug ấy rồi, không thấy xảy ra nữa)

Với ba cái mớ ấy, tội gì phải học thêm về Excel? Đưa lên GPE tíc tắc là có code giải quyết công việc. Nhiều lúc còn hong cần phải hiểu cong việc, dân GPE sẵn sàng dẫn dắt từng bước để phân tích vấn đề.

Vì không chịu cập nhật kiến thức về Excel cho nên người ta không hề biết là Excel hiện nay có nhiều công cụ giải quyết dữ liệu khủng.
"công ty bắt buộc phải thế này, thế nọ..." là câu biện hộ quá đúng. Với loại kiến thức như vậy làm sao đủ sức thuyết phục công ty làm theo cách khác, hiệu quả hơn?
Thanks bác đã phân tích rất chi tiết và đẩy đủ để những bạn mới biết về VBA như em.
Em chỉ muốn 1 bài toán sẽ có nhiều cách giải, cách của em quá chậm nên muốn tham khảo thêm cách khác để có thể hoàn thiện thêm thôi bác. Không có ý cái gì cũng đưa lên GPE để mọi người giải và làm giúp
Bài đã được tự động gộp:

Dùng VBA đây, thử xem được chưa:
đúng là Dic quá tuyệt vời bác à. chạy quá nhanh và nguy hiểm. Em cảm ơn nha!
 
Lần chỉnh sửa cuối:
Upvote 0
Mới chơi với Excel thì hàm là đủ rồi. Được một thời gian, thay vì học hết phần này thì nghe tới VBA.
Nghe tới VBA ai mà chả nghĩ đến sự "huyền diệu, bấm một phát là xong hết"?
Mới chơi với VBA thì sort và duyệt mảng là phê rồi. Nhưng nếu vào GPE sẽ thấy Dictionary "huyền diệu" hơn. Thế là kỹ thuật sort và duyệt mảng chả ai thèm học.
Chơi với Dictionary thấy nó ngon quá. Cho đến khi chịu khó nhìn quanh quất và thấy ADODB.
Câu lệnh SQL chứa kỹ thuật Group By thật ngon để tổng hợp dữ liệu mà khoảng 90% code Đít-sần ở đây sử dụng. Lại thêm cái khả năng của ADO có thể lấy dữ liệu từ files mà không cần [trực tiếp] mở file. Ngon quá sức. (ngày xưa tôi có viết bài khuyến cáo là dùng ADO trongn file hiện tại có thể đưa đến kẹt bộ nhớ. Nhưng bây giừo thì MS có lẽ đã khắc phục được cái bug ấy rồi, không thấy xảy ra nữa)

Với ba cái mớ ấy, tội gì phải học thêm về Excel? Đưa lên GPE tíc tắc là có code giải quyết công việc. Nhiều lúc còn hong cần phải hiểu cong việc, dân GPE sẵn sàng dẫn dắt từng bước để phân tích vấn đề.

Vì không chịu cập nhật kiến thức về Excel cho nên người ta không hề biết là Excel hiện nay có nhiều công cụ giải quyết dữ liệu khủng.
"công ty bắt buộc phải thế này, thế nọ..." là câu biện hộ quá đúng. Với loại kiến thức như vậy làm sao đủ sức thuyết phục công ty làm theo cách khác, hiệu quả hơn?
Bác ơi bây giờ mấy ai đã phá cái cũ đi để xây lại cái mới.Mà chỉ có đắp thêm vào cái cũ cho nó giải quyết được công việc thôi à.Mà cái bác nói ở đây là Excel hiện nay có nhiều công cụ giải quyết dữ liệu khủng.Nhưng với điều kiện là Data được thiết kế theo Cơ sở dữ liệu.Mà mấy cái dữ liệu cũ mấy ai đã thiết kế được cơ sở dữ liệu chuẩn đâu bác.Nên giờ cứ chắp vá thôi.:D.
 
Upvote 0
mình viết code sử dụng pivot đúng là nhanh hơn rất nhiều. ok bạn nhé!
Bài đã được tự động gộp:


Thanks bác đã phân tích rất chi tiết và đẩy đủ để những bạn mới biết về VBA như em.
Em chỉ muốn 1 bài toán sẽ có nhiều cách giải, cách của em quá chậm nên muốn tham khảo thêm cách khác để có thể hoàn thiện thêm thôi bác. Không có ý cái gì cũng đưa lên GPE để mọi người giải và làm giúp
Bài đã được tự động gộp:


đúng là Dic quá tuyệt vời bác à. chạy quá nhanh và nguy hiểm. Em cảm ơn nha!
Trong code của mình bị thiếu một dấu phẩy, đố bạn tìm được?
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom