EDIT: Một câu trả lời gần đây từ @ScottCraner đã sử dụng INDEX()
công thức "không tham chiếu" và câu trả lời của anh ấy khiến tôi quyết định thực hiện một vết nứt khác trong vấn đề này. Cách tiếp cận tương tự mà tôi đã (không thành công) đã thử trước khi hoạt động hoàn hảo lần thứ hai. Tôi sẽ mô tả giải pháp dưới đây.
Bối cảnh về công thức INDEX () được tham chiếu lại:
Sean, bạn đã thực hiện một nỗ lực đáng ngưỡng mộ để sử dụng các công thức mảng để làm những gì bạn cần làm. Các vấn đề bạn gặp phải có liên quan đến cách Excel xử lý mảng. Một số công thức có thể sử dụng mảng làm đối số và một số không thể.
Tôi đã nghiên cứu sâu về vấn đề này và tôi đã học được một số điều rất kỳ quái, phức tạp về việc sử dụng mảng trong INDEX()
công thức của Excel mà trước đây tôi không biết. Để hiểu công thức này hoạt động như thế nào, hãy bắt đầu từ cuối.
Điều cuối cùng mà công thức của bạn sẽ làm là tổng ba giá trị (không liên tục) từ mảng 2D là Bảng 2 của bạn.
INDEX(array,row_num,col_num)
có thể trả về một giá trị từ một mảng 2D và nó cũng có thể trả về toàn bộ một cột hoặc hàng. Có vẻ như nó phải có thể trả về một danh sách các giá trị. Vì vậy, hãy kiểm tra nó.
Công thức này sẽ (trong một thế giới hoàn hảo) trả về số tiền bạn đang tìm kiếm từ Bảng 2:
=SUM(INDEX(G4:K8,{3,2,3},{5,4,3}))
Điều đó sẽ thêm các phần tử từ hàng 3, cột 5 cộng với hàng 2, cột 4 cộng với hàng 3, cột 3. Nhưng không , nó chỉ trả về 1,67, là phần tử đầu tiên được tham chiếu.
Tìm kiếm trực tuyến tạo ra các tài liệu tham khảo (bao gồm một tài liệu ở đây trên StackOverflow ) có nghĩa là INDEX()
sẽ trả về một mảng, nhưng chỉ khi bạn hủy tham chiếu công thức (đó là phần "kỳ quái"). Phần "phức tạp" là làm thế nào để làm điều đó. Đây là công thức "không tham chiếu":
=SUM(INDEX(G4:K8,N(IF(1,{3,2,3})),N(IF(1,{5,4,3}))))
Công thức này cho câu trả lời đúng: 4,67.
Trong công thức, IF()
xử lý 1 là True
, do đó, nó trả về mảng các số và N()
trả về mảng các số nếu chúng là số. Tại sao IF () và N () được yêu cầu để làm cho công thức hoạt động chính xác là dự đoán của bất kỳ ai. Trong công thức của Scott , anh ta cũng phải nhân mảng của mình (đó là một tham chiếu phạm vi) với 1.
Nhưng, bây giờ chúng ta có một công thức cho câu trả lời đúng. Và hy vọng, tất cả những gì chúng ta phải làm là thay thế các hằng số mảng bằng các mảng được tính toán bằng dữ liệu khác của bạn.
Thông tin mới bắt đầu từ đây.
Đối với row_num's trong công thức trên {3,2,3}
, chúng ta cần vị trí của cường độ phần trăm trong F4: F8 liên quan đến các giống trái cây được chọn. Trước tiên, chúng tôi sẽ nhận được một loạt các vị trí của Táo trong G12:G16
Bảng 3 của bạn:
=MATCH(B3:B5,G12:G16,0)
Đây là một công thức mảng và phải được nhập với CTRLShiftEnter, chứ không phải chỉ Enter.
Công thức này tìm danh sách các giống Apple từ Bảng 1 trong Cột G của Bảng 3 và trả về một mảng các vị trí của chúng.
Nếu bạn chọn công thức trong thanh công thức và nhấn F9, bạn sẽ thấy giá trị của công thức là mảng {1,3,4}
, vị trí của Táo trong Cột G của Bảng 3.
Bây giờ chúng tôi cần PI liên quan đến các vị trí đó. Công INDEX()
thức này tìm trong Cột H và sử dụng mảng trên dưới dạng row_num's. Ở đây, row_num phải được "hủy tham chiếu":
=INDEX(H12:H16,N(IF(1,MATCH(B3:B5,G12:G16,0))))
Công thức này trả về mảng {0.97,0.98,0.97}
, PI của Táo. Càng xa càng tốt. Tiếp theo, chúng tôi sử dụng mảng đó làm giá trị tra cứu trong một MATCH()
công thức có trong F4: F8, chỉ số PI của Bảng 2 của bạn:
=MATCH(INDEX(H12:H16,N(IF(1,MATCH(B3:B5,G12:G16,0)))),F4:F8,0)
Công thức này trả về mảng {3,2,3}
và đó là những hàng row_num cần thiết cho công thức cuối cùng.
Tiếp theo, chúng ta cần col_num's {5,4,3}
, đó là tổng số trái cây cho mỗi giống của Apple. Chúng ta sẽ nhận được điều này từ Bảng 3, nhưng trước tiên chúng ta cần tính tổng số lượng trái cây cho tất cả các loại trái cây. Mảng (được tính toán) này là một danh sách các tổng số đó:
(I12:I16*J12:J16)+K12:K16
Để có được tổng số trái cây cho các giống Apple, chúng tôi sẽ sử dụng mảng đó trong một INDEX()
, với cùng một hàng (không tham chiếu) như trước:
=INDEX((I12:I16*J12:J16)+K12:K16,N(IF(1,MATCH(B3:B5,G12:G16,0))))
Công thức này trả về mảng {5,4,3}
và đó là những công thức cần thiết cho công thức cuối cùng.
Đặt tất cả những thứ này lại với nhau, danh sách của NFPI là:
=INDEX(G4:K8,MATCH(INDEX(H12:H16,N(IF(1,MATCH(B3:B5,G12:G16,0)))),F4:F8,0),INDEX((I12:I16*J12:J16)+K12:K16,N(IF(1,MATCH(B3:B5,G12:G16,0))))
Công thức này trả về mảng {1.67;2;1}
. Đó là những NFPI dành cho Táo, và bây giờ chúng ta chỉ cần thêm chúng lên.
Nhưng chưa hẳn, có một vấn đề nhỏ cần quan tâm trước tiên. Tất cả ba giống của Apple có thể được tìm thấy trong Bảng 3, nhưng điều này không đúng với Cam. Các công thức trên trả về mảng với #N/A
trong đó không thể tìm thấy giống Cam nhỏ. Điều này không gây ra bất kỳ vấn đề nào cho đến khi đến lúc phải thêm các giá trị.
Vì vậy, trước khi lấy tổng, chúng tôi chuyển đổi #N/A's
thành 0 bằng một IFERROR()
công thức. Đây là công thức cuối cùng:
=SUM(IFERROR(INDEX(G4:K8,MATCH(INDEX(H12:H16,N(IF(1,MATCH(C3:C5,G12:G16,0)))),F4:F8,0),INDEX((I12:I16*J12:J16)+K12:K16,N(IF(1,MATCH(C3:C5,G12:G16,0))))),0))
Công thức này trả về 4,67 cho Táo và 5,75 cho Cam.
Sean, tôi hy vọng điều này vẫn có thể hữu ích. Xin lỗi vì sự chậm trễ lâu dài.