การใช้ VLOOKUP เพื่อแสดงข้อมูลจากฐานข้อมูล ตอนที่2
จากครั้งที่แล้ว ที่ผมได้แนะนำวิธีการใช้งาน VLOOKUP ไปนั้น ถือเป็นหลักการใช้งานเบื้องต้น เพื่อให้สามารถแสดงข้อมูลจากฐานข้อมูลได้ แต่ในการนำไปใช้งานจริง อาจจะมีการนำไปใช้ในรูปแบบอื่นที่แตกต่างไป ผมจึงขอเสนอเทคนิค และวิธีการประยุกต์ใช้ VLOOKUP เพิ่มเติมสักเล็กน้อย ดังนี้
1. พิมพ์สูตรครั้งเดียว สามารถคัดลอกไปใช้ได้ทุกเซล
จากตัวอย่างในครั้งที่แล้ว เมื่อเราพิมพ์สูตรที่ K5 ว่า =VLOOKUP(K$4,$B$3:$F$10,2,0) และทำการคัดลอกสูตรลงมายัง K6 ถึง K8 นั้น จะเห็นว่า เราต้องมาแก้ไขสูตรในแต่ละบรรทัดใหม่ โดยเปลี่ยนเลข 2 เป็น 3, 4 และ 5 ตามลำดับ ถ้าหากจำนวนเซลมีมากกว่านี้ล่ะ ก็ต้องแก้ไขสูตรอีกหลายครั้ง
รูปที่ 7 ตัวอย่างผลลัพธ์ที่เรียงต่อเนื่องกันลงมา
ดังนั้น ถ้าข้อมูลเป็นลักษณะเรียงต่อเนื่องกันลงมา ขอย้ำนะครับว่า "เรียงต่อเนื่องกันลงมา" ดังในรูปที่ 6 เราสามารถแก้ไขสูตรที่ K5 เสียใหม่ เพื่อให้สามารถคัดลอกไป K6 ถึง K8 ได้ โดยไม่ต้องไปแก้ไขสูตรอีก ดังนี้
1.1) เปลี่ยนสูตรที่ K5 เป็น =VLOOKUP(K$4,$B$3:$F$10,ROW()-3,0) เสร็จแล้วลองคัดลอกสูตรลงมายัง K6 ถึง K8 จะเห็นว่า ได้ผลลัพธ์ออกมาอัตโนมัติ โดยไม่ต้องมาแก้ไขสูตรอีก (ยกเว้น K8 เพราะเราใช้ VLOOKUP ซ้อน VLOOKUP ซึ่งสูตรไม่เหมือนกับเซลอื่น)
ทั้งนี้เพราะ ฟังก์ชัน ROW() จะส่งค่าเลขบรรทัดนั้นๆ ออกมา ซึ่งถ้าเรากำลังทำงานในบรรทัดที่ 5 ผลลัพธ์ที่ได้จากฟังก์ชัน ROW() ก็คือ 5 แต่ในเซล K5 นั้น เราต้องการเลข 2 ไปใส่ในสูตร ผมจึงใช้ ROW()-3
ดังนั้น เมื่อสูตรถูกคัดลอกไปยังบรรทัดถัดลงมา เลขที่แสดงบรรทัดที่ได้จาก ROW() ก็จะเปลี่ยนไปอัตโนมัติ พอนำ ROW()-3 ผลลัพธ์จึงเปลี่ยนเป็น 3, 4 และ 5 ตามลำดับ โดยอัตโนมัติ
หมายเหตุ : วิธีการนี้ใช้ได้เฉพาะกรณีที่ ต้องการแสดงข้อมูลเรียงต่อเนื่องกันลงมาเท่านั้น
1.2) เนื่องจากหัวข้อใน J5:J8 เป็นข้อความที่เราคัดลอกมาจาก B2:F2 ข้อความจึงเหมือนกันทุกประการ เราจึงสามารถใช้วิธีเปรียบเทียบ ว่าหัวข้อในคอลัมน์ J นี้ ไปตรงกับลำดับที่เท่าไรในช่วง B2:F2 โดยใช้ฟังก์ชัน MATCH ดังนั้นที่ K5 จึงเขียนสูตรใหม่ได้ ดังนี้ =VLOOKUP($K$4,$B$3:$F$10,MATCH(J5,$B$2:$F$2,0),0) เสร็จแล้วลองคัดลอกสูตรลงมายัง K6 ถึง K8 จะเห็นว่า ได้ผลลัพธ์ออกมาอัตโนมัติเช่นกัน
วิธีการนี้มีข้อดีกว่าการใช้ ROW() ตรงที่ แม้ข้อมูลจะไม่เรียงต่อเนื่องกันลงมา จะเว้นบรรทัด หรือจะวางข้อมูลในแนวอื่น ดังในรูปที่ 8 สูตรนี้ก็ยังใช้งานได้ แต่มีข้อแม้ว่า ชื่อหัวข้อของผลลัพธ์ จะต้องเหมือนกันกับหัวตารางฐานข้อมูล
รูปที่ 8 ตัวอย่างการวางข้อมูลผลลัพธ์รูปแบบอื่น
2. การนำผลลัพธ์ที่ได้จาก VLOOKUP มาเชื่อมต่อกัน
ในบางกรณี ที่เราไม่ต้องการแสดงข้อมูล ในลักษณะที่เป็นหัวข้อใครหัวข้อมัน แต่ต้องการให้ข้อมูลเชื่อมต่อกันไปเลย เช่น คำนำหน้า+ชื่อ+เว้นวรรคสัก 2 เคาะ+นามสกุล อย่างนี้เป็นต้น ก็สามารถเขียนสูตรได้ดังนี้ =VLOOKUP(K$4,$B$3:$F$10,2,0)&VLOOKUP(K$4,$B$3:$F$10,3,0) &" "&VLOOKUP(K$4,$B$3:$F$10,4,0)
รูปที่ 9 ตัวอย่างการนำผลลัพธ์ที่ได้จาก VLOOKUP มาเชื่อมต่อกัน
3. ถ้ายังไม่ใส่รหัส ก็ให้แสดงแบบฟอร์มเปล่าๆ
จากทุกสูตรที่แนะนำมาแล้วในเบื้องต้น หากคุณลองลบรหัสที่ป้อนใน K4 ออกไป จะเห็นว่าในช่องต่างๆ ที่เราเรียกใช้สูตร VLOOKUP จะแสดงค่าผิดพลาด #N/A ออกมาทุกเซล ทำให้ดูเกะกะสายตา และทำให้แบบฟอร์มดังกล่าวไม่สวยงาม
รูปที่ 10 ตัวอย่างค่าผิดพลาดในกรณีที่ยังไม่ใส่รหัสที่ K4
หากไม่ต้องการให้แสดงค่าผิดพลาดดังกล่าว ให้เอาฟังก์ชัน IF เข้ามาตรวจสอบก่อนว่า มีการป้อนรหัสที่ K4 หรือไม่ ถ้ายังไม่ป้อน ก็ไม่ต้องแสดงค่า แต่ถ้าป้อนแล้ว จึงค่อยแสดงค่าตาม VLOOKUP โดยเปลี่ยนสูตรในแต่ละเซล ดังนี้ =IF(ISBLANK($K$4),"",ตามด้วยสูตรเดิม) หรือ =IF($K$4="","",ตามด้วยสูตรเดิม)
4. การดึงข้อมูลต่างชีท หรือต่างไฟล์
จริงๆ แล้วก็ไม่มีอะไรมากหรอกครับ ถ้าเป็นการดึงข้อมูลต่างชีท ต้องใส่ชื่อชีทด้วย หรือถ้าดึงข้อมูลคนละไฟล์ ก็ต้องใส่ชื่อไฟล์ด้วย เช่น
4.1 กรณีข้อมูลอยู่ในชีทเดียวกัน =VLOOKUP(K$4,$B$3:$F$10,2,0)
4.2 กรณีข้อมูลอยู่คนละชีท แต่ไฟล์เดียวกัน =VLOOKUP(K$4,Sheet1!$B$3:$F$10,2,0)
4.3 กรณีข้อมูลอยู่คนละไฟล์ =VLOOKUP(K$4,[Book2.xls]Sheet1!$B$3:$F$10,2,0)
4.4 กรณีไฟล์ข้อมูลอยู่คนละโฟลเดอร์ หรือคนละไดรว์ =VLOOKUP(K$4,'D:|My Documents|[Book2.xls]Sheet1'!$B$3:$F$10,2,0) หมายเหตุ : เครื่องหมาย | ใช้แทนเครื่องหมาย backslash ครับ
--------------------
ที่แนะนำมาทั้งหมดนี้ ก็เป็นเกร็ดเล็กๆ น้อยๆ เกี่ยวกับการประยุกต์ใช้ VLOOKUP เพื่อแสดงข้อมูลจากตารางฐานข้อมูล หวังว่าคงจะเป็นประโยชน์กับผู้สนใจ ไม่มากก็น้อยนะครับ
Create Date : 03 พฤษภาคม 2551 |
|
19 comments |
Last Update : 30 มกราคม 2552 21:41:58 น. |
Counter : 29408 Pageviews. |
|
|
|