ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

หมายเหตุ: หากชื่อชีตมีการเว้นวรรคหรือใช้สัญลักษณ์อื่นที่ไม่ใช่ตัวเลขหรือตัวอักษร ให้ใส่เครื่องหมายคำพูดเดี่ยวล้อมรอบชื่อ (ดังเช่นในตัวอย่างที่ 2)

ดึงข้อมูลจากสเปรดชีตอื่น

สําคัญ: หากต้องการอ้างอิงเซลล์หรือช่วงของเซลล์ในสเปรดชีตอื่น คุณต้องใช้ฟังก์ชัน IMPORTRANGE 

หากต้องการดึงข้อมูลจากสเปรดชีตอื่นๆ ให้เปิด https://docs.google.com/spreadsheets/ จากคอมพิวเตอร์และใช้ฟังก์ชัน IMPORTRANGE

ผมเองก็ได้นำเสนอข้อมูลเกี่ยวกับ Power Query มาเยอะพอสมควรว่ามันสามารถรวบรวมข้อมูลจากหลายแหล่ง และยังสามารถดัดแปลงหน้าตาข้อมูลให้อยู่ในรูปแบบที่เหมาะสมมากขึ้นได้

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

การดึงข้อมูลจาก Excel นั้นจริงๆ มีหลากหลายรูปแบบ มีความซับซ้อนหลายระดับ (แบบยากสุดจริงๆ จะรองรับแบบสถานการณ์แบบง่ายสุดได้ด้วยครับ)

สารบัญ

  • ดึงข้อมูลจาก Excel 1 ไฟล์
    • ต้องการแค่ 1 Table จาก Excel 1 ไฟล์
    • Excel 1 ไฟล์ 1 Sheet
    • Excel 1 ไฟล์ หลาย Table/หลาย Sheet
  • รวม Excelหลายไฟล์ใน Folder
    • รวม Excel หลายไฟล์ใน Folder แต่ละไฟล์มี Table ที่ต้องการชื่อเดียวกันเป๊ะ
    • รวม Excel หลายไฟล์ใน Folder แต่ละไฟล์มี Table/Sheet ที่ต้องการเอามารวมกันหลายชื่อ (แต่ให้รวมเป็น Query เดียว)
  • สรุป สิ่งที่อยากบอกทุกท่าน

ดึงข้อมูลจาก Excel 1 ไฟล์

ต้องการแค่ 1 Table จาก Excel 1 ไฟล์

การดึงข้อมูลจาก Table เดียวจากไฟล์ Excel ที่ต้องการนั้นง่ายที่สุดเลย นั่นก็คือ กด Get Data -> From File -> From Workbook แล้วเลือกไฟล์ Excel ที่ต้องการ และเลือก Table ที่ต้องการจากหน้าต่างด้านซ้ายมือ (สังเกตว่าสัญลักษณ์ของ Table กับ Sheet ไม่เหมือนกันนะ)

ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

Tips : การดึงข้อมูลจาก Table จะดีตรงที่ Power Query จะรู้จักหัวตารางโดยอัตโนมัติ เราจึงไม่ต้องมาปวดหัวกับเรื่องการจัดการหัวตารางเลย และหากบริเวณอื่นใน Sheet มีข้อมูลปนอยู่ ก็ไม่เป็นไรด้วย เพราะมันอ้างอิงข้อมูลจาก Table ที่เลือกเท่านั้น

Excel 1 ไฟล์ 1 Sheet

วิธีนี้เราก็เลือก Get Data -> From File -> From Workbook แล้วเลือกไฟล์ Excel ที่ต้องการ และเลือก Sheet ที่ต้องการจากหน้าต่างด้านซ้ายมือ

