โจทย์ที่เจอบ่อยมากคือมีสองลิสต์ เช่น รายชื่อสมาชิกปีนี้กับปีที่แล้ว หรือรหัสสินค้าในระบบกับในสต็อกจริง แล้วต้องหาว่า “อะไรอยู่ในลิสต์แรกแต่ไม่อยู่ในลิสต์สอง” หรือ “อะไรตรงกันทั้งคู่” บทความนี้รวมวิธีเทียบสองลิสต์ ตั้งแต่ติดธงทีละแถวจนถึงดึงเฉพาะรายการที่ต่างออกมาเป็นลิสต์ใหม่
วิธีที่ 1: ติดธงด้วย COUNTIF
=IF(COUNTIF($D$2:$D$100, A2)=0, "ไม่มีในลิสต์ B", "มี")| A | B | D | ||
|---|---|---|---|---|
| 1 | ลิสต์ A | สถานะ | ลิสต์ B | |
| 2 | ก้อง | มี | ก้อง | |
| 3 | แนน | ไม่มีในลิสต์ B | เจน | |
| 4 | เจน | มี | ปุ๊ก |
COUNTIF นับว่าชื่อในคอลัมน์ A ปรากฏในลิสต์ B กี่ครั้ง ถ้าได้ 0 แปลว่าไม่มี ล็อกช่วง $D$2:$D$100 ด้วย Absolute Reference เพื่อคัดลอกสูตรลงได้
วิธีที่ 2: ดึงเฉพาะรายการที่หายไป (Microsoft 365)
=FILTER(A2:A100, COUNTIF(D2:D100, A2:A100)=0)| A | D | F | ||
|---|---|---|---|---|
| 1 | ลิสต์ A | ลิสต์ B | อยู่ใน A ไม่อยู่ใน B | |
| 2 | ก้อง | ก้อง | แนน | |
| 3 | แนน | เจน | ตูน | |
| 4 | เจน | ปุ๊ก |
FILTER คืนเฉพาะชื่อใน A ที่นับใน B ได้ 0 กลับด้านสูตรเป็น >0 จะได้ “รายการที่ตรงกันทั้งคู่” แทน และสลับ A กับ D เพื่อหา “อยู่ใน B ไม่อยู่ใน A”
วิธีที่ 3: ISNA + XMATCH
=IF(ISNA(XMATCH(A2, $D$2:$D$100)), "หายไป", "ตรง")| A | B | |
|---|---|---|
| 1 | รหัสในระบบ | เทียบสต็อกจริง |
| 2 | SKU-01 | ตรง |
| 3 | SKU-09 | หายไป |
XMATCH คืน #N/A เมื่อหาไม่เจอ ครอบด้วย ISNA ให้เป็น TRUE/FALSE ได้ผลเหมือน COUNTIF แต่เร็วกว่าเมื่อข้อมูลเยอะมาก
วิธีที่ 4: ไฮไลต์ด้วย Conditional Formatting
เลือกลิสต์ A → Home → Conditional Formatting → New Rule → Use a formula ใส่ =COUNTIF($D$2:$D$100, A2)=0 แล้วตั้งสีพื้นเป็นสีเหลือง เซลล์ที่ไม่มีในลิสต์ B จะถูกไฮไลต์ ทำซ้ำกับลิสต์ B เพื่อดูอีกทาง ดู Conditional Formatting
ข้อควรระวัง
- เว้นวรรคซ่อน — “ก้อง” กับ “ก้อง ” ถือว่าต่างกัน ครอบทั้งสองลิสต์ด้วย TRIM ก่อนเทียบ
- ตัวเลขที่เก็บเป็นข้อความ — “001” (ข้อความ) กับ 1 (ตัวเลข) จะไม่แมตช์กัน ต้องทำชนิดข้อมูลให้ตรงกัน
- ต้องแยกตัวพิมพ์เล็ก-ใหญ่ — COUNTIF ไม่แยก ถ้าต้องเป๊ะให้ใช้
=SUMPRODUCT(--EXACT($D$2:$D$100, A2))=0ดู EXACT - อักขระ
* ? ~ในข้อมูล — COUNTIF ตีความเป็น wildcard ถ้าข้อมูลมีจริงต้องระวังผลเพี้ยน