การทำความเข้าใจตัวแปรและค่าคงที่ใน Excel Macros

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

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

ค่าคงที่มีประโยชน์หากคุณต้องการใช้ค่าที่เท่ากันหลายครั้ง แทนที่จะคัดลอกตัวเลข คุณสามารถเขียนชื่อของค่าคงที่ได้ ตัวอย่างเช่น คุณสามารถใช้ค่าคงที่ “Pi” เพื่อเก็บ Pi ซึ่งเป็นค่าคงที่ มีขนาดใหญ่มากและทุกครั้งที่เขียนหรือค้นหาและคัดลอกค่อนข้างยาก ดังนั้นจึงเพียงพอที่จะเขียนอักขระสองตัวและสภาพแวดล้อมจะใช้ตัวเลขที่ต้องการโดยอัตโนมัติ

ผู้ใช้ Excel จำเป็นต้องประกาศตัวแปรหากต้องการเปลี่ยนค่าที่เก็บไว้ในตัวแปรเป็นครั้งคราว ตัวอย่างเช่น คุณสามารถตั้งค่าตัวแปรที่เรียกว่า sVAT_Rate ซึ่งจะเก็บอัตรา VAT ปัจจุบันสำหรับผลิตภัณฑ์ หากมีการเปลี่ยนแปลง คุณสามารถแก้ไขได้อย่างรวดเร็ว สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับผู้ที่ทำธุรกิจในสหรัฐอเมริกา ซึ่งสินค้าบางรายการอาจไม่ต้องเสียภาษีมูลค่าเพิ่มเลย (และภาษีนี้ก็แตกต่างกันไปในแต่ละรัฐ)

ประเภทข้อมูล

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

ไม่แนะนำให้ใช้ชนิดข้อมูลที่ใช้พื้นที่ในหน่วยความจำมากกว่าสำหรับตัวเลขจำนวนน้อย ตัวอย่างเช่นสำหรับหมายเลข 1 ก็เพียงพอแล้วที่จะใช้ประเภท Byte ซึ่งจะส่งผลในเชิงบวกต่อประสิทธิภาพของโมดูลปฏิบัติการ โดยเฉพาะอย่างยิ่งในคอมพิวเตอร์ที่อ่อนแอ แต่มันเป็นสิ่งสำคัญที่จะไม่ไปไกลเกินไปที่นี่ หากคุณใช้ชนิดข้อมูลที่กะทัดรัดเกินไป ค่าที่เกินขนาดอาจไม่พอดี

การประกาศค่าคงที่และตัวแปร

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

ในการประกาศตัวแปร จะใช้คำสั่ง Dim ตัวอย่างเช่นเช่นนี้:

Dim Variable_Name เป็นจำนวนเต็ม

Variable_Name คือชื่อของตัวแปร ถัดไป ตัวดำเนินการ As จะถูกเขียน โดยระบุชนิดข้อมูล แทนที่จะใส่สตริง “Variable_Name” และ “Integer” คุณสามารถใส่ชื่อและประเภทข้อมูลของคุณเองได้

ค่าคงที่สามารถประกาศได้ แต่คุณต้องระบุค่าของค่าคงที่ก่อน หนึ่งในตัวเลือกคือ:

Const iMaxCount = 5000

