Trước hết, nó không phải là ở tất cả là một ý tưởng tốt để sử dụng toàn bộ tài liệu tham khảo cột trong một công thức mảng (hoặc thực sự bất kỳ phi CSE chức năng mảng chế biến khác, chẳng hạn như SUMPRODUCT
, AGGREGATE
, vv).
Không giống như một số hàm, ví dụ COUNTIF(S)
, SUMIF(S)
trong đó việc sử dụng toàn bộ tham chiếu cột hầu như không ảnh hưởng đến hiệu suất tính toán, các hàm xử lý mảng phải tính toán trên tất cả các ô được truyền cho chúng. Và điều đó áp dụng như nhau cho những ô nằm ngoài ô không trống cuối cùng trong phạm vi được truyền.
Vì vậy, nếu, chẳng hạn, bạn chỉ có dữ liệu kéo dài đến tận hàng 1000, thì bằng cách sử dụng toàn bộ tham chiếu cột trong công thức như vậy, bạn buộc Excel phải tính toán hơn một triệu ô vượt quá mức thực sự cần thiết, một lượng đáng kinh ngạc cho một công thức duy nhất.
Do đó, điều quan trọng là chọn giá trị thấp phù hợp - mặc dù đủ - cho tham chiếu hàng trên hoặc nếu không, làm cho phạm vi của bạn động, sao cho tham chiếu hàng trên được xác định thông qua chức năng tự động phát hiện ô được sử dụng cuối cùng trong cột, do đó cung cấp hiệu quả tối đa.
Đối với vấn đề của bạn, bạn có thể sử dụng công thức mảng sau:
=INDEX(Sheet2!C:C,MATCH(MIN(IF(Sheet2!A1:A100=A1,B1-Sheet2!B1:B100)),IF(Sheet2!A1:A100=A1,B1-Sheet2!B1:B100),0))
Lưu ý rằng tôi chọn một tham chiếu hàng trên 100 ở đây, rõ ràng bạn có thể sửa đổi, mặc dù ghi nhớ những điểm tôi đã nêu trước đó. Nếu bạn thích, tôi cũng có thể chỉ cho bạn cách thiết lập phạm vi động mà tôi đã đề cập.
Cũng lưu ý sự lặp lại của câu lệnh điều kiện trong vòng MATCH
's lookup_array , một điểm quan trọng mà bỏ lỡ một số đáng kinh ngạc lần trong các giải pháp đề xuất để loại vấn đề, lỗi là sử dụng đơn giản:
=INDEX(Sheet2!C:C,MATCH(MIN(IF(Sheet2!A1:A100=A1,B1-Sheet2!B1:B100)),B1-Sheet2!B1:B100,0))
trong đó, mặc dù nó có thể hoạt động, nhưng hoàn toàn không đảm bảo kết quả chính xác, bởi vì nó bị sai sót một cách hợp lý.
Trân trọng