มีหลายคนถามผมมาบ่อยมาก ว่าถ้าเราอยากจะ VLOOKUP หลายเงื่อนไข (Lookup_Value มี 2 ช่องขึ้นไป) ต้องทำยังไงดี? ตัวผมเองก็ดันไม่ได้เขียนตัวอย่างนี้ไว้ในหนังสือซะด้วยสิ ก็เลยขอมาเขียนในนี้ให้อ่านกันฟรีๆ เลยแล้วกัน!
(ใครยังไม่ค่อยแม่น VLOOKUP สามารถไปอ่านได้ที่นี่ก่อน )

VLOOKUP มี Lookup_value หลายตัวได้ด้วยเหรอ?

ผมจะบอกว่า ไอ้ lookup_value ของ VLOOKUP เนี่ย มันมีได้แค่ตัวเดียวแหละครับ
ก็มันมี Argument เดียวไงจำได้มั้ย?
มันเขียนว่า =VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)

เห็นมั้ยครับว่ามีแค่ตัวเดียว แล้วเราจะใส่เข้าไปหลายเงื่อนไขได้ยังไง?

คำตอบก็คือ…มันมี Trick ครับ ถ้าคิดให้ดีๆ

เราสามารถเอาค่าที่เราต้องการจะ Lookup ที่มีหลายๆ เงื่อนไขจับมัดเป็น Lookup_Value ก้อนเดียวก็ได้นี่นา

ถ้ารู้แบบนี้แล้ว จะกลัวอะไรครับ? มาลองดูตัวอย่างจริงกันเลยดีกว่า!

สมมติเรามีข้อมูลแบบนี้ครับ

vlookup-multiple-1fix

 

เราต้องการเอาข้อมูลอ้างอิงข้างบน มาสรุปเป็นตารางข้างล่าง  ซึ่งจะเห็นว่าเราไม่สามารถใช้ VLOOKUP ค่า A B C ตรงๆ ได้ เพราะการ Lookup แบบ Exact Match ถ้าเจอค่าซ้ำกันมันจะได้ค่าแรกสุดกลับมาเสมอ

วิธีแก้ก็คือ ต้องทำให้ค่าที่ Lookup ไม่ซ้ำกันนั่นเอง โดยการจับค่ามามัดรวมกันเป็นค่าเดียว เช่น เอา สินค้า กับ คนขายมาเชื่อมกัน

ซึ่งวิธีเชื่อมเราก็ใช้เครื่องหมาย & มาเชื่อมง่ายๆ นี่แหละครับ แต่ที่สำคัญต้องเชื่อมแล้วไม่ซ้ำกับบรรทัดอื่นนะครับ

vlookup-multiple-2

ข้อควรระวัง 1

แต่วิธีนี้อาจมีความเสี่ยงตรงที่ ถ้าค่าที่เราเอามาเชื่อมกันแล้วมันอาจไปซ้ำกับค่าอื่นได้ เช่น

  • เชื่อม AA กับ ข ==> AAข
  • เชื่อม A กับ Aข ==> AAข
    ซึ่งออกมาเหมือนกันทั้งที่ตั้งต้นคนละอันเลย!

ดังนั้นผมแนะนำให้ตอนเชื่อมตั่นด้วยสัญลักษณ์แปลกๆ เช่น | เสมอ ซึ่งป้องกันค่าไม่ให้ซ้ำกันโดยไม่ตั้งใจได้ เช่น

  • เชื่อม AA กับ ข ==> AA|ข
  • เชื่อม A กับ Aข ==> A|Aข
    ออกมาเป็นคนละอันกัน ซึ่งถูกต้อง!

ดังนั้นคอลัมน์พิเศษของผมจึงออกมาเป็นแบบนี้

vlookup-multiple-3

ทีนี้เราก็สามารถ VLookup ได้แล้วล่ะครับ

=VLOOKUP($C13&”|”&D$12,$B$2:$E$9,4,0)

ซึ่ง $C13&”|”&D$12 ก็คือ สินค้า|คนขาย นั่นเอง

vlookup-multiple-4

ตัวที่ออกมาเป็น #N/A แสดงว่าไม่อยู่ในตารางข้างบน ซึ่งเราก็สามารถแปลงให้เป็น 0 ได้ โดยการใช้ IFERROR ซ้อนไปให้แสดง 0 แทน เป็นต้น

vlookup-multiple-5

แค่นี้ก็สามารถได้ผลลัพธ์ตามที่ต้องการแล้วครับ

อย่าลืมนะครับ หลักการมีอยู่นิดเดียว คือ ให้จับเงื่อนไขหลายๆ ตัวมามัดกันเป็นก้อนเดียว และเป็นก้อนที่ Unique แบบไม่ซ้ำกันกับบรรทัดอื่น นั่นเองครับ

เทคนิคเสริมและข้อควรระวัง! กรณีข้อมูลที่สรุปเป็นตัวเลข

ขอบคุณ คุณ Songsak YO Kitthawonarcheep มากครับ ที่เข้ามาเตือนในเพจ Facebook เกี่ยวกับตัวอย่างข้างบน ซึ่งอาจผิดได้ในบางกรณี

กรณีที่ข้อมูลที่ต้องการนำมาสรุปผลเป็นข้อมูลตัวเลข หรือบางทีข้อมูลดิบอาจมี Lookup_Value หลายบรรทัดซ้ำกัน เช่น มีสินค้า A กับ คนขาย นาย ก คู่กันหลายบรรทัด (ทำให้ค่า Lookup_Value ไม่ใช่ค่า unique อย่างแท้จริง) การใช้ VLOOKUP ทำให้ได้มาแต่ค่าแรก ซึ่งจะทำให้ผลสรุปผิดได้

วิธีที่ดีกว่าในกรณีที่ข้อมูลเป็นตัวเลขแบบนี้ คือ การใช้พวก SUMIF มาช่วยแทน (คิดเหมือน Pivot Table) เช่นตามรูปนี้ครับ

vlookup-multiple-6

สังเกตว่าได้ค่าเท่ากับวิธี VLOOKUP ข้างบนเป๊ะเลย (ถ้าค่า Lookup_Value ซ้ำกันหลายบรรทัด วิธีนี้จะถูกต้องกว่า เพราะ VLOOKUP จะได้แต่ค่าบนสุดทำให้ผลออกมาน้อยเกินจริง) คำนวณเร็วกว่า แถมไม่ต้องมาดัก Error ด้วย เจ๋งจริงๆ ครับ

เพียงแต่วิธีนี้มีข้อจำกัด คือ ใช้ได้เฉพาะกับข้อมูลที่เป็นตัวเลขเท่านั้น ถ้าข้อมูลเป็น Text ต้องใช้พวก VLOOKUP มาช่วย แล้วถ้ามี Text ซ้ำกันหลายบรรทัด ก็ต้องพยายามทำให้ไม่ซ้ำแหละครับ ต้องเพิ่มคอลัมน์เพื่อให้มันไม่ซ้ำให้ได้ แค่นั้นเอง