วิธีใช้ VLookup vs Index กับการคำนวณแบบ Smart Calculation

สูตร VLookup เป็นสูตรหนึ่งที่ขึ้นชื่อว่าทำงานช้า ยิ่งใช้สูตรนี้กับตารางขนาดใหญ่มากและใช้สูตรนี้หลายๆเซลล์ ยิ่งทำให้แฟ้มนั้นทำงานช้าลงไปเรื่อยๆ สาเหตุที่สูตร VLookup ทำงานช้าเพราะการอ้างอิงถึงพื้นที่ตารางฐานข้อมูลที่ใช้ในสูตรนี้ ต้องอ้างอิงกับตารางที่เกี่ยวข้องกันทั้งหมด ซึ่ง VLookup 1 สูตรจะทำงาน 2 ขั้น เริ่มจากใช้ค่าใน Column ซ้ายมือสุดมาเปรียบเทียบกับค่าที่ใช้หาเพื่อหาตำแหน่งของ Row แล้วจึงทำงานอีกขั้นหนึ่งไปหาค่าคำตอบจาก Column ที่ต้องการซึ่งอยู่ใน Row นั้น เช่น

=VLookup(รหัสสินค้า,B2:K20000,5,0)

B2:K20000 เป็นพื้นที่ตารางฐานข้อมูล 10 column เกี่ยวข้องกับการขายสินค้า โดยกำหนดให้หาคำตอบมาจาก column ที่ 5 หรือ column F ในพื้นที่ B2:K20000 นี้

โดยทั่วไปสูตรของ Excel จะคำนวณใหม่ต่อเมื่อมีการเปลี่ยนแปลงข้อมูลในพื้นที่ตารางที่อ้างถึงไว้ในสูตรเท่านั้น ซึ่งเรียกว่า Smart Calculation ดังนั้นเมื่อใดที่มีการเปลี่ยนแปลงข้อมูลในพื้นที่ตารางช่วง B2:K20000 แม้แต่เซลล์เดียว ก็จะกระตุ้นให้สูตร VLookup นี้ และสูตรอื่นๆที่ใช้ตำแหน่งอ้างอิงพาดพิงถึงเซลล์ที่เปลี่ยนแปลงข้อมูลต้องคำนวณตามเสมอ

ตามปกติ การใช้สูตร VLookup เพื่อหาคำตอบจาก column ใด ผู้ใช้ Excel ต้องกำหนดเลขประจำ column ให้ตรงกัน โดยใช้ช่วงตารางข้อมูลที่อ้างอิงเหมือนกันทุกสูตรใช่ไหม เช่น

=VLookup(รหัสสินค้า,B2:K20000,2,0) เพื่อหาคำตอบมาจาก column C

=VLookup(รหัสสินค้า,B2:K20000,3,0) เพื่อหาคำตอบมาจาก column D

=VLookup(รหัสสินค้า,B2:K20000,4,0) เพื่อหาคำตอบมาจาก column E

=VLookup(รหัสสินค้า,B2:K20000,5,0) เพื่อหาคำตอบมาจาก column F

=VLookup(รหัสสินค้า,B2:K20000,6,0) เพื่อหาคำตอบมาจาก column G

=VLookup(รหัสสินค้า,B2:K20000,7,0) เพื่อหาคำตอบมาจาก column H

=VLookup(รหัสสินค้า,B2:K20000,8,0) เพื่อหาคำตอบมาจาก column I

=VLookup(รหัสสินค้า,B2:K20000,9,0) เพื่อหาคำตอบมาจาก column J

=VLookup(รหัสสินค้า,B2:K20000,10,0) เพื่อหาคำตอบมาจาก column K

สมมติว่าเกิดการแก้ไขข้อมูลในเซลล์ G2 ก็จะกระตุ้นให้สูตร VLookup เหล่านี้ทุกสูตรคำนวณใหม่เสมอเพราะเซลล์ G2 เป็นเซลล์หนึ่งที่อยู่ในพื้นที่เซลล์ B2:K20000

ถ้าสร้างสูตรเป็น ควรกำหนดขนาดตารางที่อ้างอิงไว้ให้ใช้เท่าที่จำเป็น จะช่วยให้ Excel คำนวณเร็วขึ้นโดยแก้สูตรข้างต้นตามนี้

=VLookup(รหัสสินค้า,B2:C20000,2,0) เพื่อหาคำตอบมาจาก column C

=VLookup(รหัสสินค้า,B2:D20000,3,0) เพื่อหาคำตอบมาจาก column D

=VLookup(รหัสสินค้า,B2:E20000,4,0) เพื่อหาคำตอบมาจาก column E

=VLookup(รหัสสินค้า,B2:F20000,5,0) เพื่อหาคำตอบมาจาก column F

=VLookup(รหัสสินค้า,B2:G20000,6,0) เพื่อหาคำตอบมาจาก column G

=VLookup(รหัสสินค้า,B2:H20000,7,0) เพื่อหาคำตอบมาจาก column H

=VLookup(รหัสสินค้า,B2:I20000,8,0) เพื่อหาคำตอบมาจาก column I

