บ่อยครั้งที่เรามี “ประวัติ” ยาวๆ เช่น log ราคาสินค้า หรือบันทึกสถานะออร์เดอร์ แล้วอยากได้แค่ “ค่าล่าสุด” ของแต่ละรายการ ไม่ใช่ค่าแรก บทความนี้รวมวิธีหาค่าล่าสุด (และค่าแรก) ที่ตรงเงื่อนไข ตั้งแต่วิธีใหม่ด้วย XLOOKUP จนถึงสูตร LOOKUP trick ที่ใช้ได้ทุกเวอร์ชัน
วิธีที่ 1: XLOOKUP ค้นจากล่างขึ้นบน (Microsoft 365)
=XLOOKUP(E2, B2:B8, C2:C8, "ไม่พบ", 0, -1)| A | B | C | E | F | ||
|---|---|---|---|---|---|---|
| 1 | วันที่ | สินค้า | ราคา | สินค้า | ราคาล่าสุด | |
| 2 | 1 ส.ค. | เมาส์ | 450 | เมาส์ | 420 | |
| 3 | 5 ส.ค. | คีย์บอร์ด | 790 | |||
| 4 | 9 ส.ค. | เมาส์ | 430 | |||
| 5 | 14 ส.ค. | เมาส์ | 420 |
อาร์กิวเมนต์สุดท้าย -1 สั่งให้ XLOOKUP ค้นจากรายการสุดท้ายย้อนขึ้นมา จึงเจอ “เมาส์” แถวที่ 5 (ราคา 420) ก่อน ถ้าใช้ค่าเริ่มต้น (1) จะได้ราคาแรก 450
วิธีที่ 2: LOOKUP trick (ใช้ได้ทุกเวอร์ชัน)
=LOOKUP(2, 1/(B2:B8=E2), C2:C8)| B | C | E | F | ||
|---|---|---|---|---|---|
| 1 | ออร์เดอร์ | สถานะ | ออร์เดอร์ | สถานะล่าสุด | |
| 2 | #101 | รับออเดอร์ | #101 | จัดส่งแล้ว | |
| 3 | #102 | รับออเดอร์ | |||
| 4 | #101 | แพ็คของ | |||
| 5 | #101 | จัดส่งแล้ว |
หลักการ: 1/(B2:B8=E2) ได้ 1 ตรงแถวที่ตรงเงื่อนไข และ #DIV/0! ตรงที่ไม่ตรง จากนั้น LOOKUP(2, ...) มองหาเลข 2 ซึ่งไม่มีจริง มันจึงเลื่อนไปหยุดที่ค่า 1 ตัวสุดท้าย แล้วคืนค่าคู่กันจากคอลัมน์ C = สถานะล่าสุด
วิธีที่ 3: หาค่าในเซลล์สุดท้ายที่ไม่ว่างของคอลัมน์
=LOOKUP(2, 1/(A2:A100<>""), A2:A100)| A | E | ||
|---|---|---|---|
| 1 | ยอดวันที่ | ล่าสุด | |
| 2 | 1,200 | 1,500 | |
| 3 | 1,350 | ||
| 4 | 1,500 |
ใช้ดึงค่าล่าสุดที่กรอกในคอลัมน์ที่ยังเพิ่มข้อมูลเรื่อยๆ โดยไม่ต้องรู้ว่าตอนนี้มีถึงแถวไหน
วิธีที่ 4: ถ้ามีคอลัมน์วันที่ ใช้ MAXIFS ชี้แถวล่าสุด
=XLOOKUP(MAXIFS(A2:A8, B2:B8, E2), A2:A8, C2:C8)| A | B | C | E | F | ||
|---|---|---|---|---|---|---|
| 1 | วันที่ | สินค้า | ราคา | สินค้า | ราคา ณ วันล่าสุด | |
| 2 | 14/08/2026 | เมาส์ | 420 | เมาส์ | 420 |
MAXIFS หาวันที่ล่าสุดของสินค้านั้น แล้ว XLOOKUP ดึงราคาของวันนั้น วิธีนี้แม่นกว่าเมื่อข้อมูลไม่ได้เรียงตามเวลา
ข้อควรรู้
- LOOKUP trick ไม่ต้องเรียงข้อมูล — ต่างจาก LOOKUP ปกติที่ต้องเรียง เพราะเทคนิคนี้อาศัยพฤติกรรมการข้าม Error
- หาค่าแรก — ใช้ INDEX + MATCH หรือ VLOOKUP ตามปกติ (คืนตัวแรกที่เจออยู่แล้ว)
- อ้างอิงทั้งคอลัมน์ (A:A) ทำให้ช้า — จำกัดช่วงเท่าที่จำเป็น เช่น
A2:A1000 - ต้องการทั้งแถวล่าสุด — ใช้ XLOOKUP โหมด
-1คืนได้ทั้งแถวถ้าใส่ผลลัพธ์เป็นหลายคอลัมน์