สารบัญ
เรากำลังดำเนินการต่อในบทช่วยสอนเกี่ยวกับฟังก์ชันที่กำหนดโดยผู้ใช้ ในบทความก่อนหน้านี้ เราได้ทำความคุ้นเคยกับฟังก์ชันแบบกำหนดเองและเรียนรู้วิธีสร้างและใช้งาน ในคู่มือนี้ เราจะดูที่ลักษณะเฉพาะของการใช้ฟังก์ชันเหล่านี้ และดูความแตกต่างระหว่างแมโคร UDF และ VBA
ในบทช่วยสอนนี้ เราจะได้เรียนรู้สิ่งต่อไปนี้:
เราหวังว่าบทความนี้จะช่วยเพิ่มความรู้ของคุณเกี่ยวกับ UDF และช่วยให้คุณใช้งานได้อย่างมีประสิทธิภาพยิ่งขึ้นในสมุดงาน Excel ของคุณ
UDF และ Macro เหมือนกันหรือไม่
ทั้งฟังก์ชันที่กำหนดโดยผู้ใช้และ VBA มาโครถูกสร้างขึ้นโดยใช้โปรแกรมแก้ไข VBA อะไรคือความแตกต่างระหว่างสิ่งเหล่านี้และสิ่งที่ควรให้ความสำคัญ
ความแตกต่างที่สำคัญที่สุดคือฟังก์ชันทำการคำนวณ และมาโครดำเนินการบางอย่าง ต้องเขียนฟังก์ชันที่ผู้ใช้กำหนด เช่น ฟังก์ชัน Excel ทั่วไปในเซลล์ ผลจากการดำเนินการ เซลล์จะส่งกลับค่าบางอย่าง ในขณะเดียวกันก็เป็นไปไม่ได้ที่จะเปลี่ยนค่าของเซลล์อื่นรวมถึงคุณสมบัติบางอย่างของเซลล์ปัจจุบัน (โดยเฉพาะการจัดรูปแบบ) อย่างไรก็ตาม คุณสามารถใช้ฟังก์ชันแบบกำหนดเองในสูตรการจัดรูปแบบตามเงื่อนไขได้
มาโคร UDF และ VBA ทำงานในวิธีที่ต่างกัน ตัวอย่างเช่น เมื่อคุณสร้าง UDF ใน Visual Basic Editor คุณจะเริ่มต้นด้วยคำสั่ง Function และสิ้นสุดด้วย End Function เมื่อคุณบันทึกมาโคร คุณจะเริ่มต้นด้วย aคำสั่ง Sub และลงท้ายด้วย End Sub
ไม่สามารถใช้ตัวดำเนินการ Visual Basic ทั้งหมดเพื่อสร้าง UDF ได้ ด้วยเหตุนี้ มาโครจึงเป็นโซลูชันที่หลากหลายกว่า
มาโครไม่ต้องการให้ผู้ใช้ส่งอาร์กิวเมนต์ใดๆ (และไม่สามารถยอมรับอาร์กิวเมนต์ใดๆ) ซึ่งแตกต่างจากฟังก์ชันที่ผู้ใช้กำหนดเอง
ประเด็นคือบางคำสั่งของแมโครสามารถใช้ที่อยู่เซลล์หรือองค์ประกอบการจัดรูปแบบ (เช่น สี) หากคุณย้ายเซลล์ เพิ่มหรือลบแถวและคอลัมน์ เปลี่ยนรูปแบบของเซลล์ คุณก็สามารถ "แบ่ง" มาโครของคุณได้อย่างง่ายดาย สิ่งนี้เป็นไปได้อย่างยิ่งหากคุณแชร์ไฟล์กับเพื่อนร่วมงานที่ไม่รู้ว่ามาโครของคุณทำงานอย่างไร
ตัวอย่างเช่น คุณมีไฟล์ที่มีมาโครที่ทำงานได้อย่างสมบูรณ์แบบ สูตรนี้คำนวณเปอร์เซ็นต์ของเซลล์ A1 ถึง A4 มาโครเปลี่ยนสีของเซลล์เหล่านี้เป็นสีเหลือง มีการตั้งค่ารูปแบบเปอร์เซ็นต์ในเซลล์ที่ใช้งานอยู่
หากคุณหรือบุคคลอื่นตัดสินใจแทรกแถวใหม่ มาโครจะค้นหาค่าในเซลล์ A4 ต่อไป ( พารามิเตอร์ 4,1 ใน UDF ของคุณ) ล้มเหลวและส่งคืนข้อผิดพลาด:
ในกรณีนี้ ข้อผิดพลาดเกิดขึ้นเนื่องจากการหารด้วยศูนย์ (ไม่มีค่าในค่าที่เพิ่มใหม่ แถว). ในกรณีที่มาโครทำงาน สมมติว่าเป็นผลรวม คุณจะได้ผลลัพธ์ที่ผิด แต่คุณจะไม่ทราบ
ตรงกันข้ามกับมาโคร ฟังก์ชันที่ผู้ใช้กำหนดไม่สามารถทำให้เกิดสถานการณ์ที่ไม่พึงประสงค์ดังกล่าวได้
ด้านล่าง คุณจะเห็นประสิทธิภาพของการคำนวณเดียวกันโดยใช้ UDF ที่นี่คุณสามารถระบุเซลล์อินพุตได้ทุกที่ในเวิร์กชีต และคุณจะไม่ประสบปัญหาที่ไม่คาดคิดเมื่อทำการเปลี่ยนแปลง
ฉันเขียนสูตรต่อไปนี้ใน C3:
=UDF_vs_Macro(A1,A4)
จากนั้นฉันแทรกแถวว่าง และสูตรก็เปลี่ยนไปตามที่คุณเห็นในภาพหน้าจอด้านบน
ตอนนี้เราสามารถย้ายเซลล์อินพุตหรือเซลล์ที่มีฟังก์ชันได้ทุกที่ ผลลัพธ์จะถูกต้องเสมอ
ประโยชน์เพิ่มเติมของการใช้ UDF คือการอัปเดตโดยอัตโนมัติเมื่อค่าในเซลล์อินพุตเปลี่ยนแปลง เมื่อใช้มาโคร คุณต้องตรวจสอบให้แน่ใจเสมอว่าข้อมูลทั้งหมดเป็นปัจจุบัน
เมื่อนึกถึงตัวอย่างนี้ ฉันต้องการใช้ UDF ทุกครั้งที่เป็นไปได้ และใช้มาโครเฉพาะสำหรับกิจกรรมอื่นๆ ที่ไม่ใช่การคำนวณเท่านั้น
ข้อจำกัดและข้อเสียของการใช้ UDF
ฉันได้กล่าวถึงข้อดีของ UDF ข้างต้นแล้ว พูดสั้น ๆ ก็คือสามารถทำการคำนวณที่ไม่สามารถทำได้ด้วยฟังก์ชันมาตรฐานของ Excel นอกจากนี้ยังสามารถบันทึกและใช้สูตรที่ยาวและซับซ้อน เปลี่ยนเป็นฟังก์ชันเดียว และคุณไม่ต้องเขียนสูตรที่ซับซ้อนซ้ำแล้วซ้ำอีก
ตอนนี้เรามาพูดถึงรายละเอียดเพิ่มเติมเกี่ยวกับข้อบกพร่องของ UDF:
- การสร้าง UDF จำเป็นต้องใช้ VBA ไม่มีทางหลีกเลี่ยงได้ ซึ่งหมายความว่าผู้ใช้ไม่สามารถบันทึก UDF ในลักษณะเดียวกับแมโครของ Excel คุณต้องสร้าง UDF ด้วยตัวเอง อย่างไรก็ตาม คุณสามารถคัดลอกและวางส่วนของรหัสแมโครที่บันทึกไว้ก่อนหน้านี้ลงในฟังก์ชันของคุณ คุณเพียงแค่ต้องตระหนักถึงข้อจำกัดของฟังก์ชันที่กำหนดเอง
- ข้อเสียเปรียบอีกประการของ UDF ก็คือเช่นเดียวกับฟังก์ชันอื่นๆ ของ Excel ที่สามารถส่งคืนค่าเพียงค่าเดียวหรืออาร์เรย์ของค่าลงในเซลล์ มันแค่ทำการคำนวณ ไม่มีอะไรมาก
- ถ้าคุณต้องการแชร์สมุดงานกับเพื่อนร่วมงาน อย่าลืมบันทึก UDF ของคุณไว้ในไฟล์เดียวกัน มิฉะนั้น ฟังก์ชันแบบกำหนดเองของคุณจะใช้งานไม่ได้
- ฟังก์ชันแบบกำหนดเองที่สร้างด้วยตัวแก้ไข VBA จะทำงานช้ากว่าฟังก์ชันทั่วไป โดยเฉพาะอย่างยิ่งในตารางขนาดใหญ่ น่าเสียดายที่ VBA เป็นภาษาการเขียนโปรแกรมที่ช้ามาก ดังนั้น หากคุณมีข้อมูลจำนวนมาก ให้ลองใช้ฟังก์ชันมาตรฐานทุกครั้งที่ทำได้ หรือสร้าง UDF โดยใช้ฟังก์ชัน LAMBDA
ข้อจำกัดของฟังก์ชันที่กำหนดเอง:
- UDF คือ ออกแบบมาเพื่อทำการคำนวณและส่งกลับค่า ไม่สามารถใช้แทนมาโครได้
- ไม่สามารถเปลี่ยนเนื้อหาของเซลล์อื่นได้ (เฉพาะเซลล์ที่ใช้งานอยู่)
- ชื่อฟังก์ชันต้องเป็นไปตามกฎบางอย่าง ตัวอย่างเช่น คุณไม่สามารถใช้ชื่อที่ตรงกับชื่อฟังก์ชันดั้งเดิมของ Excel หรือที่อยู่ของเซลล์ เช่น AB123
- ฟังก์ชันที่กำหนดเองของคุณไม่สามารถมีช่องว่างในชื่อได้ แต่สามารถรวมอักขระขีดล่างได้ อย่างไรก็ตาม วิธีที่แนะนำคือการใช้ตัวพิมพ์ใหญ่ที่จุดเริ่มต้นของแต่ละใหม่word (เช่น GetMaxBetween)
- UDF ไม่สามารถคัดลอกและวางเซลล์ลงในพื้นที่อื่นของแผ่นงานได้
- ไม่สามารถเปลี่ยนแผ่นงานที่ใช้งานอยู่ได้
- UDF สามารถ' t เปลี่ยนการจัดรูปแบบในเซลล์ที่ใช้งานอยู่ หากคุณต้องการเปลี่ยนการจัดรูปแบบของเซลล์เมื่อแสดงค่าต่างๆ คุณควรใช้การจัดรูปแบบตามเงื่อนไข
- ไม่สามารถเปิดหนังสือเพิ่มเติมได้
- ไม่สามารถใช้เพื่อเรียกใช้มาโครโดยใช้ Application.OnTime .
- ไม่สามารถสร้างฟังก์ชันที่ผู้ใช้กำหนดเองได้โดยใช้ตัวบันทึกแมโคร
- ฟังก์ชันไม่ปรากฏใน นักพัฒนาซอฟต์แวร์ > มาโคร ไดอะล็อก
- ฟังก์ชันของคุณจะปรากฏในกล่องโต้ตอบ ( แทรก > ฟังก์ชัน ) และในรายการฟังก์ชันเฉพาะเมื่อมีการประกาศเป็น สาธารณะ (นี่เป็นค่าเริ่มต้น เว้นแต่จะระบุไว้เป็นอย่างอื่น)
- ฟังก์ชันใดๆ ที่ประกาศเป็น ส่วนตัว จะไม่ปรากฏในรายการคุณลักษณะ
การดำเนินการค่อนข้างช้า ตลอดจนข้อจำกัดในการใช้งานอาจทำให้คุณคิดว่า: "การใช้ฟังก์ชันที่กำหนดเองเหล่านี้มีประโยชน์อย่างไร"
ฟังก์ชันเหล่านี้มีประโยชน์ และจะทำถ้าเราคำนึงถึงข้อจำกัดที่กำหนดขึ้น หากคุณเรียนรู้วิธีสร้างและใช้ UDF อย่างเหมาะสม คุณสามารถเขียนไลบรารีของฟังก์ชันได้ วิธีนี้จะช่วยเพิ่มความสามารถในการทำงานกับข้อมูลใน Excel
สำหรับฉัน ฟังก์ชันแบบกำหนดเองช่วยประหยัดเวลาได้ดีมาก แล้วคุณล่ะ? คุณได้ลองสร้าง UDF ของคุณเองแล้วหรือยัง? คุณชอบมันไหมดีกว่าฟังก์ชันพื้นฐานของ Excel อย่างไร? มาพูดคุยกันในความคิดเห็น :)