ในความเป็นธรรม ในบางกรณีคุณสามารถทำได้โดยไม่ต้องประกาศตัวแปร แต่ในกรณีนี้ ตัวแปรจะถูกกำหนดประเภทโดยอัตโนมัติ อย่างไรก็ตาม ไม่แนะนำด้วยเหตุผลดังต่อไปนี้:

  1. ตัวแปรจะถูกประมวลผลช้ากว่ามาก และหากมีตัวแปรดังกล่าวจำนวนมาก การประมวลผลข้อมูลอาจช้าลงอย่างมากบนคอมพิวเตอร์ที่อ่อนแอ ดูเหมือนว่าวินาทีเหล่านั้นจะตัดสิน? แต่ถ้าคุณต้องเขียนโค้ดจำนวนมากๆ แล้วรันบนคอมพิวเตอร์ที่อ่อนแอ (ซึ่งยังคงขายอยู่ เนื่องจากชุดโปรแกรมสำนักงานสมัยใหม่ต้องการ RAM จำนวนมาก) คุณสามารถหยุดการทำงานได้อย่างสมบูรณ์ มีหลายกรณีที่การเขียนมาโครโดยไม่ได้ตั้งใจนำไปสู่การแช่แข็งของสมาร์ทบุ๊กที่มี RAM จำนวนน้อยและไม่ได้ออกแบบมาเพื่อทำงานที่ซับซ้อน 
  2. อนุญาตให้พิมพ์ชื่อผิด ซึ่งสามารถป้องกันได้โดยใช้คำสั่ง Option Explicit ซึ่งช่วยให้คุณค้นหาตัวแปรที่ไม่ได้ประกาศ หากพบตัวแปร นี่เป็นวิธีง่ายๆ ในการตรวจหาข้อผิดพลาด เนื่องจากการพิมพ์ผิดเพียงเล็กน้อยทำให้ล่ามไม่สามารถระบุตัวแปรได้ และหากคุณเปิดโหมดการประกาศตัวแปร ล่ามจะไม่อนุญาตให้คุณเรียกใช้มาโครหากพบที่เก็บข้อมูลที่ไม่ได้ประกาศไว้ที่จุดเริ่มต้นของโมดูล
  3. หลีกเลี่ยงข้อผิดพลาดที่เกิดจากค่าตัวแปรไม่ตรงกับประเภทข้อมูล โดยปกติ การกำหนดค่าข้อความให้กับตัวแปรจำนวนเต็มจะทำให้เกิดข้อผิดพลาด ใช่ ในอีกด้านหนึ่ง ประเภททั่วไปถูกกำหนดโดยไม่มีการประกาศ แต่ถ้ามีการประกาศล่วงหน้า ก็จะสามารถหลีกเลี่ยงข้อผิดพลาดแบบสุ่มได้

ดังนั้น ขอแนะนำอย่างยิ่งให้ประกาศตัวแปรทั้งหมดในมาโคร Excel

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

  1. เส้นถูกทำให้ว่างเปล่า
  2. ตัวเลขใช้กับค่า 0
  3. ตัวแปรประเภทบูลีนจะถือว่าเป็นเท็จในขั้นต้น
  4. วันที่เริ่มต้นคือ 30 ธันวาคม พ.ศ. 1899

ตัวอย่างเช่น คุณไม่จำเป็นต้องกำหนดค่า 0 ให้กับตัวแปรจำนวนเต็ม หากไม่มีการระบุค่าไว้ก่อนหน้านี้ เธอมีหมายเลขนี้แล้ว

ตัวเลือกคำชี้แจงที่ชัดเจน

คำสั่งนี้อนุญาตให้คุณประกาศตัวแปรทั้งหมดที่ใช้ในโค้ด VBA และกำหนดสถานะของคอนเทนเนอร์ที่ไม่ได้ประกาศก่อนที่จะรันโค้ด ในการใช้คุณลักษณะนี้ เพียงเขียนบรรทัดของโค้ด Option Explicit ที่ด้านบนสุดของโค้ดมาโคร

ถ้าคุณต้องการรวมคำสั่งนี้ในโค้ดของคุณทุกครั้ง คุณสามารถทำได้โดยใช้การตั้งค่าพิเศษในตัวแก้ไข VBA ในการเปิดใช้งานตัวเลือกนี้ คุณต้อง:

  1. ไปที่สภาพแวดล้อมการพัฒนาตามเส้นทาง – เครื่องมือ > ตัวเลือก
  2. ในหน้าต่างที่เปิดขึ้นหลังจากนี้ ให้เปิดแท็บตัวแก้ไข
  3. และสุดท้าย ให้ทำเครื่องหมายที่ช่องถัดจากรายการ Require Variable Declaration

