ตามปกติสูตรลิงก์ดึงค่าจากเซลล์ A1 มาใช้ เราจะสร้างสูตร =A1 ซึ่งเป็นการลิงก์ค่ามาใช้โดยตรง แต่ยังมีอีกวิธีหนึ่งที่จะลิงก์ค่าจากเซลล์ A1 มาใช้โดยสร้างสูตร =Indirect(“A1”) ซึ่งดูผาดๆก็นึกว่าไม่เห็นจะดีกว่าสูตร =A1 แต่ถ้าปรับสูตรเสียใหม่เป็น =Indirect(B1) แล้วกรอกข้อความคำว่า A1 ลงไปในเซลล์ B1 จะทำให้สูตร Indirect แบบหลังนี้อ้อมไปอ่านค่าจากเซลล์ B1 ว่ามีคำว่า A1 แล้วจึงดึงค่าในเซลล์ A1 มาให้

ประโยชน์ของสูตร Indirect จะเกิดขึ้นทันทีเมื่อเปลี่ยนข้อความในเซลล์ B1 เป็นตำแหน่งเซลล์จากชีทหรืออื่นแฟ้มอื่น เช่น ถ้าเป็นคำว่า Sheet2!A1 ก็จะลิงก์ข้อมูลมาจากชีทชื่อ Sheet2 เซลล์ A1 หรือถ้าเป็นคำว่า [FileA.xlsb]Sheet1!A1 ก็จะลิงก์ข้อมูลมาจากแฟ้มชื่อ FileA.xlsb ชีทชื่อ Sheet1 เซลล์ A1 มาให้ จากนั้นพอปรับแก้ข้อความที่บอกถึงชื่อแฟ้มชื่อชีทและตำแหน่งเซลล์เป็นอย่างอื่น สูตร Indirect ก็จะลิงก์ข้อมูลจากตำแหน่งเซลล์นั้นๆให้ทันที

นอกจากการลิงก์แบบเซลล์เดียว สูตร Indirect ยังสามารถใช้กับการอ้างอิงตำแหน่งเซลล์ที่เป็นตารางได้ด้วย เช่น ถ้า B1 มีคำว่า A1:A10 จะทำให้สูตร =Sum(Indirect(B1)) หายอดรวมเสมือนสร้างสูตร =Sum(A1:A10) ได้เลยทีดียว

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

โครงสร้างสูตร Indirect

=Indirect(“Text ที่บอกตำแหน่ง”)
หรือ
=Indirect(Cell) แล้วกรอก Text ที่บอกตำแหน่ง ลงไปใน Cell ที่อ้างถึงในวงเล็บ

INDIRECT – Excel’s Most Evil Function

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

  1. Indirect เป็นสูตรประเภท Volatile ทำให้แฟ้มคำนวณช้าลงเพราะสูตร Indirect จะถูกกระตุ้นให้คำนวณใหม่เองเสมอเมื่อมีการเปลี่ยนแปลงใดๆในแฟ้มนั้น แค่กรอกค่าลงไปในเซลล์ใดๆที่ไม่ได้ผูกลิงก์เกี่ยวข้องกันก็จะทำให้สูตร Indirect ทำงานใหม่เสมอ แค่เปิดแฟ้มขึ้นมาแล้วสั่งปิดแฟ้มโดยยังไม่ได้แก้ไขหรือกรอกค่าอะไร ก็จะถูกถามบนจอแล้วว่า Do you want to save the changes you made...?
    (สูตรประเภท Volatile ได้แก่ RAND(), NOW(), TODAY(), OFFSET(), CELL(), INDIRECT(), INFO() ซึ่งเป็นสูตรที่ควรใช้ให้น้อยที่สุดและใช้ต่อเมื่อจำเป็นจริงๆเท่านั้น)
  2. Indirect เป็นสูตรที่จะไม่ปรับตำแหน่งเซลล์ที่อ้างอิงไว้โดยอัตโนมัติเมื่อมีการโยกย้ายตำแหน่งเซลล์หรือเปลี่ยนชื่อชีทชื่อแฟ้ม เนื่องจาก Indirect ใช้ Text ที่บอกตำแหน่งแทนการอ้างอิงกับตำแหน่งเซลล์โดยตรง ดังนั้นหากผู้ใช้แฟ้มลืมแก้ข้อความที่เป็น Text ที่บอกตำแหน่งตามการเปลี่ยนแปลงเหล่านั้นก็จะทำให้ Indirect ลิงก์ข้อมูลผิดพลาดทันที (อีกนัยหนึ่งแฟ้มที่ใช้สูตร Indirect ต้องเป็นแฟ้มที่ตายตัวไม่มีการเปลี่ยนแปลงใดๆที่จะกระทบกับการอ้างอิงถึงตำแน่งเซลล์อีกต่อไป เว้นแต่จะใช้ Range Name ช่วยในการอ้างอิงแทน)
  3. Indirect จะคืนค่าเป็น Error #REF! หากกำหนดข้อความที่บ่งบอกถึงตำแหน่งเซลล์แต่เป็นตำแหน่งที่ Excel ไม่รู้จักหรือไม่มีตัวตน ซึ่ง #REF! เป็น Error ที่ยากและเสียเวลาในการตรวจสอบมากที่สุดว่าเกิดจากเหตุใด
  4. Indirect เป็นสูตรที่ตรวจสอบความถูกต้องได้ยากที่สุดเนื่องจากไม่สามารถใช้คำสั่งบนเมนูเพื่อ Trace หาที่มาว่าผลลัพธ์ที่คำนวณได้นั้นมีที่มาจากเซลล์ตำแหน่งใดได้โดยตรง แต่มนุษย์ต้องนำ Text ที่บอกตำแหน่งมาต่อกันเองก่อนจึงจะรู้ที่มา เช่น สูตร
    =IFERROR(IFNA(INDEX(INDIRECT("'"&H$3&"'!"&H$4&":"&H$4),MATCH(INDIRECT("$"&H$5&ROW()),INDIRECT("'"&H$3&"'!"&H$6&":"&H$6),)),ERROR),"")
    ต้องนำข้อมูลจากเซลล์ H3, H4, H5, H6 มาต่อกันก่อนจึงจะรู้เรื่องว่าหมายถึงตำแหน่งเซลล์ใด

ทางออกที่ดีกว่าการใช้สูตร Indirect คือ แทนที่จะอ้างอิงถึงข้อความที่เป็นตำแหน่งเซลล์แบบ Reference A1 ให้อ้างอิงกับชื่อ Range Name แทนหรือเปลี่ยนไปใช้สูตร Choose หรือ Index แทน

ไม่ผิดหรอกใช่ไหมที่จะกล่าวว่า Indirect เป็นสูตรที่เป็นยาพิษที่ไร้รส ไร้สี ไร้กลิ่น ไร้เงา ใครก็ตามที่ชอบใช้สูตรนี้ ระวังว่าจะไม่ได้เป็นพิษกับตัวเองแต่ยังพาลทำให้ผู้ใช้แฟ้มนั้นโดนพิษตามไปด้วย

ก่อนที่คุณจะถูกวางยาพิษรายต่อไป ถ้ายังไม่เชื่อก็ลองค้นหาจาก Google ดูว่ามีคนโดนยาพิษนี้ไปแล้วมากมายแค่ไหน โดยเฉพาะจากเว็บนี้
https://fastexcel.wordpress.com/2016/04/25/indirect-excels-most-evil-function/

 

 

 

Author: สมเกียรติ ฟุ้งเกียรติEmail: This email address is being protected from spambots. You need JavaScript enabled to view it.

E-Learning

Go to top