ดึงภาพจาก folder มาใส่ excel

ดึงภาพจาก folder มาใส่ excel ทำได้หลายวิธี มีทั้งแบบที่ใช้การ insert เข้าไปใน Cell โดยตรง ไปจนถึงขั้นซับซ้อน เขียนเป็น VBA ใช้งาน

มิตรสหายท่านหนึ่ง ถามเกี่ยวกับการแทรกรูปเข้า excel โดยอัตโนมัติ ซึ่งตอนฟังก็จับความได้ว่าจะทำเป็นตารางเพื่อ Vlookup ก็เลยนึกว่าอยากได้แบบแทรกรูปเข้าตารางโดยอัตโนมัติ เลยส่ง Code VBA ชุดหนึ่งไปให้ ซึ่ง Code ชุดนี้ก็ได้มาจาก https://excel-macro.tutorialhorizon.com/excel-vba-insert-multiple-images-from-a-folder-to-excel-cells/ โปรดคลิกไปอ่านได้

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

ความต้องการของ มิตรสหายท่านนั้น คือ ต้องการทำเป็น form เพื่อพิมพ์ออกมา โดยดึงข้อมูลต่าง ๆ ด้วยการ lookup จากตารางอื่น

ดึงภาพจาก folder ด้วย lookup

อันนี้บอกตรง ๆ ว่า งง กับวิธีคิดของมิตรสหายท่านนั้นเหมือนกัน ลักษณะที่มิตรสหายท่านนั้นพูดถึง น่าจะใช้ Access ทำเป็น Report เสียมากกว่า คือท่านดำริว่า อยากจะทำตารางสักหนึ่งตาราง เพื่อแสดงข้อมูลทั้งหมด เช่น สินทรัพย์นี้ หน้าตาแบบนี้ (แสดงโดยใช้รูป) และมีรายละเอียดอื่น ๆ เช่น ที่ตั้งสถานที่ ชื่อผู้ดูแลสินทรัพย์นั้น ๆ ฯลฯ อย่างนี้เป็นต้น แล้วทำอีก sheet หนึ่ง เพื่อจะดึงข้อมูลเหล่านี้มาพิมพ์ในรูปแบบสวยงาม

ฟังแล้วก็ได้แต่คิด ทำไมไม่ทำใน Access ว้า เรื่องนี้เหมาะกับ Access จริง ๆ มันตรงคุณลักษณะที่มิตรสหายท่านนี้ต้องการเป๊ะ ลักษณะการทำงานเป็น database ไม่ได้คำนวณอะไรมากมายนัก การแยกเป็นแต่ละตาราง หรือ table เพื่อทำฐานข้อมูล รวมทั้งใส่รูปต่าง ๆ น่าจะสะดวกกว่ามาก

แต่ มิตรสหายท่านนั้น ไม่สะดวกในการใช้ Access ดังนั้นก็เลยต้องทำใน Excel

เดี๋ยวจะเขียนถึงอีกครั้ง ว่าจากข้อมูลชุดเดียวกันจะเอาไปทำเป็น Access ได้อย่างไร ดีเหมือนกัน มีเรื่องเขียน

สำหรับตอนนี้ DataRevol.com ขอเขียนเรื่อง  ดึงภาพจาก folder มาใส่ excel ก่อน

สิ่งที่มิตรสหายท่านนั้นต้องการคือ ทำตารางขึ้นมาหนึ่งตาราง และใส่รูปในตารางเหล่านั้น ถึงเวลาใช้ก็ vlookup เรียกมาใช้

ก็ได้ ลองทำอย่างที่เขาอยากให้ทำดูละกัน ว่ามันจะเป็นอย่างไร?

สร้างตารางเก็บข้อมูล