เมื่อเสร็จสิ้นขั้นตอนเหล่านี้ ให้คลิกที่ปุ่ม “ตกลง” 

เพียงเท่านี้ เมื่อเขียนมาโครใหม่แต่ละรายการ บรรทัดนี้จะถูกแทรกที่ด้านบนของโค้ดโดยอัตโนมัติ

ขอบเขตของค่าคงที่และตัวแปร

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

สมมุติว่าเรามีฟังก์ชัน ค่าใช้จ่ายทั้งหมด()และใช้ตัวแปร sVAT_อัตรา. ขึ้นอยู่กับตำแหน่งในโมดูล จะมีขอบเขตที่แตกต่างกัน:

ตัวเลือกที่ชัดเจน

ติ่มซำ sVAT_Rate เป็นโสด

ฟังก์ชัน Total_Cost() เป็นสองเท่า

.

.

.

ฟังก์ชั่นเอนด์

หากมีการประกาศตัวแปรที่ด้านบนสุดของโมดูล ตัวแปรนั้นจะกระจายไปทั่วโมดูลนั้น นั่นคือสามารถอ่านได้ทุกขั้นตอน

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

ตัวเลือกที่ชัดเจน

ฟังก์ชัน Total_Cost() เป็นสองเท่า

ติ่มซำ sVAT_Rate เป็นโสด

   .

   .

   .

ฟังก์ชั่นเอนด์

ในกรณีนี้ ตัวแปรจะถูกประกาศภายในโพรซีเดอร์ และล่ามจะส่งข้อผิดพลาดหากใช้ในโพรซีเดอร์อื่น

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

คุณสามารถกำหนดขอบเขตของค่าคงที่ในลักษณะเดียวกันได้ แต่คีย์เวิร์ดที่นี่เขียนร่วมกับตัวดำเนินการ Const

นี่คือตารางที่มีตัวอย่างที่ดีเกี่ยวกับวิธีการทำงานกับค่าคงที่และตัวแปร

ตัวเลือกที่ชัดเจน

sVAT_Rate สาธารณะในฐานะโสด

ค่าคงที่สาธารณะ iMax_Count = 5000

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

sVAT_Rate ส่วนตัวแบบโสด

ส่วนตัว Const iMax_Count = 5000

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

เหตุใดจึงต้องมีค่าคงที่และตัวแปร

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

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

นี่เป็นสิ่งสำคัญอย่างยิ่งเมื่อโปรแกรมเมอร์หลายคนเขียนมาโคร บางคนอาจรู้ว่าตัวแปรบางอย่างไม่ควรเปลี่ยนแปลง และอีกอันไม่ใช่ หากคุณระบุโอเปอเรเตอร์ Const ผู้พัฒนารายอื่นจะรู้ว่าค่านี้จะไม่เปลี่ยนแปลง

หรือถ้ามีค่าคงที่ชื่อเดียว และตัวแปรมีชื่ออื่นแต่คล้ายกัน นักพัฒนาสามารถสร้างความสับสนได้ ตัวอย่างเช่น ตัวแปรหนึ่งที่ไม่จำเป็นต้องเปลี่ยนแปลงเรียกว่า Variable11 และอีกตัวแปรที่สามารถแก้ไขได้เรียกว่า Variable1 บุคคลสามารถข้ามหน่วยพิเศษโดยไม่ตั้งใจได้โดยอัตโนมัติเมื่อเขียนรหัสโดยไม่สังเกต เป็นผลให้คอนเทนเนอร์สำหรับค่าจะเปลี่ยนไปซึ่งไม่ควรแตะต้อง

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

ใช่ คุณสามารถทำอะไรกับความคิดเห็นในสถานการณ์นี้ได้ แต่ระบุคำว่า Const ง่ายกว่าใช่หรือไม่

สรุป

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

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

เขียนความเห็น