Indirect

Indirect เป็นฟังก์ชันสำหรับอ้างอิงข้อมูลที่อยู่ใน Cell การทำงานของมันก็เหมือนชื่อฟังก์ชัน คือ “อ้อม ๆ” ใช้เพื่อเปลี่ยนเส้นทางการแสดงผลข้อมูล

ลองดูคำอธิบายการใช้ฟังก์ชันนี้ในเว็บของไมโครซอฟต์ก่อนละกัน แต่ถ้าไม่อยากอ่านภาษาอังกฤษ เดี๋ยวจะอธิบายเพิ่มเติมเป็นภาษาไทยให้อย่างนี้ก็แล้วกัน

การใช้ Indirect

ลองดูตัวอย่างแรก

ที่ Cell D2 ซึ่งทำไฮไลต์สีเหลืองเด่นนั้น ถ้า เราใส่ฟังก์ชัน

=INDIRECT(A1)

วิธีการทำงานของฟังก์ชันก็คือ จะไปดูที่ Cell A1 ตามที่ระบุในสูตร ซึ่งใน Cell A1 นั้น เราใส่ข้อมูลว่า B3 เจ้าฟังก์ชันนี้ก็จะทำหน้าที่ตามชื่อคือ อ้อมไปดูที่ Cell B3 ซึ่งใน Cell B3 นั้นเราใส่ค่าไว้ว่า Hi Baby

ดังนั้น ที่ Cell D2 จึงแสดงค่าว่า Hi Baby เพราะโดนเปลี่ยนเส้นทางมาด้วยค่าที่ระบุใน Cell A1

ลองดูอีกตัวอย่างหนึ่ง

Indirect

ที่ Cell D2 ซึ่งทำไฮไลต์สีเหลืองเด่น (Cell เดิมนั่นแหละ) เราเปลี่ยนค่าในสูตรเล็กน้อย

=INDIRECT("B"&A7)

Cell A7 จะเก็บค่า 2 เอาไว้ เมื่อเอามาเชื่อมข้อความรวมกัน “B”&A7 ก็จะได้เป็นค่า B7 ตัวฟังก์ชันก็จะแสดงค่าที่อยู่ใน Cell B7 นั่นก็คือ 456

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

=INDIRECT(A2,FALSE)
Indirect

การใส่ค่า FALSE เป็นการระบุการอ้างอิงตำแหน่ง Cell ในแบบ R1C1 ถ้าใส่ TRUE หรือว่าไม่ใส่เลย จะเป็นการอ้างอิงแบบ A1 ซึ่งเราจะคุ้นกว่า ซึ่งในกรณีนี้ เราใส่ค่า R4C2 ใน Cell A2 จึงแสดงค่าของ cell ที่ แถว 4 คอลัมน์ 2 นั่นก็คือ 69

แต่ถ้าในสูตรไม่ได้ใส่ False กำกับไว้ ผลที่ออกมาจะเป็น #REF! หรืออ้างอิงผิดพลาด

น่าจะพอเป็นไอเดียถึงการทำงานของฟังก์ชันนี้กันได้บ้าง

ประโยชน์สำคัญของ indirect ที่สำคัญเป็นเรื่องการช่วยอ้างอิงตำแหน่ง ซึ่งประยุกต์ใช้ได้หลากหลาย (โปรดอ่านเรื่องการอ้างอิงตำแหน่ง ประกอบ)

 ยกสักอีกตัวอย่างการทำงานร่วมกับการตั้งชื่อให้กับ Cell ในตัวอย่างนี้ได้ตั้งชื่อ Cell B1 ไว้เป็นพิเศษว่า SheepHi  แล้วลองมาปรับสูตรใน D2 ให้เป็นแบบนี้

=INDIRECT(A4)