=VLookup(รหัสสินค้า,B2:J20000,9,0) เพื่อหาคำตอบมาจาก column J

=VLookup(รหัสสินค้า,B2:K20000,10,0) เพื่อหาคำตอบมาจาก column K

นอกจากนี้ถ้าอยากทำให้ VLookup คำนวณเร็วขึ้นไปอีก ให้สั่ง Sort เรียงข้อมูลใน B2:B20000 จากน้อยไปมาก และ เปลี่ยนไปใช้สูตร VLookup แบบ Approaching Match (โดยไม่ต้องใส่เลข 0 ตัวสุดท้ายขวาสุดในวงเล็บของสูตร) แต่ต้องระวังว่าสูตรจะหาค่าคำตอบให้ได้เสมอแม้ไม่มีรหัสสินค้าที่ใช้หาหรือกรอกรหัสสินค้าผิดก็ตาม จึงควรใช้วิธีนี้กับข้อมูลที่ใช้ตัวเลข เช่น คะแนนสอบ หรือปริมาณสินค้า เป็นค่าที่ใช้ค้นหา ซึ่งเหมาะกับการใช้แบบ Approaching Match ตั้งแต่แรก

อย่างไรก็ตามยังมีสูตรที่ทำงานได้เร็วกว่าสูตร VLookup อยู่อีก แต่คราวนี้ต้องสร้างตารางฐานข้อมูลจำแลงเพิ่มขึ้นมาอีก column หนึ่ง เพื่อใช้เก็บตัวเลขลำดับรายการของรหัสที่หาได้โดยใช้สูตร
=Match(รหัสสินค้า,B2:B20000,0)
จากนั้นเมื่อต้องการหาคำตอบจาก column ใด ให้ใช้สูตร Index หาค่าจาก column นั้นต่อ เช่น

=Index(C2:C20000,ตัวเลขลำดับรายการ) เพื่อหาคำตอบมาจาก column C

=Index(D2:D20000,ตัวเลขลำดับรายการ) เพื่อหาคำตอบมาจาก column D

=Index(E2:E20000,ตัวเลขลำดับรายการ) เพื่อหาคำตอบมาจาก column E

=Index(F2:F20000,ตัวเลขลำดับรายการ) เพื่อหาคำตอบมาจาก column F

=Index(G2:G20000,ตัวเลขลำดับรายการ) เพื่อหาคำตอบมาจาก column G

=Index(H2:H20000,ตัวเลขลำดับรายการ) เพื่อหาคำตอบมาจาก column H

=Index(I2:I20000,ตัวเลขลำดับรายการ) เพื่อหาคำตอบมาจาก column I

=Index(J2:J20000,ตัวเลขลำดับรายการ) เพื่อหาคำตอบมาจาก column J

=Index(K2:K20000,ตัวเลขลำดับรายการ) เพื่อหาคำตอบมาจาก column K

คราวนี้หากเกิดการแก้ไขข้อมูลในเซลล์ G2 ก็จะกระตุ้นให้สูตร =Index(G2:G20000,ตัวเลขลำดับรายการ) เพียงสูตรเดียวเท่านั้นเกิดการคำนวณใหม่เพราะสูตรอื่นไม่ได้กำหนดตำแหน่งเซลล์อ้างอิงรวมเซลล์ G2 ไว้แต่อย่างใด

ทั้งนี้พึงหลีกเลี่ยงการนำสูตร Match ไปซ้อนไว้ในสูตร Index เช่น =Index(G2:G20000, Match(รหัสสินค้า,B2:B20000,0)) เพราะ Excel จะต้องคำนวณสูตร Match ที่ซ้อนไว้ซ้ำอีกโดยไม่จำเป็น จึงแนะนำให้สร้าง column เพิ่มเพื่อให้สูตร Match คำนวณอิสระเพียงครั้งเดียว

Download แฟ้มตัวอย่าง

 

Related Articles

© Copyright 1999

สงวนลิขสิทธิ์ตามกฎหมาย

ห้ามนำข้อความหรือส่วนหนึ่งส่วนใดของบทความหรือวิดีโอหรือรูปภาพไปใช้เพื่อการค้าขาย หรือเพื่อประโยชน์ส่วนตัว

อนญาตให้นำไปใช้เพื่อสาธารณประโยชน์โดยขอให้ระบุที่มาและชื่อผู้เขียนกำกับไว้ด้วยเสมอ

ลิงก์เว็บ Excel Expert Training

เว็บสำหรับ เรียนออนไลน์

เว็บสำหรับ เรียนแบบกลุ่ม-ส่วนตัว

ติดตามข่าวสารได้จาก facebook

ถามปัญหาได้ที่ กลุ่มคนรัก Excel

และไลน์กลุ่ม Excel Expert Group

ที่อยู่และการติดต่อ

สมเกียรติ ฟุ้งเกียรติ 7/1 รามคำแหง ซอย 35 หัวหมาก บางกะปิ กทม 10240 โทร 097-140-5555, 02-718-9331

Excel@ExcelExpertTraining.com

sfk234x234