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

ผมยกตัวอย่างง่ายๆ เช่น ถ้าหากคุณไม่รู้จักชื่อคนในห้องสัมมนา คุณอาจต้องอ้างอิงถึงคนคนนั้นด้วยพิกัด เช่น “เฮ้ย คนที่นั่งเก้าอี้ทางซ้ายสุดของแถวหลังสุดน่ะ” ตรงนี้คล้ายๆ กับการใช้การอ้างอิงด้วยตำแหน่ง อย่าง  A1, B3 ที่ผมได้อธิบายไปแล้วนั่นเอง

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

กลับมาที่ Excel… แทนที่เราจะใช้การเรียกชื่อ Cell ตามมาตรฐานที่มีอยู่เดิม เช่น A1 B3 หรือเรียก Range ว่า A2:D5 เราสามารถตั้งชื่อ Cell หรือ Range นั้นๆ ด้วยคำที่ต้องการได้เลย จะเป็นภาษาอังกฤษหรือภาษาไทยก็ได้ เช่น sales, ยอดขาย, ภาษี เป็นต้น

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

การตั้งชื่อ โดยใช้ Name Box

ให้เลือก Cell หรือ Range ที่ต้องการ  แล้วพิมพ์ชื่อที่ต้องการตั้งลงใน Name Box ได้เลย (อยู่ด้านซ้ายของช่อง Formula Bar ที่เอาไว้ใส่สูตร) เช่น

  • หากเราอยากจะตั้งชื่อช่อง C1 ว่า animal ก็ให้เราเลือกที่ช่อง C1 จากนั้นพิมพ์คำว่า animal ลงไปใน Name box แล้วกด Enter
    name1
  • หากเราอยากจะตั้งชื่อ Range B3:B5 ว่า salary ก็ให้เราเลือกที่ Range B3:B5 ก่อน จากนั้นพิมพ์คำว่า salary ลงไปใน Name box แล้วกด Enter
    name2
  • เมื่อเราตั้งชื่อไปแล้ว เราสามารถ Select Cell/Range ที่ตั้งชื่อไว้แล้วง่ายๆ โดยการเลือก Dropdown ที่ Name box นั่นเอง
    name3

การอ้างอิงถึงชื่อที่ตั้งไว้แล้ว

เราสามารถอ้างอิงถึงชื่อที่ตั้งไว้ได้เปรียบเสมือนว่าชื่อนั้นเป็น Cell Reference ปกติเลย ไม่ว่าชื่อนั้นจะเป็น Cell หรือ Range  เช่น หากเราพิมพ์ลงไปว่า =animal จะได้ค่าเหมือนกับ =C1 ซึ่งจะได้ค่าเป็น “ช้าง” ถ้าเราพิมพ์ว่า =SUM(salary) จะได้ค่าเหมือนกับ =SUM(B3:B5) ซึ่งจะได้ผลลัพธ์เป็น 600

การตั้งชื่อครั้งละหลายๆ ชื่อ โดยใช้ เครื่องมือ Create from Selection

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

[Formula] –> Defined Names –> Create from Selection (มี Shortcut คือกด Ctrl+Shift+F3)

name4

ชื่อ sales จะแทน B3:B6, product แทน C3:C6, payment แทน D3:D6 (ไม่รวมหัวคอลัมน์)

Scope ของชื่อ อยากให้ชื่อเป็นที่รู้จักแค่ไหน?

แท้จริงแล้ว ชื่อที่ถูกตั้งขึ้นมา สามารถกำหนดให้ถูกเรียกใช้งานได้จากขอบเขตตามที่เราต้องการเรียกว่า Scope นั่นคือ

  • ตั้ง Scope ให้เป็นระดับ Workbook : ให้เรียกใช้ชื่อได้จาก Sheet ใดก็ได้
  • ตั้ง Scope ให้เป็นระดับ Worksheet : ให้เรียกใช้ชื่อได้จาก Sheet ใด Sheet หนึ่งเท่านั้น
  • ถ้าชื่อซ้ำกัน หากเราทำการเรียกใช้ชื่อจาก Sheet ไหน Excel จะมองชื่อที่อยู่ใน Scope ของ Worksheet นั้นก่อนการมองชื่อระดับ Workbook เสมอ ตรงนี้ Make sense มากนะครับ เช่น ถ้าเราพูดถึงคนที่ชื่อว่า “โนบิตะ” คนส่วนใหญ่ในโลกนี้จะนึกถึงโนบิตะในเรื่องโดราเอมอน (เหมือนชื่อระดับ Workbook ที่เรียกได้ว่ามีความเป็นสากลมาก) แต่ถ้าเราเป็นคนที่อยู่ในบ้านที่มีคนชื่อโนบิตะอยู่พอดีเลย คนในบ้านนั้นก็ต้องคิดถึงคนที่ชื่อโนบิตะในบ้านนั้นก่อน (เหมือนกับการอ้างอิงชื่อระดับ Worksheet ที่มีความเป็น local มากกว่า)

ซึ่งการตั้งชื่อด้วย Namebox และ Create from Selection ที่แนะนำไปนั้น จะเป็นการสร้าง Defined Name ที่เป็นระดับ Workbook โดยอัตโนมัติ ซึ่งหากเราใช้วิธี Namebox ในการตั้งชื่อเดียวกันซ้ำในอีก Sheet หนึ่ง คุณจะพบปัญหา เพราะแทนที่มันจะตั้งชื่อขึ้นมาใหม่ มันดั้นเด้งกลับไปยังช่องแรกที่ถูกตั้งชื่อไว้แทน นี่แหละครับ ถึงคราวต้องใช้ความรู้เรื่องของ Scope ในการตั้งชื่อแล้วล่ะ! ทำยังไงมาดูกันครับ

การตั้งชื่ออย่างละเอียดด้วย Define name

ให้คลิ๊กที่ Cell/Range ที่ต้องการตั้งชื่อแล้วไปที่ [Formula] –> Defined Names –> Define Name ได้เลย ซึ่งคราวนี้คุณจะสามารถกำหนดเงื่อนไขต่างๆได้มากกว่าเดิม เช่น Defined Name จะใช้ชื่อว่าอะไร มี Scope เป็นระดับไหน และอ้างอิงไปที่ Cell/Range ไหน (ซึ่งอ้างไปยัง Sheet อื่นได้นะ)

เช่น ใน Sheet1 ช่อง A1 ผมมีค่า 10 แล้วตั้งชื่อว่า age ซึ่งผมใช้ Namebox ในการตั้งขื่อไปก่อน ซึ่งปกติชื่อแรกที่ถูกตั้งขึ้นมาจะเป็นระดับ Workbook โดยอัตโนมัติ

หากว่าใน Sheet2 ช่อง B1 ผมมีค่า 20 อยากจะตั้งชื่อว่า age เหมือนกัน (ซ้ำกับ sheet1) ผมจะสามารถทำได้ก็ต่อเมื่อผมต้องตั้งชื่อ age ใน Sheet2 ให้เป็นระดับ Sheetแทน โดยเปลี่ยน scope ในเครื่องมือ Define Name ให้เป็น sheet2 แทน (ระดับ worksheet) นั่นเอง

name5

สิ่งที่เกิดขึ้นคือ หากคุณทำการอ้างอิงชื่อที่ตั้งขึ้นมา เช่น ใส่สูตรว่า =age เมื่อคุณอยู่ที่ sheet ต่างกัน ก็จะได้ผลลัพธ์ต่างกันไปด้วย  เช่น

  • หากอ้างอิงจาก sheet2 คุณจะได้ค่า 20 (ได้ชื่อระดับ sheet กลับไป)
  • แต่หากคุณอ้างอิงจาก sheet 1 หรือ sheet อื่นที่ไม่ใช่ sheet2 คุณจะได้เลข 10 กลับไป (เป็น name ระดับ workbook)

อย่างที่บอกไปว่าชื่อระดับ worksheet จะได้รับ priority สูงกว่าเสมอ เพราะมีความเจาะจงมากกว่านั่นเอง  

การจัดการชื่อด้วย Name Manager

เมื่อคุณทำการตั้งชื่อไปแล้วด้วยวิธีการต่างๆ ที่พูดถึงก่อนหน้านี้ คุณสามารถเข้ามาจัดการซึ่งรวมถึง การเพิ่ม แก้ไข หรือ ลบ ชื่อเหล่านั้นได้ง่ายๆ โดยใช้เครื่องมือที่ชื่อว่า Name Manager ซึ่งอยู่ที่ [Formula] –> Defined Names –> Name Manager
name-manager

เครื่องมือนี้เหมาะกับการจัดการชื่อจำนวนมากๆ ได้ เพราะว่าจะเห็นภาพรวมของชื่อทั้งหมดที่ถูกตั้งไว้ใน Workbook นั้นๆ

อย่างไรก็ตาม หากมีชื่อเยอะเกินไปจนดูไม่ไหว คุณก็ยังสามารถ Filter ชื่อตามหมวดหมู่ที่ต้องการได้ เช่น อยากเห็นเฉพาะชื่อที่มี Error อยู่ หรือ ชื่อที่มี Scope เป็น Sheet เป็นต้น

name-manager2