ในที่นี้ A4 เก็บข้อมูลว่า SheepHi ซึ่งเป็นชื่อที่ตั้งไว้พอดี ฟังก์ชันก็จะเปลี่ยนเส้นทางการแสดงค่าไปยัง Cell ที่ได้ตั้งชื่อว่า SheepHi ทำให้ได้ผลลัพธ์เป็น 999 แต่ถ้าตรงนี้ไม่ได้เป็นชื่อที่ตั้งไว้ มันจะขึ้น #REF! ซึ่งหมายถึงอ้างอิงตำแหน่งผิดพลาด

ลองมาดูการใช้งานอีกตัว

สมมติว่าเราจะคำนวณข้อมูลสั้น ๆ โดยใช้ข้อมูลจากไฟล์อื่น เช่น จะนำสรุปของแต่ละสาขา ซึ่งเก็บไว้เป็นไฟล์แต่ละปีและแยกชีตเป็นเดือน โดยมีรายละเอียดของเงินเดือนของแต่ละคน ค่าล่วงเวลา เราอยากสรุปข้อมูลมาแสดงในอีกชีตหนึ่ง หน้าตาแบบนี้ (ขอให้สังเกตการณ์อ้างอิงตำแหน่ง Cell)

คงจะเห็นแล้วว่า การอ้างอิงจะเต็มรูปแบบคือ

='D:\A\[2020.xlsx]Jan'!$B$3

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

Indirect
="'D:\"&B2&"\["&C2&".xlsx]"&D2&"'!"&"$B$3"

เอ้า ทำไมไม่ได้? เช็คแล้วมันก็ออกมาเป็น =’D:\A\[2020.xlsx]Jan’!$B$3 อย่างที่เราใช้อ้างอิงเลย แต่ผลกลับเป็นแค่ตัวอักษร แต่ไม่ลิงก์ข้อมูลเข้ามา หรือว่าเราใช้ลิงก์อ้างอิงผิด ลองย้อนตรวจสอบไวยากรณ์การอ้างอิงตำแหน่งที่ต้องอยู่ในรูป

=‘ไดร์ฟตำแหน่งที่ตั้งไฟล์ \[ชื่อไฟล์]ชื่อชีต‘!ตำแหน่ง Cell หรือ ชื่อ Cell

(เวลาผิด มักจะผิดที่การใช้เชื่อมด้วย “” (เครื่องหมายคำพูด) หรือ ‘ ฝนทอง และอย่าลืมว่าชื่อไฟล์ จะต้องมี [ ] ครอบไว้ และก่อนหน้าชื่อชี้จะมี ! ขวางอยู่)

แต่ตรวจไวยากรแล้วก็ถูกนะ แต่ว่าไม่ไป  

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

ตรงนี้แหละที่เราจะใช้ indirect เข้ามาครอบ

นี่คือเหตุผลว่าทำไมจึงต้องใช้ indirect ซึ่งเป็นการอ้างตำแหน่งแบบอ้อม ๆ

จากในภาพเป็นตัวอย่างในการคำนวณ Bonus โดยใช้ Indirect เพื่อเชื่อมโยงไปยัง Name ที่ชื่อว่า Management, Senior, Jounior และ GradeA, GradeB, GradeC เป็นต้น และใช้เครื่องหมาย เว้นวรรค เพื่อหา Intersection ของข้อมูลดังกล่าว

เช่น =Management GradeA คือการหาจุดตัดระหว่าง Row Managment และ Column GradeA ซึ่งจะได้ผลลัพธ์ว่า 2 แต่ในสูตรที่แสดงจะต้องใช้ว่า =INDIRECT(C10) INDIRECT(E10) เพื่อที่จะอ้างอิงหาค่า Bonus ได้ (แต่จำเป็นจะต้อง Define Name ก่อนนะจ๊ะ ลองอ่านเรื่องการอ้างอิงตำแหน่งเพิ่มเติม กรณีที่ยังไม่รู้จะตั้งชื่อช่วงหรือตำแหน่งอย่างไร)

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

%d bloggers like this: