ดึงข้อมูลข้าม Spreadsheet ด้วย =IMPORTRANGE() ใน Google Sheets

Cover image

หาก Google Sheets ของคุณมีข้อมูลแยกกันอยู่หลายไฟล์ เราสามารถเรียกข้อมูลจาก Spreadsheet ไฟล์นึงไปยังอีกไฟล์นึงได้ด้วย =IMPORTRANGE()

=IMPORTRANGE()

คือคำสั่งเดียวที่จะทำให้คุณสามารถเรียกเอาไฟล์จาก Google Sheets ของใครก็ได้(ถ้าเขาอนุญาต) มาใช้งานบน Spreadsheet ของคุณ โดยหน้าตาของคำสั่งเต็มๆก็จะเป็นอย่างนี้ครับ

=IMPORTRANGE("SPREADSHEET URL", "Range ของข้อมูลที่อยากได้ เช่น Sheet1!A1:C10")

จบแล้วครับ

ตัวอย่าง(กลัวไม่เห็นภาพ)

สมมติว่าผมมี Spreadsheet ชื่อ "ลูกค้า" เอาไว้เก็บลูกค้าแยกแบบนี้นะครับ

ตัวอย่าง Spreadsheet ลูกค้า

แล้วผมก็มีอีก Spreadsheet นึงชื่อ "รายการขาย" เป็นคนละไฟล์กัน แต่ผมอยากเอารายชื่อลูกค้ามาแปะไว้ที่นี่ด้วย แต่ผมไม่อยาก copy & paste รายชื่อลูกค้าใหม่ทุกครั้งที่มีการแก้ไข ผมจึงเลือกใช้ =IMPORTRANGE() เพื่อความสะดวก ใช้แค่คำสั่งเดียวจะแก้กี่ครั้งข้อมูลก็ update ตามเอง ว่าแล้วผมก็พิมพ์สูตร

=IMPORTRANGE(
    "https://docs.google.com/spreadsheets/d/1A0J9ofsjn2ThsAENGH4HgR_CB_xTBkSradYhlUOTEp4",
    "Sheet1!A1:B"
)
  • URL ที่ผมใส่ลงไปนั้นก็คือ URL ของ Spreadsheet ที่ชื่อว่า "ลูกค้า" นั่นเองครับ
  • ส่วน Sheet1!A1:B ก็คือ range ที่ผมต้องการเอามาแสดงครับ Sheet1 เอา column A ถึง B มาทุก row เลย

ขออนุญาตเข้าถึงไฟล์ลูกค้่า

Google Sheets จะมีหน้าต่างเล็กๆมาบอกเราว่าต้องอนุญาตการเข้าถึงก่อนนะ ก็ไม่มีอะไรครับถ้าเราสร้างเองทั้งหมดอยู่แล้วก็ Allow access ไปเลย ถ้าเป็นของคนอื่นก็ต้องรอเจ้าของเขาอนุญาตก่อน พอเรียบร้อยแล้วก็จะได้ข้อมูลมาปรากฏตรงหน้าแบบนี้เลยครับ ง่ายๆแค่นี้แหละ (ที่เห็นมาแค่ 2 column ไม่ได้ผิดนะครับ อย่าลืมนะว่าผมขอมาแค่ A กับ B)

เรียกไฟล์ลูกค้่าได้แล้ว

ไหนลองกลับมาสร้าง Named range ที่ spreadsheet "ลูกค้า" ดูบ้างซิ ไม่อยากพิมพ์ Sheet1!A1:D มันยาว ก็ไปที่เมนู Data > Named ranges

สร้าง Named range 1

ตั้งชื่อเป็น Customer แทนแล้วกันนะครับ

สร้าง Named range 2

กลับมาที่ spreadsheet "รายการขาย" บ้าง คราวนี้ผมจะเปลี่ยน range ท้ายสูตรจาก Sheet1!A1:B เป็น Customer แทนบ้าง ผลที่ออกมาก็ตรงตามคาดครับ มาครบตั้งแต่ column A ถึง D เลย แปลว่าเราสามารถใช้ Named range กับสูตรนี้ได้ด้วยนะ

เปลี่ยน range ในสูตรให้กลายเป็น named range

แล้วถ้าเกิดเอามาใช้กับ =QUERY() จะเป็นยังไง ผมก็สร้าง sheet ใหม่แล้วพิมพ์สูตรลงไปเลย

=QUERY(
    IMPORTRANGE("https://docs.google.com/spreadsheets/d/1A0J9ofsjn2ThsAENGH4HgR_CB_xTBkSradYhlUOTEp4","Customer"),
    "where Col1 = 'C0001'"
)

สังเกตนะครับว่า เงื่อนไขใน =QUERY() ของผมวันนี้ดูแปลกไป ไม่เหมือนเมื่อก่อนเวลาเราเรียก column เราจะใช้ตัวอักษร A, B, C, ... ใช่ไหมครับ แต่เมื่อไหร่ก็ตามที่เราเรียกข้อมูลมาตาม =IMPORTRANGE() เราต้องเปลี่ยนเป็น Col1, Col2, Col3, ... แทนนะครับ ในคำสั่งนี้ผมบอกว่า "จงดึงเอาข้อมูลทุก column มาถ้า Col1 มีค่าเท่ากับ C0001" ถ้าย้อนกลับไปดู A หรือ Col1 นั่นก็คือ "หมายเลข" ของรายชื่อลูกค้านั่นเองครับ

ใช้งาน Importrange กับ Query

ถึงผลลัพธ์จะสวยงามแต่สูตรมันช่างยืดยาวน่าเกลียดน่ากลัวเหลือเกิน เพราะ URL กินที่ไปหมด เพื่อความสวยงามเราสามารถสร้าง sheet ใหม่ขึ้นมาเก็บ URL ของแต่ละ spreadsheet ที่เราจะดึงข้อมูลมาก็ได้นะครับ

สร้าง sheet เก็บ url

เพื่อให้สั้นลงไปอีกผมก็สร้าง Named range ของ URL ด้วยเลย ในภาพจะเห็นว่าผมสร้าง CustomerUrl กับ PartnerUrl

สร้าง name range ของ url

ลองกลับมาแก้สูตรที่ยาวน่าเกลียดน่ากลัวให้สั้นลงด้วย Named range ดูสิครับ ดูสะอาดตาคือเยอะเลย

ของเก่า

=QUERY(
    IMPORTRANGE("https://docs.google.com/spreadsheets/d/1A0J9ofsjn2ThsAENGH4HgR_CB_xTBkSradYhlUOTEp4","Customer"),
    "where Col1 = 'C001'"
)

แก้ใหม่ให้สั้นลง

=QUERY(
    IMPORTRANGE(CustomerUrl,"Customer"),
    "where Col1 = 'C001'"
)

เรียกไฟล์ลูกค้่าได้แล้ว

นอกจาก =QUERY() แล้วเรายังสามารถใช้ได้กับทุกสูตรที่ต้องการรับ range นะครับ เช่น =VLOOKUP(), =HLOOKUP(), =FILTER(), =MATCH() และอีกหลายๆตัวเลย ต่อไปนี้เราไม่จำเป็นต้องรวมทุกอย่างใน Spreadsheet เดียวให้รู้สึกเทอะทะแล้วนะครับ การแยกข้อมูลเป็นหลายๆส่วนอาจจะช่วยให้การจัดการง่ายขึ้นได้นะครับ ลองนึกภาพ Spreadsheet ที่มีอยู่ 50-60 sheets คงต้องเลื่อนหากันตาลายแน่นอนครับ

บทความใกล้เคียง