การที่เราดึงข้อมูลที่เป็น Sheet (ไม่ได้เป็น Table) จะทำให้ Power Query อาจระบุหัวตารางไม่ถูกต้อง โดยมันจะดึงข้อมูลบรรทัดบนสุดที่ใช้งานมา แล้วพยายาม Promote Header ให้โดยอัตโนมัติ โดยถ้าช่องเป็นช่องว่างมันจะออกมาเป็นคำว่า Column1, Column2,…. ไปเรื่อยๆ ก่อน โดยจะดึงข้อมูลจนถึงช่องสุดท้ายที่มีการใช้งานใน Sheet นั้น

นั่นคือถ้าข้อมูลบรรทัดแรกเป็นหัวตารางพอดี Power Query จะมีการ Promote Header ให้เองเลย นั่นแปลว่าถ้าข้อมูลใน Sheet มีแค่ข้อมูลที่เราต้องการตั้งแต่บรรทัดแรก ก็จะไม่มีปัญหาอะไรเลย

ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

ในทางกลับกัน หากว่าใน Sheet บรรทัดบนสุดไม่ใช่หัวตาราง แต่มีข้อมูลอื่นอยู่ดังนี้

ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

ข้อมูลที่ดึงมาก็จะเน่ามาก เราก็ควรจะต้องหาทางกด Remove Top Row (เช่น เอาบรรทัดบนออก 3 บรรทัดได้) แล้วค่อยกด Use First Row as Header อีกที

ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

และหากช่องสุดท้ายที่ใช้งานของ sheet นั้นดันไม่ใช่ข้อมูลที่อยากได้อีก เช่น

ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

เราก็ต้องหาทางตัด Column, Row ที่ไม่ใช้ออก ซึ่งอาจต้องหาทาง Filter ด้วยเงื่อนไขที่เหมาะสมเป็นต้น (ซึ่งบางทีมันก็ยุ่งยากมากๆ เลย)

ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

ดังนั้นถ้าจะดึงข้อมูลจาก Sheet ถ้าให้ง่าย ใน Sheet นั้นก็ควรมีแต่ข้อมูลที่อยากได้ ไม่ต้องมีอย่างอื่นปนมา มันก็จะง่ายที่สุดครับ (ถ้าจะมีข้อมูลปน ทำเป็น Table ง่ายกว่าเยอะ)

Excel 1 ไฟล์ หลาย Table/หลาย Sheet

ให้เราสั่ง Get Data จาก Excel 1 ไฟล์ตามปกติ ซึ่ง กรณีที่ใน Excel 1 ไฟล์ มีหลาย Table นั้นจริงๆ ก็สามารถจัดการได้ 2 แบบ คือ

  1. Table/Sheet แต่ละอันไม่ใช่ข้อมูลแบบเดียวกัน ดังนั้นเราก็ควรเอาไว้แยกคนละ Query กัน
  2. Table/Sheet แต่ละอันคือข้อมูลแบบเดียวกัน ดังนั้นเราควรเอามาต่อรวมใน Query เดียวกัน

เรามาดูกรณีแรกกันก่อน ถ้าแบบนั้นคือให้เราติ๊กเลือก Multiple Items ก่อน จากนั้นค่อย Table/Sheet ที่ต้องการ

ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

พอกด Transform ปุ๊ป มันจะดึงแต่ละ Table/Sheet มาแยกเป็นคนละ Query กันเลย (สังเกตที่ list ของ query ที่อยู่ด้านซ้ายมือ)

ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

แต่ถ้าเป็นกรณีที่สอง (ซึ่งคงเป็นแบบที่หลายคนอยากรู้) ให้เรากดเลือกที่ตัวไฟล์หลักเลย (อย่าเลือกแต่ละ table/ แต่ละ sheet) เพื่อให้มันอ่านข้อมูลทั้งไฟล์มาว่ามี Table และ Sheet อะไรบ้าง

ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

สมมติว่าเราอยากได้เฉพาะ Table เท่านั้น ตรง Kind ก็ให้ Filter ให้เหลือแค่ Table ถ้าเราจะเอาเฉพาะ Sheet ก็ให้ Filter เหลือแค่ Sheet

ซึ่งถ้าอยากเจาะจงชื่อ Table หรือชื่อ Sheet ก็ไป Filter ตรง Name เพิ่มได้ ว่าจะให้ขึ้นด้วยคำว่าอะไร หรือมีคำอะไรอยู่?

ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

พอเลือกสิ่งที่ต้องการได้ ก็สามารถกด Expand ข้อมูลตรงคอลัมน์ Data ออกมาได้เลย

ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

ถ้าข้อมูลเป็น Table ก็จะไม่มีปัญหาเรื่องหัวตาราง (จะจบเลย) ถ้าข้อมูลเป็น Sheet ก็จะต้องหาทางกำจัดหัวตารางที่ขึ้นมาซ้ำๆ อีกที

ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

รวม Excelหลายไฟล์ใน Folder

รวม Excel หลายไฟล์ใน Folder แต่ละไฟล์มี Table ที่ต้องการชื่อเดียวกันเป๊ะ

แบบนี้ก็จะจัดการค่อนข้างง่ายกว่าที่หลายคนคาดคิด นั่นคือแค่กด Get Data from File -> From Folder แล้วเลือก Folder ที่ต้องการ จากนั้นกด Transform Data ก่อน

จากนั้นก็กด Expand ที่คอลัมน์ Content ได้เลย

ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

จากนั้นมันจะอ่านข้อมูลจากไฟล์ sample ที่เลือก (ปกติจะเลือกไฟล์แรก) ว่ามีอะไรบ้าง? ให้เราก็เลือก Table ที่ต้องการ (เช่น เราต้องการ Table ชื่อว่า SalesTableจาก Excel ทุกไฟล์)

ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

มันจะเอาข้อมูลจาก Table ใน Excel แต่ะไฟล์มารวมกันให้โดยอัตโนมัติเลย

ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

Tips: หากเราต้องการจะดัดแปลงไฟล์ก่อนจะเอามา Combine ด้วยการ Append ให้ไปทำการแก้ไขที่ Transform Sample File ก่อนครับ (เช่น พยายามทำให้คอลัมน์เหมือนๆ กัน)

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

รวม Excel หลายไฟล์ใน Folder แต่ละไฟล์มี Table/Sheet ที่ต้องการเอามารวมกันหลายชื่อ (แต่ให้รวมเป็น Query เดียว)

แบบนี้ให้กด Get File from Folder แล้วกด Transform ตามปกติ (ถ้ามีไฟล์อื่นปนมาก็ Filter ทิ้งออกไปได้) แล้วก็กด Expand ที่ Content

ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

เนื่องจากเราต้องการข้อมูลหลาย Table ให้เลือกที่ Folder แทนที่จะเลือกที่ Table แต่ละอัน แบบนี้มันจะ List ทั้ง Table/Sheet ที่มีออกมาทั้งหมด

ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

หน้าที่ของเราแค่ Filter เลือกให้เหลือเฉพาะสิ่งที่เราต้องการเอามารวมกัน เช่น Filter Kind เป็น Table ส่วน Name ก็อาจจะ Filter เฉพาะชื่อที่มีคำที่ต้องการ

ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

จากนั้นค่อยกด Expand ข้อมูลที่คอลัมน์ Data ออกมาอีกที

ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

ข้อมูลจากทุก Table ในทุกไฟล์ใน Folder ก็จะถูกนำมาต่อกันทั้งหมดทันที (ถ้ามีข้อมูลซ้ำ สามารถสั่ง Remove Duplicates อีกทีได้)

ดึงข้อมูลข้าม sheet แบบมีเงื่อนไข

สรุป สิ่งที่อยากบอกทุกท่าน

เพื่อนๆ คงเห็นว่า กรณีถ้าข้อมูลต้นทางเป็น Table จะทำให้การรวมข้อมูลง่ายขึ้นมาก… ดังนั้น ถ้าทำเป็น Table ได้ก็ทำเถอะครับ ^^