=INDEX(SHEET2!C:C,aggregate(14,6,row(Sheet2!A$2:A$10)/((Sheet2!A$2:A$10=A2)*(Sheet2!B$2:B$10=B2)),1))
สูตรข้างต้นใช้ AGGREGATE ซึ่งดำเนินการเช่นเดียวกับการดำเนินการโดยไม่ต้องเป็นอาร์เรย์อย่างน้อยสำหรับฟังก์ชั่นบางอย่างเช่น 14 และ 15 โดย 14 บอกให้ AGGREGATE เรียงลำดับผลลัพธ์จากมากที่สุดไปหาน้อยที่สุด 15 เรียงลำดับจากน้อยที่สุดไปหามากที่สุด 6 บอก AGGREGATE ให้ละเว้นผลลัพธ์ที่ทำให้เกิดข้อผิดพลาด
ROW(SHEET2!A$2:A$10)
ส่วนนี้ให้ AGGREGATE หมายเลขแถวที่ถูกประเมินอยู่ในขณะนี้
((Sheet2!A$2:A$10=A2)*(Sheet2!B$2:B$10=B2))
ส่วนนี้เป็นสองเงื่อนไขที่ทั้งสองต้องเป็นจริงเพื่อให้ AGGREGATE ไม่ได้รับข้อผิดพลาด * ทำหน้าที่เหมือนฟังก์ชัน AND เมื่อทั้งสองอย่างใดอย่างหนึ่งเป็นเท็จผลลัพธ์จะสิ้นสุดลงที่ 0 ซึ่งทำให้การหารด้วยข้อผิดพลาด 0 หากผลลัพธ์ทั้งคู่เป็นจริงผลลัพธ์จะเป็น 1 และหมายเลขแถวจะไม่ถูกปรับเปลี่ยนโดยการหารด้วยหนึ่ง คุณจะได้รับรายการผลลัพธ์ที่กรองแล้วที่ตรงกับเกณฑ์ของคุณ
1 บอกให้ AGGREGATE ส่งคืนผลลัพธ์ 1 รายการจากรายการที่เรียง ซึ่งหมายความว่าเมื่อมีหลายแถวที่ตรงกับเกณฑ์ของคุณแถวสุดท้ายที่ตรงกันจะถูกส่งคืนสำหรับฟังก์ชัน AGGREGATE 14 และแถวแรกจะถูกส่งคืนสำหรับฟังก์ชัน 15
ตอนนี้คุณมีหมายเลขแถวที่สามารถนำไปอ้างอิงในคอลัมน์แบบเต็มสำหรับ INDEX เพื่อดึงข้อมูลจากแถวที่สอดคล้องกันของคอลัมน์
เนื่องจาก AGGREGATE ใช้อาร์เรย์เช่นการคำนวณการอ้างอิงคอลัมน์แบบเต็มภายในฟังก์ชัน AGGREGATE ควรหลีกเลี่ยงเพื่อลดการคำนวณเพิ่มเติมซึ่งจะทำให้ระบบของคุณไม่ทำงาน ภายในฟังก์ชัน AGGREGATE ช่วงควร จำกัด ข้อมูลของคุณ
ปรับช่วงเพื่อให้เหมาะกับข้อมูลของคุณ
คุณไม่ได้ระบุสิ่งที่คุณต้องการเป็นผลลัพธ์เมื่อไม่พบสิ่งที่อยู่ในรายการ ขณะนี้มันจะส่งคืนข้อผิดพลาด เพื่อเป็นระเบียบเรียบร้อยขึ้นคุณสามารถห่อสิ่งทั้งหมดไว้ในฟังก์ชัน IFERROR และทำให้มันเป็นดังนี้:
=IFERROR(INDEX(Sheet2!C:C,AGGREGATE(14,6,ROW(Sheet2!A$2:A$10)/((Sheet2!A$2:A$10=A2)*(Sheet2!B$2:B$10=B2)),1)),"NO MATCH")