ก่อนอื่น ก็ต้องสร้างตารางเก็บข้อมูลขึ้นมา สร้าง Sheet ชื่อ DATA ใน Sheet นี้จะมีตารางข้อมูลเก็บ รหัส (จะใช้เป็นคีย์ในการเรียก vlookup ตัวอย่างนี้จะใช้ชื่อ JEDI EMPIRE REBEL และ FIRST  ตามด้วย รูปภาพ ที่ใส่ไว้ใน cell และ มีชื่อในคอลัมน์สุดท้าย

ดึงภาพจาก folder มาใส่ excel
ชีต Data สร้าง ตารางเก็บข้อมูลและรูปภาพ

เอาแค่ 3 คอลัมน์ก็แล้วกัน พอเป็นตัวอย่างให้เห็นภาพรวม

สร้างฟอร์มแสดงผล

จากนั้น ก็มาสร้าง Sheet ตั้งชื่อว่า FORM เพื่อทำตารางที่จะเรียกข้อมูลจากตารางที่ทำไว้ใน Sheet DATA ให้มาแสดง ก็จะมีหน้าตาแบบนี้ จะมีรหัส ว่า ใส่รหัสนี้ แล้ว ชื่อ และ รูปภาพ ที่เก็บไว้ใน Sheet DATA จะโผล่มา ตามประสาการทำ lookup

ในเรื่องการเรียก “ชื่อ” มาแสดง คงไม่ยาก ใช้การทำ vlookup ธรรมดา จะเขียนสูตรดังนี้

=VLOOKUP(C1,DATA!A2:C5,3,FALSE) 

หากยังไม่เข้าใจว่าการ lookup ทำได้อย่างไร ขอเชิญท่านย้อนกลับไปอ่านเรื่อง vlookup ที่เคยเขียนไปแล้ว หรือ ใครใช้ Excel รุ่นล่าสุด (2019) จะเปลี่ยนไปเป็น xlookup ก็ได้เหมือนกัน เอาที่ชอบเลยจ้ะ

ทำ lookup เรียกข้อมูลรูปภาพ

ที่จะมีปัญหาก็คือการ lookup ภาพออกมาไม่ได้ ถ้าทำ lookup ที่อ ๆ แบบทั่วไป จะขึ้น #N/A เป็นการบอกว่า เฮ้ย มีอะไรผิดกับสูตรที่ท่านเขียนแล้วล่ะ

สาเหตุก็คือ มันไม่สามารถแสดงรูปภาพได้จาก vlookup ดังนั้นเราต้องมีทริกในการสร้างจุดเรียกมันใหม่ ซึ่งก็คือการใช้ indirect ที่เคยเขียนถึงไปแล้ว

ระบุตำแหน่งที่เก็บรูป

อย่างแรก ต้องตั้งชื่อตำแหน่งเก็บรูป ตามรหัสที่อยู่ในคอลัมน์ A  เพื่อใช้อ้างอิง โดย คลิกเลือก cell ที่มีชื่อรหัสและรูปภาพทั้งหมด ไปที่เมนู Excel – > Formulas – > คลิก Create from selection มีหน้าต่างขึ้นมา ให้เลือก left column – > คลิก OK

เลือกแค่คอลัมน์ รหัส กับ รูป ก็พอนะ

ในที่นี้เลือก left column เพราะใช้ชื่อ รหัส อยู่คอลัมน์ทางซ้าย ตรงนี้ จะทำให้ cell ในคอลัมน์ B มีชื่อเป็น cell ในคอลัมน์ A (หรือ รูปภาพ จะมีชื่ออ้างอิงตาม รหัส) เป็นการตั้งชื่อ ให้กับ cell ที่เก็บรูปทุกรูป คลิกที่ Cell ที่เก็บรูป คลิก Formulas – > define name ซึ่งมันจะขึ้นชื่อมาให้อัตโนมัติ ทุก cell จนหมด

TIPS: โปรดสังเกต เวลา define name ถ้าต้องการเอาไปเฉพาะรูป อย่างในตัวอย่าง เลือก เฉพาะ คอลัมน์ รหัส กับ คอลัมน์ รูปภาพเท่านั้น ถ้าเราเลือกถึงคอลัมน์ชื่อ หากเป็น Excel เวอร์ชัน 2019 เป็นต้นไป มันจะจัดการกับอาร์เรย์ได้ เวลามันแสดงผล ในขั้นตอนต่อไป มันจะแสดงชื่ออยู่ใน Cell ถัดไป (เดี๋ยวจะแสดงตัวอย่างให้ดู)

ขั้นตอนต่อไป จะเป็นการใส่สูตรอ้างอิง สำหรับ lookup ให้ไปที่ Formulas – > Name Manager – > คลิก New แล้วตั้งชื่อว่าอะไรก็ได้ (ในที่นี้ตั้งชื่อว่า photo ละกัน ง่ายดี)

ช่อง Refer to ให้ สร้างสูตร  =INDIRECT(ใส่ชื่อ Cell ที่จะให้รูปแสดง) ซึ่งตามตัวอย่างจะเป็น =INDIRECT(Form!$C$1) เสร็จแล้วก็คลิก OK

ขั้นตอนสุดท้าย เอารูปไปวางที่ cell ที่ต้องการให้แสดงผล (ในตัวอย่างคือ C1 ใน Sheet Form) คลิกที่รูปให้ Active แล้วพิมพ์ = photo (ชื่อที่ตั้งไว้ตั้งแต่แรก) ใน formular bar

เท่านี้เรียบร้อย ลองเปลี่ยนตรง รหัส จะเห็นว่าข้อมูลที่ lookup จะมาหมดทั้ง ชื่อ และ รูปภาพ

TIP:

คงจะเห็นปัญหาของวิธีนี้กันแล้วใช่มั้ย?

การอ้างอิงแบบนี้ในทางปฎิบัติไม่สะดวกเท่าไหร่ ต้องอ้างอิง Cell ที่เก็บรูปแต่ละรูปในตารางข้อมูล เพื่อเอามาแสดงใน form ซึ่งวิธีนี้ออกจะยุ่งยากและเสียเวลา แต่ก็มีข้อดี (ตามที่ มิตรสหายท่านหนึ่ง บอก) คือ ได้เห็นว่ารูปตรงกับข้อมูลที่ต้องการหรือเปล่า ในตาราง Data แต่ก็ขอเสนอทางเลือก ใช้ VBA เขียนเรียกชื่อไฟล์ภาพที่ต้องการมาใส่ ซึ่งจะเขียนถึงในโอกาสต่อไป

ความคิดเห็นของคุณ :)

%d bloggers like this: