ฟังก์ชัน vba ในตัว วีบีเอ เอ็กเซล ฟังก์ชันแบบกำหนดเอง (ไวยากรณ์ ส่วนประกอบ) การสร้างฟังก์ชันใน VBA ด้วยอาร์กิวเมนต์หลายตัว
ฟังก์ชันที่เขียนใน VBA คือโค้ดที่ทำการคำนวณและส่งกลับค่า (หรืออาร์เรย์ของค่า) เมื่อคุณสร้างฟังก์ชันแล้ว คุณจะสามารถใช้งานได้สามวิธี:
- เป็นสูตรในเวิร์กชีตที่สามารถรับอาร์กิวเมนต์และส่งกลับค่าได้
- เป็นส่วนหนึ่งของรูทีน VBA ของคุณ ในขั้นตอนย่อยหรือภายในฟังก์ชันอื่นๆ
- ในกฎการจัดรูปแบบตามเงื่อนไข
แม้ว่า Excel จะมีฟังก์ชันในตัวมากกว่า 450 ฟังก์ชันแล้ว แต่บางครั้งก็ยังขาดฟังก์ชันเหล่านี้ไปเช่นกัน บางครั้งฟังก์ชันในตัวไม่สามารถทำสิ่งที่คุณต้องการได้ บางครั้งเพื่อให้ได้ผลลัพธ์ คุณต้องสร้างสูตรที่ซับซ้อนและซับซ้อนซึ่งผู้อื่นไม่สามารถเข้าใจได้ ในกรณีนี้ คุณสามารถสร้างฟังก์ชันแบบกำหนดเองที่อ่านและใช้งานได้ง่าย
โปรดทราบว่าฟังก์ชันที่ผู้ใช้กำหนดซึ่งสร้างด้วย VBA โดยทั่วไปจะช้ากว่าฟังก์ชันในตัวอย่างมาก ดังนั้นจึงเหมาะที่สุดสำหรับสถานการณ์ที่คุณไม่สามารถรับผลลัพธ์โดยใช้ฟังก์ชันในตัว หรือมีการคำนวณไม่มากนัก และการปรับประสิทธิภาพก็ไม่สำคัญ
ไม่เพียงแต่คุณเท่านั้น แต่ยังรวมถึงเพื่อนร่วมงานของคุณสามารถใช้ฟังก์ชันในตัวได้ ฟังก์ชันที่คุณเขียนจะปรากฏพร้อมกับฟังก์ชันอื่นๆ ในกล่องโต้ตอบตัวช่วยสร้างฟังก์ชัน คุณอาจรู้สึกหวาดกลัวกับกระบวนการสร้างฟังก์ชัน แต่ฉันรีบรับรองว่ามันค่อนข้างง่าย
ความแตกต่างระหว่างโพรซีเดอร์ (ย่อย) และฟังก์ชัน (ฟังก์ชัน) คืออะไร?
ข้อแตกต่างที่สำคัญคือโพรซีเดอร์ (ย่อย) ใช้เพื่อดำเนินการชุดคำสั่ง และไม่ได้ตั้งใจให้ส่งคืนค่า (หรืออาร์เรย์ของค่า) ซึ่งต่างจากฟังก์ชัน (ฟังก์ชัน)
เพื่อสาธิตขอยกตัวอย่าง ตัวอย่างเช่น มีชุดตัวเลขตั้งแต่ 1 ถึง 100 และคุณต้องแยกเลขคู่ออกจากเลขคี่
การใช้ขั้นตอน (ย่อย) คุณสามารถผ่านเซลล์ต่างๆ และเน้นเซลล์ที่แปลกได้โดยใช้การเติม และสามารถใช้ฟังก์ชันในคอลัมน์ที่อยู่ติดกันได้ และจะส่งคืนค่า TRUE หรือ FALSE ขึ้นอยู่กับว่าค่าเป็นคู่หรือไม่ เหล่านั้น. คุณจะไม่สามารถเปลี่ยนสีเติมโดยใช้ฟังก์ชันในแผ่นงานได้
การสร้างฟังก์ชันที่ผู้ใช้กำหนดอย่างง่ายใน VBA
มาสร้างฟังก์ชันแบบกำหนดเองอย่างง่ายใน VBA และดูว่ามันทำงานอย่างไร
ด้านล่างนี้คือโค้ดสำหรับฟังก์ชันที่จะปล่อยเฉพาะตัวเลขออกจากข้อความ โดยละทิ้งค่าตัวอักษร
หมายเลขฟังก์ชัน (ข้อความเป็นสตริง) หรี่ยาว i หรี่ยาวผลลัพธ์เป็นสตริง For i = 1 To Len (ข้อความ) ถ้า IsNumeric (กลาง (ข้อความ, i, 1)) จากนั้นผลลัพธ์ = ผลลัพธ์ & กลาง (ข้อความ, i, 1 ) หมายเลขถัดไป = CLng(ผลลัพธ์) ฟังก์ชันสิ้นสุด
คุณต้องแทรกเพื่อให้ทุกอย่างได้ผลสำหรับคุณ รหัสนี้เข้าสู่โมดูลหนังสือ หากคุณไม่ทราบวิธีการทำเช่นนี้ ให้เริ่มด้วยบทความวิธีบันทึกแมโครใน Excel
ตอนนี้เรามาดูกันว่าฟังก์ชันทำงานอย่างไร ลองใช้มันบนชีต:
ก่อนที่จะวิเคราะห์ฟังก์ชันนี้ ให้สังเกต 2 ช่วงเวลาอันน่ารื่นรมย์ที่เกิดขึ้นหลังจากการสร้าง:
- ใช้งานได้เหมือนกับฟังก์ชันอื่นๆ ในตัว (วิธีสร้าง ฟังก์ชั่นที่ซ่อนอยู่เราจะเล่าให้ฟังต่อไป)
- เมื่อคุณป้อนเครื่องหมาย "=" และเริ่มพิมพ์ชื่อของฟังก์ชัน Excel จะแสดงรายการที่ตรงกันทั้งหมดและไม่เพียงแต่แสดงฟังก์ชันในตัวเท่านั้น แต่ยังรวมถึงฟังก์ชันที่กำหนดเองด้วย
มาวิเคราะห์ฟังก์ชันทีละขั้นตอนกัน
ตอนนี้เรามาเจาะลึกและดูว่าคุณลักษณะนี้ถูกสร้างขึ้นอย่างไร ฟังก์ชั่นเริ่มต้นด้วยเส้น
หมายเลขฟังก์ชัน (ข้อความเป็นสตริง) ตราบเท่าที่
คำ การทำงานพูดถึงจุดเริ่มต้นของฟังก์ชัน ตามด้วยชื่อ ในกรณีของเรา ตัวเลข.
- ชื่อฟังก์ชันต้องไม่มีช่องว่าง นอกจากนี้ คุณไม่สามารถเรียกใช้ฟังก์ชันได้หากฟังก์ชันขัดแย้งกับชื่อการอ้างอิงเซลล์ ตัวอย่างเช่น คุณไม่สามารถตั้งชื่อฟังก์ชัน ABC123 ได้เนื่องจากชื่อนั้นอ้างอิงถึงเซลล์ในแผ่นงาน Excel ด้วย
- คุณไม่ควรตั้งชื่อฟังก์ชันของคุณเหมือนกับฟังก์ชันที่มีอยู่ หากคุณทำเช่นนี้ Excel จะให้ความสำคัญกับฟังก์ชันที่มีอยู่แล้วภายใน
- คุณสามารถใช้อักขระขีดล่างได้หากต้องการแยกคำ ตัวอย่างเช่น, สุมาในการเล่นกลเป็นชื่อที่ถูกต้อง
หลังชื่อ อาร์กิวเมนต์ของฟังก์ชันจะอธิบายอยู่ในวงเล็บ คล้ายกับบิวท์อิน ฟังก์ชัน Excel. ในกรณีของเรา อาร์กิวเมนต์เดียวที่ใช้คือ ข้อความ. หลังจากชื่อของข้อโต้แย้งที่เราระบุไว้ เป็นสตริงซึ่งหมายความว่าข้อโต้แย้งของเราคือ ค่าข้อความหรือการอ้างอิงไปยังเซลล์ที่มีค่าข้อความ หากคุณไม่ระบุประเภทข้อมูล VBA จะถือว่าข้อมูลดังกล่าวเป็น ตัวแปร(ซึ่งหมายความว่าคุณสามารถใช้ข้อมูลประเภทใดก็ได้ VBA จะคิดออกให้คุณ)
ส่วนสุดท้ายของบรรทัดแรก ตราบเท่าที่ระบุชนิดข้อมูลที่ฟังก์ชันส่งคืน ในกรณีของเรา ฟังก์ชันจะส่งกลับค่าจำนวนเต็ม สิ่งนี้ก็ไม่จำเป็นเช่นกัน
บรรทัดที่สองและสามของฟังก์ชันจะประกาศตัวแปรภายในเพิ่มเติมที่เราจะใช้
Dim i As Long Dim ผลลัพธ์เป็นสตริง
ตัวแปร ฉันเราจะใช้มันเพื่อระบุตัวอักษร ตัวแปร ผลลัพธ์เพื่อเก็บผลลัพธ์ระดับกลางของฟังก์ชัน
หน้าที่ของฟังก์ชันคืออ่านอักขระทั้งหมดในตัวแปร Text และบันทึกเฉพาะอักขระที่เป็นตัวเลขเท่านั้น ดังนั้นเราจะเริ่มวนจาก 1 ถึงอักขระตัวสุดท้าย
สำหรับ i = 1 ถึง Len(ข้อความ)
Len เป็นฟังก์ชันที่กำหนดจำนวนอักขระ
บรรทัดหลักของฟังก์ชันคือการตรวจสอบว่าอักขระถัดไปของข้อความเป็นตัวเลขหรือไม่ และหากเป็นเช่นนั้น ให้จัดเก็บไว้ในตัวแปรผลลัพธ์
ถ้า IsNumeric(Mid(Text, i, 1)) ดังนั้น result = result & Mid(Text, i, 1)
สำหรับสิ่งนี้เราจำเป็นต้องมีฟังก์ชัน เป็นตัวเลข- เธอกลับมา จริงถ้าข้อความเป็นตัวเลขและ เท็จมิฉะนั้น.
การทำงาน กลางใช้เวลาจากอาร์กิวเมนต์ข้อความ ฉันอักขระตัวที่ (ความหมาย 1 แสดงว่าฟังก์ชัน กลางใช้เวลาเพียง 1 ตัวอักษร)/
การทำงาน ต่อไป- ปิดวง สำหรับทุกอย่างชัดเจนที่นี่
ตัวเลข = CLng(ผลลัพธ์)
ด้วยบรรทัดนี้ เราจะแปลงตัวแปรข้อความ ผลลัพธ์ซึ่งมีตัวเลขทั้งหมดของอาร์กิวเมนต์ ข้อความ, วี ค่าตัวเลข. และเราบอกว่าฟังก์ชันของเราควรจะส่งออกผลลัพธ์อะไร ตัวเลข.
บรรทัดสุดท้ายของโค้ดคือ ฟังก์ชันสิ้นสุด. นี่คือบรรทัดโค้ดที่จำเป็นซึ่งบอก VBA ว่าโค้ดฟังก์ชันสิ้นสุดที่นี่
โค้ดด้านบนอธิบายส่วนต่างๆ ของฟังก์ชันที่ผู้ใช้กำหนดโดยทั่วไปซึ่งสร้างใน VBA ในบทความต่อๆ ไป เราจะดูองค์ประกอบเหล่านี้โดยละเอียดยิ่งขึ้นและดูด้วย วิธีต่างๆการดำเนินการ ฟังก์ชัน VBAใน Excel
Dim nResult เป็นจำนวนเต็ม
nMult1 = CInt(InputBox("ป้อนหมายเลขแรก: ")) nMult2 = CInt(InputBox("ป้อนหมายเลขที่สอง: ")) nResult = fMultiply(nMult1, nMult2)
การเลือก แทรกหลังจาก n การเลือกผลลัพธ์ ยุบ wd ยุบสิ้นสุด
4. เพื่อแสดงความคิดเห็นรหัส AutoNew() เน้นโค้ดทั้งหมดสำหรับขั้นตอนนี้ (รวมถึง Public Sub AutoNew() และ End Sub ) แล้วคลิกปุ่ม Comment Block บนแถบเครื่องมือ Edit
3.9. ฟังก์ชันภาษา VBA ในตัว
3.9.1. ฟังก์ชั่นในตัวคืออะไร
ใน ภาษาการเขียนโปรแกรม VBA มีให้เลือกหลายสิบภาษาฟังก์ชั่นในตัว. มีอยู่ในโปรแกรมใด ๆ ในภาษา VBA และไม่สำคัญว่าเราอยู่ในผลิตภัณฑ์ซอฟต์แวร์ใด - Excel, Word, Access หรือเช่น AutoCAD มีการใช้งานอย่างกระตือรือร้นและในหลาย ๆ สถานการณ์ไม่มีใครสามารถทำได้หากไม่มีพวกเขา โปรแกรมเมอร์มืออาชีพใช้งานมันโดยอัตโนมัติ แต่ฉันขอแนะนำให้ผู้ใช้ทั่วไปใช้เวลาหลายชั่วโมงเพื่อทำความรู้จักกับพวกเขา เพราะหากไม่มีความรู้เกี่ยวกับฟังก์ชั่นเหล่านี้ พวกเขาจะไม่สามารถทำงานอย่างมีประสิทธิภาพใน VBA ได้ ข้อโต้แย้งเพิ่มเติมที่สนับสนุนการศึกษาสิ่งเหล่านี้ก็คือชุดของฟังก์ชันที่เกือบจะเหมือนกันนั้นพบได้ตามปกติ วิชวลเบสิกและ VBScript และฟังก์ชันจำนวนมากเหล่านี้ที่มีชื่อและไวยากรณ์เหมือนกันจะพบได้ในภาษาการเขียนโปรแกรมอื่น ๆ เช่น C++, Delphi, Java, JavaScript เป็นต้น
ใน ในวิธีใช้ VBA ฟังก์ชันในตัวจะถูกจัดกลุ่มตามตัวอักษร (รูปที่ 3.2)
ผู้เข้าร่วมหลักสูตรหลายคนถามคำถาม: มีความช่วยเหลือเกี่ยวกับฟังก์ชันเหล่านี้ในภาษารัสเซียหรือไม่? ขออภัย ฉันไม่พบใบรับรองดังกล่าว ดังนั้นฉันจะพยายามจัดเตรียมให้ ข้อมูลโดยย่อในหนังสือเล่มนี้ ต่อไปเราจะพูดถึงฟังก์ชันส่วนใหญ่ของภาษา VBA ที่ใช้งานอยู่ (ฟังก์ชันทางคณิตศาสตร์ เช่น โคไซน์ หรือแทนเจนต์ ซึ่งก็คือ งานภาคปฏิบัติแทบไม่เคยใช้เลย และเราจะไม่พิจารณาฟังก์ชันทางการเงิน) เพื่อประหยัดพื้นที่จะไม่ได้รับไวยากรณ์แบบเต็มของฟังก์ชัน: สิ่งสำคัญคือการเข้าใจว่าแต่ละฟังก์ชันทำอะไรและในสถานการณ์ใดบ้างที่สามารถใช้งานได้
ฟังก์ชันในส่วนต่อไปนี้จะถูกจัดกลุ่มตามฟังก์ชันการทำงาน หากคุณต้องการค้นหาข้อมูลโดยใช้ชื่อฟังก์ชัน คุณสามารถใช้ดัชนีที่อยู่ท้ายเล่มได้
ข้าว. 3.2. ความช่วยเหลือเกี่ยวกับฟังก์ชันในตัว
3.9.2. ฟังก์ชั่นการตรวจสอบการแปลงและประเภทข้อมูล
ในโปรแกรม VBA การแปลงค่าจากประเภทข้อมูลหนึ่งไปเป็นอีกประเภทหนึ่งเป็นเรื่องปกติมาก ต่อไปนี้เป็นสถานการณ์ทั่วไปบางประการเมื่อคุณต้องทำสิ่งนี้:
การแปลงค่าสตริงเป็นค่าตัวเลขเมื่อรับค่าจากผู้ใช้ผ่าน InputBox() ;
การแปลงค่าวันที่/เวลาเป็นค่าสตริงเมื่อเราจำเป็นต้องแสดงวันที่หรือเวลาอย่างสม่ำเสมอ โดยไม่คำนึงถึงการตั้งค่าภูมิภาคบนคอมพิวเตอร์ของผู้ใช้
การแปลงค่าจากสตริงเป็นวันที่/เวลาเพื่อใช้ฟังก์ชันวันที่/เวลาพิเศษ
ส่วนใหญ่แล้วในการแปลงชนิดข้อมูลจะใช้ฟังก์ชันที่มีชื่อประกอบด้วยคำนำหน้า "C" (จากคำว่า Convert) และชื่อของประเภทข้อมูล รายการฟังก์ชันเหล่านี้มีดังนี้: CBool(), CByte(), CCur(), CDate(),
CDbl(), CDec(), CInt(), CLng(), CSng(), CStr(), CVar(), CVDate(), CVErr()
คุณสามารถดูสิ่งที่เกิดขึ้นในท้ายที่สุดได้โดยใช้ฟังก์ชัน TypeName() ซึ่งจะส่งคืนชื่อของประเภทข้อมูลที่ใช้ เช่น:
nVar1 = CInt(InputBox("Enter a value")) MsgBox TypeName(nVar1)
ในกรณีนี้ ฟังก์ชันนี้จะส่งคืน "Integer"
นอกจากนี้ยังมีฟังก์ชันอื่นๆ อีกมากมายที่เป็นประโยชน์สำหรับการแปลง
Str() - อนุญาตให้คุณแปลงค่าตัวเลขเป็นสตริง ทำเกือบจะเหมือนกับ CStr() แต่จะแทรกช่องว่างก่อนจำนวนบวก
Val() - “ดึงออก” เฉพาะค่าตัวเลขจากตัวเลขและตัวอักษรผสมกัน ในกรณีนี้ ฟังก์ชันจะอ่านข้อมูลจากซ้ายไปขวาและหยุดที่ค่าแรกที่ไม่ใช่ตัวเลข (ค่าเดียวที่ไม่ใช่ตัวเลขที่อนุญาตคือจุด ซึ่งจะแยกส่วนจำนวนเต็มออกจากส่วนที่เป็นเศษส่วน) สะดวกมากเมื่อเราเขียนหน่วยการวัดหรือสกุลเงินที่สลับกับข้อมูลตัวเลข
IsNumeric() และ IsDate() - ตรวจสอบค่าความสอดคล้องเพื่อไม่ให้เกิดข้อผิดพลาดระหว่างการแปลง หากต้องการตรวจสอบความสอดคล้องกับค่าพิเศษ คุณสามารถใช้ฟังก์ชัน IsArray(), IsEmpty()
IsError(), IsMissing(), IsNull() และ IsObject() . ฟังก์ชันทั้งหมดนี้กลับมา
จริงหรือเท็จ ขึ้นอยู่กับผลลัพธ์ของการตรวจสอบค่าที่ส่งไปให้
Hex() และ Oct() - แปลงข้อมูลทศนิยมให้เป็นสตริงที่แสดงค่าเลขฐานสิบหกและฐานแปด
3.9.3. ฟังก์ชันสตริง
เหล่านี้เป็นฟังก์ชันที่ใช้บ่อยที่สุด สิ่งเหล่านี้มีความจำเป็นอย่างต่อเนื่อง และคุณจำเป็นต้องรู้จักพวกเขาเป็นอย่างดี
Asc() - ฟังก์ชั่นนี้ช่วยให้คุณส่งคืนรหัสตัวเลขสำหรับอักขระที่ส่งผ่าน ตัวอย่างเช่น Asc("D") จะส่งกลับ 68 ฟังก์ชันนี้มีประโยชน์ในการกำหนดตัวอักษรถัดไปหรือก่อนหน้า โดยปกติจะใช้ร่วมกับฟังก์ชัน Chr() ซึ่งดำเนินการผกผัน โดยจะส่งกลับอักขระตามรหัสตัวเลข ตัวอย่างเช่นรหัสนี้ใน Excel ช่วยให้คุณสามารถเขียนตัวอักษรของตัวอักษรรัสเซียตามลำดับจาก A ถึง U ในเซลล์ A1 ถึง A20:
หรี่ n, nCharCode เป็นจำนวนเต็ม n = 1
nCharCode = Asc("A") ทำในขณะที่ n<= 20
ActiveWorkbook.ActiveSheet.Range("A" & n).Value = Chr(nCharCode)
โครงสร้างไวยากรณ์ VBA และการเขียนโปรแกรม |
nCharCode = nCharCode + 1 ลูป
ตัวแปรของฟังก์ชันนี้คือ AscB() และ AscW() AscB() ส่งคืนเฉพาะไบต์แรกของรหัสตัวเลขสำหรับอักขระ ในขณะที่ AscW() ส่งคืนโค้ด Unicode สำหรับอักขระ
Chr() - ส่งคืนอักขระด้วยรหัสตัวเลข นอกจากใช้ร่วมกับฟังก์ชัน Asc() แล้ว (ดูตัวอย่างก่อนหน้านี้) คุณไม่สามารถทำได้หากไม่มีฟังก์ชันนี้ในอีกสถานการณ์หนึ่ง นั่นคือ เมื่อคุณต้องการเอาท์พุตอักขระบริการ ตัวอย่างเช่น เราต้องพิมพ์ค่า "Gazprom" (ในเครื่องหมายคำพูด) ใน Word เครื่องหมายคำพูดเป็นอักขระบริการ และความพยายามที่จะใช้สตริงเช่น:
Selection.Text = ""แก๊ซพรอม""
จะส่งผลให้เกิดข้อผิดพลาดทางไวยากรณ์ และนี่คือวิธีที่ทุกอย่างจะดี:
Selection.Text = Chr(34) & "แก๊ซพรอม" & Chr(34)
ฟังก์ชันนี้มีหลายรูปแบบ - ChrB() และ ChrW() ทำงานคล้ายกับตัวเลือกเดียวกันสำหรับฟังก์ชัน Asc()
InStr() และ InStrRev() เป็นฟังก์ชันยอดนิยมบางส่วน ช่วยให้คุณตรวจจับลำดับของอักขระในเนื้อความของตัวแปรสตริงและส่งคืนตำแหน่ง หากไม่พบลำดับ จะส่งคืนค่า 0 ฟังก์ชัน InStr() ค้นหาจากจุดเริ่มต้นของสตริง และ InStrRev() ค้นหาจากจุดสิ้นสุด
Left() , Right() , Mid() - อนุญาตให้คุณใช้จำนวนอักขระที่คุณระบุจากตัวแปรสตริงที่มีอยู่ทางซ้าย ขวา หรือตรงกลาง ตามลำดับ
Len() - ส่งกลับจำนวนอักขระในสตริง (ความยาวสตริง) มักใช้กับลูป การดำเนินการแทน ฯลฯ
LCase() และ UCase() - แปลงสตริงเป็นตัวพิมพ์เล็กและใหญ่ตามลำดับ มักใช้ในการเตรียมค่าเพื่อเปรียบเทียบเมื่อกรณีไม่สำคัญ (นามสกุล ชื่อบริษัท เมือง ฯลฯ)
LSet() และ RSet() - เติมตัวแปรหนึ่งด้วยสัญลักษณ์ของอีกตัวแปรหนึ่งโดยไม่ต้องเปลี่ยนความยาว (ซ้ายและขวา ตามลำดับ) อักขระพิเศษถูกตัดออกและแทนที่ช่องว่างสำหรับอักขระที่หายไป
LTrim() , RTrim() , Trim() - ลบช่องว่างทางซ้าย ขวา หรือทั้งซ้ายและขวา ตามลำดับ
แทนที่() - แทนที่ลำดับอักขระหนึ่งด้วยอีกลำดับหนึ่งในสตริง
Space() และ String() - ส่งคืนสตริงตามจำนวนช่องว่างหรืออักขระที่คุณระบุตามลำดับ โดยทั่วไปจะใช้ในรูปแบบ
ฟังก์ชั่น-ขั้นตอนเป็นขั้นตอน VBA ชนิดพิเศษที่ส่งคืนผลลัพธ์ ฟังก์ชันของกระบวนงานที่ผู้ใช้กำหนด เช่น ฟังก์ชันที่มีอยู่แล้วภายใน VBA สามารถมีอาร์กิวเมนต์เพิ่มเติมและตั้งชื่อได้ คุณไม่สามารถใช้เครื่องบันทึกมาโครเพื่อบันทึกฟังก์ชันขั้นตอนได้ แม้ว่าคุณจะสามารถแก้ไขมาโครที่เครื่องบันทึกบันทึกไว้และเปลี่ยนให้เป็นฟังก์ชันขั้นตอนได้ก็ตาม
ข้อแตกต่างที่สำคัญระหว่างฟังก์ชันโพรซีเดอร์และโพรซีเดอร์อื่นๆ นอกเหนือจากข้อเท็จจริงที่ว่าฟังก์ชันส่งคืนค่าและโพรซีเดอร์ไม่ได้คืนค่า ก็คือ ฟังก์ชันโพรซีเดอร์ใช้คีย์เวิร์ด การทำงานและ ฟังก์ชันสิ้นสุด.
ไวยากรณ์:
ชื่อฟังก์ชัน()
“คำสั่ง VBA
ฟังก์ชันสิ้นสุด
Function คือคีย์เวิร์ดที่ประกาศจุดเริ่มต้นของฟังก์ชัน
ชื่อ - ชื่อฟังก์ชั่น ชื่อฟังก์ชันเป็นไปตามกฎเดียวกันกับชื่อตัวระบุ VBA อื่นๆ
Arglist - รายการอาร์กิวเมนต์สำหรับฟังก์ชันนี้ องค์ประกอบเสริม
Type - ค่าส่งคืนฟังก์ชันชนิดใดก็ได้ หากไม่ได้กำหนดประเภท ผลลัพธ์ที่ส่งคืนโดยฟังก์ชันโพรซีเดอร์จะเป็นประเภท Variant
Name = expression คือการกำหนดฟังก์ชันที่จะบอก VBA ว่าฟังก์ชันควรส่งคืนค่าใด ซึ่งเป็นองค์ประกอบเสริม อย่างไรก็ตาม คุณควรรวมตัวดำเนินการที่ได้รับมอบหมายไว้ในฟังก์ชันขั้นตอนด้วยเสมอ
End Function - คำสำคัญที่สิ้นสุดฟังก์ชัน
แม้ว่าฟังก์ชันจะไม่มีอาร์กิวเมนต์ (เช่น Now, Date) คุณต้องใช้วงเล็บในการประกาศฟังก์ชัน
โดยทั่วไปแล้ว ฟังก์ชันได้รับการออกแบบมาเพื่อทำการคำนวณและส่งกลับผลลัพธ์ เมื่อประกาศฟังก์ชันโพรซีเดอร์ คุณจะต้องระบุชื่อของแต่ละอาร์กิวเมนต์ที่ส่งไปยังฟังก์ชัน ชื่ออาร์กิวเมนต์ในรายการจะถูกคั่นด้วยเครื่องหมายจุลภาคและต้องเป็นไปตามกฎที่ใช้กับตัวระบุ VBA ใดๆ
ด้านล่างนี้เป็นรายการการใช้ฟังก์ชันขั้นตอนง่ายๆ ที่จะลบช่องว่างนำหน้าและต่อท้าย และนับจำนวนอักขระในนิพจน์
หากไม่ใช้ฟังก์ชัน รายการจะมีลักษณะดังนี้:
จากตัวอย่างง่ายๆ นี้ ฉันคิดว่าแนวคิดหลักของการใช้ฟังก์ชันโพรซีเดอร์นั้นชัดเจน - ปรับปรุงความสามารถในการอ่านโค้ดโปรแกรมและลดขนาดลง (กล่าวอีกนัยหนึ่งคือ ฟังก์ชันโพรซีเดอร์จะถูกเขียนเมื่อโค้ด "ส่วน" เดียวกันเกิดขึ้นมากกว่า 2 -3 ครั้งในรหัสโปรแกรม) อันที่จริงถ้าฟังก์ชันโพรซีเดอร์ของเราไม่ได้มีเพียงบรรทัดเดียว แต่มี 10 บรรทัด และโค้ดโปรแกรมจะใช้ฟังก์ชันโพรซีเดอร์นี้ 5 ครั้ง ดังนั้นรายการโปรแกรมโดยรวมจะสั้นลง 38 บรรทัด
ตามที่ระบุไว้ก่อนหน้านี้ VBA จะส่งผ่านอาร์กิวเมนต์ทั้งหมดไปยังกระบวนงานฟังก์ชันเป็นประเภทตัวแปร คุณสามารถประกาศประเภทข้อมูลเฉพาะสำหรับแต่ละอาร์กิวเมนต์ในรายการอาร์กิวเมนต์ได้
ก่อนที่คุณจะเริ่มสร้างฟังก์ชัน VBA ของคุณเอง คุณควรทราบว่า Excel VBA มีคอลเลกชันฟังก์ชันที่มีอยู่แล้วภายในจำนวนมากซึ่งคุณสามารถใช้เมื่อเขียนโค้ดได้
รายการฟังก์ชันเหล่านี้สามารถดูได้ในตัวแก้ไข VBA:
- เปิดสมุดงาน Excel และเปิดตัวแก้ไข VBA (คลิกที่นี่ Alt+F11) จากนั้นคลิก F2.
- เลือกไลบรารีจากรายการแบบเลื่อนลงที่ด้านซ้ายบนของหน้าจอ วีบีเอ.
- รายการคลาสและฟังก์ชัน VBA ในตัวจะปรากฏขึ้น คลิกที่ชื่อฟังก์ชันเพื่อแสดงคำอธิบายสั้นๆ ที่ด้านล่างของหน้าต่าง กำลังกด F1จะเปิดหน้าความช่วยเหลือออนไลน์สำหรับฟังก์ชันนั้น
นอกจากนี้ คุณสามารถดูรายการฟังก์ชัน VBA ในตัวทั้งหมดพร้อมตัวอย่างได้บนเว็บไซต์ Visual Basic Developer Center
ฟังก์ชันที่กำหนดเองและขั้นตอนย่อยใน VBA
ใน Excel Visual Basic ชุดคำสั่งที่ทำงานเฉพาะเจาะจงจะถูกวางไว้ในกระบวนงาน การทำงาน(ฟังก์ชั่น) หรือ ย่อย(รูทีนย่อย) ความแตกต่างที่สำคัญระหว่างขั้นตอนต่างๆ การทำงานและ ย่อยนั่นคือขั้นตอน การทำงานส่งคืนผลลัพธ์ขั้นตอน ย่อย- เลขที่.
ดังนั้น หากคุณต้องการดำเนินการและรับผลลัพธ์บางอย่าง (เช่น รวมตัวเลขหลายตัว) โดยปกติจะใช้ขั้นตอนนี้ การทำงานและเพื่อที่จะดำเนินการบางอย่าง (เช่น เปลี่ยนการจัดรูปแบบของกลุ่มเซลล์) คุณต้องเลือกขั้นตอน ย่อย.
ข้อโต้แย้ง
ข้อมูลต่างๆ สามารถส่งผ่านไปยังขั้นตอน VBA ได้โดยใช้อาร์กิวเมนต์ รายการอาร์กิวเมนต์จะถูกระบุเมื่อมีการประกาศขั้นตอน ตัวอย่างเช่นขั้นตอน ย่อยใน VBA เพิ่มจำนวนเต็มที่ระบุ (จำนวนเต็ม) ลงในแต่ละเซลล์ในช่วงที่เลือก คุณสามารถส่งหมายเลขนี้ไปยังขั้นตอนโดยใช้อาร์กิวเมนต์ เช่นนี้
AddToCells ย่อย (i As Integer) ... สิ้นสุด Sub
ตระหนักดีว่ามีข้อโต้แย้งในขั้นตอนต่างๆ การทำงานและ ย่อยใน VBA เป็นทางเลือก ขั้นตอนบางอย่างไม่จำเป็นต้องมีข้อโต้แย้ง
อาร์กิวเมนต์เพิ่มเติม
ขั้นตอน VBA สามารถมีอาร์กิวเมนต์ที่เป็นทางเลือกได้ เหล่านี้เป็นอาร์กิวเมนต์ที่ผู้ใช้สามารถระบุได้หากต้องการและหากละเว้นขั้นตอนจะใช้ค่าเริ่มต้นสำหรับพวกเขา
ย้อนกลับไปที่ตัวอย่างก่อนหน้า หากต้องการสร้างอาร์กิวเมนต์จำนวนเต็มให้กับฟังก์ชันทางเลือก คุณจะต้องประกาศดังนี้:
AddToCells ย่อย (ตัวเลือก i As Integer = 0)
ในกรณีนี้คืออาร์กิวเมนต์จำนวนเต็ม ฉันค่าเริ่มต้นจะเป็น 0
อาจมีหลายอาร์กิวเมนต์ที่เป็นทางเลือกในขั้นตอนหนึ่ง โดยทั้งหมดจะแสดงอยู่ที่ส่วนท้ายของรายการอาร์กิวเมนต์
การส่งผ่านอาร์กิวเมนต์ตามค่าและโดยการอ้างอิง
อาร์กิวเมนต์ใน VBA สามารถส่งผ่านไปยังขั้นตอนได้สองวิธี:
- โดยVal– ผ่านการโต้แย้งตามค่า ซึ่งหมายความว่าเฉพาะค่า (นั่นคือ สำเนาของอาร์กิวเมนต์) เท่านั้นที่ถูกส่งผ่านไปยังโพรซีเดอร์ ดังนั้นการเปลี่ยนแปลงใด ๆ ที่ทำกับอาร์กิวเมนต์ภายในโพรซีเดอร์จะหายไปเมื่อออก
- โดยRef– ผ่านการโต้แย้งโดยการอ้างอิง นั่นคือขั้นตอนจะถูกส่งผ่านที่อยู่ที่แท้จริงของอาร์กิวเมนต์ในหน่วยความจำ การเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นกับอาร์กิวเมนต์ภายในขั้นตอนจะถูกบันทึกไว้เมื่อขั้นตอนดังกล่าวออก
การใช้คำสำคัญ โดยValหรือ โดยRefในการประกาศขั้นตอน คุณสามารถระบุได้อย่างชัดเจนว่าอาร์กิวเมนต์ถูกส่งผ่านไปยังขั้นตอนอย่างไร นี่คือภาพประกอบด้านล่างพร้อมตัวอย่าง:
โปรดจำไว้ว่าอาร์กิวเมนต์ใน VBA ถูกส่งผ่านโดยการอ้างอิงตามค่าเริ่มต้น กล่าวอีกนัยหนึ่งหากไม่ได้ใช้คำหลัก โดยValหรือ โดยRefจากนั้นอาร์กิวเมนต์จะถูกส่งผ่านโดยการอ้างอิง
ก่อนที่คุณจะเรียนรู้ขั้นตอนต่อไป การทำงานและ ย่อยในรายละเอียดเพิ่มเติม จะมีประโยชน์ในการดูคุณสมบัติและความแตกต่างระหว่างขั้นตอนทั้งสองประเภทนี้อีกครั้ง ต่อไปนี้เป็นการสนทนาสั้นๆ เกี่ยวกับขั้นตอน VBA การทำงานและ ย่อยและมีการแสดงตัวอย่างง่ายๆ
ขั้นตอน VBA "ฟังก์ชัน"
โปรแกรมแก้ไข VBA จดจำขั้นตอนดังกล่าว การทำงาน
ฟังก์ชัน...ฟังก์ชันสิ้นสุด
ดังที่ได้กล่าวไปแล้วขั้นตอน การทำงานใน VBA (ตรงข้ามกับ ย่อย) ส่งกลับค่า กฎต่อไปนี้ใช้กับค่าที่ส่งคืน:
- ประเภทข้อมูลของค่าตอบแทนจะต้องประกาศในส่วนหัวของขั้นตอน การทำงาน.
- ตัวแปรที่มีค่าส่งคืนต้องมีชื่อเหมือนกับขั้นตอน การทำงาน. ตัวแปรนี้ไม่จำเป็นต้องประกาศแยกกัน เนื่องจากตัวแปรนี้จะเป็นส่วนหนึ่งของกระบวนการเสมอ การทำงาน.
นี่เป็นตัวอย่างที่สมบูรณ์แบบในตัวอย่างต่อไปนี้
ตัวอย่างของขั้นตอน VBA “ฟังก์ชัน”: การดำเนินการทางคณิตศาสตร์ด้วยตัวเลข 3 ตัว
ด้านล่างนี้เป็นตัวอย่างโค้ดขั้นตอน VBA การทำงานซึ่งรับสามอาร์กิวเมนต์ประเภท สองเท่า(ตัวเลขจุดลอยตัวที่มีความแม่นยำสองเท่า) เป็นผลให้โพรซีเดอร์ส่งคืนหมายเลขประเภทอื่น สองเท่าเท่ากับผลรวมของสองอาร์กิวเมนต์แรกลบด้วยอาร์กิวเมนต์ที่สาม:
ฟังก์ชัน SumMinus(dNum1 As Double, dNum2 As Double, dNum3 As Double) As Double SumMinus = dNum1 + dNum2 - dNum3 ฟังก์ชันสิ้นสุด
นี่เป็นขั้นตอน VBA ที่ง่ายมาก การทำงานแสดงให้เห็นว่าข้อมูลถูกส่งไปยังขั้นตอนผ่านการโต้แย้งอย่างไร คุณจะเห็นว่าประเภทข้อมูลที่ส่งคืนโดยขั้นตอนถูกกำหนดเป็น สองเท่า(คำกล่าวนี้ เป็นสองเท่าหลังรายการข้อโต้แย้ง) ตัวอย่างนี้ยังแสดงผลลัพธ์ของขั้นตอนอีกด้วย การทำงานถูกจัดเก็บไว้ในตัวแปรที่มีชื่อเดียวกับชื่อโพรซีเดอร์
การเรียกขั้นตอน VBA "ฟังก์ชัน"
หากเป็นขั้นตอนง่ายๆ ที่กล่าวมาข้างต้น การทำงานเมื่อแทรกลงในโมดูลในตัวแก้ไข Visual Basic ก็สามารถเรียกได้จากขั้นตอน VBA อื่น ๆ หรือใช้บนแผ่นงานในสมุดงาน Excel
การเรียกขั้นตอน VBA "ฟังก์ชัน" จากขั้นตอนอื่น
ขั้นตอน การทำงานสามารถเรียกได้จากขั้นตอน VBA อื่นโดยเพียงกำหนดขั้นตอนนี้ให้กับตัวแปร ตัวอย่างต่อไปนี้แสดงการเรียกขั้นตอน ผลรวมลบซึ่งกำหนดไว้ข้างต้น
Sub main() รวม Dim รวมเป็นสองเท่า = SumMinus (5, 4, 3) End Sub
การเรียกขั้นตอน VBA "ฟังก์ชัน" จากแผ่นงาน
ขั้นตอน VBA การทำงานสามารถเรียกจากแผ่นงาน Excel ได้ในลักษณะเดียวกับฟังก์ชัน Excel อื่นๆ ที่มีอยู่แล้วภายใน ดังนั้นขั้นตอนที่สร้างขึ้นในตัวอย่างก่อนหน้านี้ การทำงาน – ผลรวมลบสามารถเรียกได้โดยการป้อนนิพจน์ต่อไปนี้ลงในเซลล์แผ่นงาน:
ผลรวมลบ(10, 5, 2)
ขั้นตอน VBA "ย่อย"
โปรแกรมแก้ไข VBA เข้าใจว่ามีขั้นตอนอยู่ตรงหน้าเขา ย่อยเมื่อพบกลุ่มคำสั่งที่อยู่ระหว่างคำสั่งเปิดและปิดต่อไปนี้:
ย่อย...จบย่อย
ขั้นตอน VBA "ย่อย": ตัวอย่าง 1. การจัดกึ่งกลางและเปลี่ยนขนาดแบบอักษรในช่วงของเซลล์ที่เลือก
มาดูตัวอย่างขั้นตอน VBA แบบง่ายๆ กัน ย่อยซึ่งมีหน้าที่เปลี่ยนการจัดรูปแบบของช่วงเซลล์ที่เลือก เซลล์ถูกตั้งค่าให้จัดกึ่งกลาง (ทั้งแนวตั้งและแนวนอน) และขนาดตัวอักษรจะเปลี่ยนเป็นขนาดที่ผู้ใช้ระบุ:
Sub Format_Centered_And_Sized (ตัวเลือก iFontSize As Integer = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub
ขั้นตอนนี้ ย่อยดำเนินการแต่ไม่ส่งคืนผลลัพธ์
ตัวอย่างนี้ยังใช้อาร์กิวเมนต์เพิ่มเติมอีกด้วย iFontSize. ถ้าจะโต้แย้ง. iFontSizeไม่ผ่านขั้นตอน ย่อยจากนั้นค่าเริ่มต้นจะถือเป็น 10 อย่างไรก็ตามหากอาร์กิวเมนต์ iFontSizeผ่านไปตามขั้นตอน ย่อยจากนั้นขนาดตัวอักษรที่ผู้ใช้ระบุจะถูกตั้งค่าในช่วงของเซลล์ที่เลือก
ขั้นตอน VBA “ย่อย”: ตัวอย่างที่ 2 การจัดกึ่งกลางและการใช้ตัวหนากับแบบอักษรในช่วงของเซลล์ที่เลือก
ขั้นตอนถัดไปจะคล้ายกับขั้นตอนที่เพิ่งกล่าวถึง แต่คราวนี้ แทนที่จะเปลี่ยนขนาด กลับใช้ลักษณะแบบอักษรตัวหนากับช่วงของเซลล์ที่เลือก นี่เป็นขั้นตอนตัวอย่าง ย่อยซึ่งไม่มีการส่งผ่านข้อโต้แย้ง:
Sub Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub
เรียกขั้นตอน "ย่อย" ใน Excel VBA
การเรียกขั้นตอน VBA "Sub" จากขั้นตอนอื่น
เมื่อต้องการเรียกขั้นตอน VBA ย่อยจากขั้นตอน VBA อื่น คุณต้องจดคำหลักไว้ เรียก, ชื่อขั้นตอน ย่อยแล้วใส่ข้อโต้แย้งของขั้นตอนไว้ในวงเล็บ นี่แสดงในตัวอย่างด้านล่าง:
ย่อย main() โทร Format_Centered_And_Sized(20) สิ้นสุดย่อย
ถ้าตามขั้นตอน Format_Centered_And_Sizedมีมากกว่าหนึ่งอาร์กิวเมนต์ ต้องคั่นด้วยลูกน้ำ แบบนี้:
หลักย่อย () โทร Format_Centered_And_Sized (arg1, arg2, ... ) สิ้นสุดย่อย
การเรียกขั้นตอน VBA "ย่อย" จากแผ่นงาน
ขั้นตอน ย่อยไม่สามารถป้อนลงในเซลล์แผ่นงาน Excel ได้โดยตรง เช่นเดียวกับที่สามารถทำได้ด้วยขั้นตอน การทำงานเนื่องจากขั้นตอน ย่อยไม่ส่งคืนค่า อย่างไรก็ตามขั้นตอนต่างๆ ย่อยซึ่งไม่มีข้อโต้แย้งและถูกประกาศว่าเป็น สาธารณะ(ดังที่จะแสดงในภายหลัง) จะพร้อมใช้งานสำหรับผู้ใช้เวิร์กชีท ดังนั้นหากทำตามขั้นตอนง่ายๆ ที่กล่าวมาข้างต้น ย่อยแทรกลงในโมดูลในตัวแก้ไข Visual Basic จากนั้นทำตามขั้นตอน Format_Centered_And_Boldจะสามารถใช้งานได้บนแผ่นงาน Excel และขั้นตอน Format_Centered_And_Sized– จะไม่สามารถใช้ได้เนื่องจากมีข้อโต้แย้ง
นี่เป็นวิธีง่ายๆ ในการรัน (หรือดำเนินการ) ขั้นตอน ย่อยหาได้จากแผ่นงาน:
- คลิก Alt+F8(กดปุ่ม Altและในขณะที่กดค้างไว้ ให้กดปุ่ม F8).
- ในรายการแมโครที่ปรากฏขึ้น ให้เลือกมาโครที่คุณต้องการเรียกใช้
- คลิก ดำเนินการ(วิ่ง)
เพื่อดำเนินการตามขั้นตอน ย่อยได้อย่างรวดเร็วและง่ายดาย คุณสามารถกำหนดคีย์ผสมให้กับมันได้ สำหรับสิ่งนี้:
- คลิก Alt+F8.
- ในรายการแมโครที่ปรากฏขึ้น ให้เลือกมาโครที่คุณต้องการกำหนดแป้นพิมพ์ลัดให้
- คลิก ตัวเลือก(ตัวเลือก) และป้อนแป้นพิมพ์ลัดในกล่องโต้ตอบที่ปรากฏขึ้น
- คลิก ตกลงและปิดกล่องโต้ตอบ มาโคร(มาโคร).
ความสนใจ:เมื่อกำหนดแป้นพิมพ์ลัดให้กับมาโคร ตรวจสอบให้แน่ใจว่าไม่ได้ใช้เหมือนมาโครมาตรฐานใน Excel (ตัวอย่างเช่น Ctrl+C). หากคุณเลือกแป้นพิมพ์ลัดที่มีอยู่ แป้นพิมพ์ลัดดังกล่าวจะถูกกำหนดใหม่ให้กับแมโคร และด้วยเหตุนี้ ผู้ใช้อาจทริกเกอร์แมโครโดยไม่ตั้งใจ
ขอบเขตขั้นตอน VBA
ส่วนที่ 2 ของบทช่วยสอนนี้กล่าวถึงหัวข้อขอบเขตของตัวแปรและค่าคงที่ และบทบาทของคำหลัก สาธารณะและ ส่วนตัว. คำสำคัญเหล่านี้ยังสามารถใช้เพื่อเกี่ยวข้องกับขั้นตอน VBA:
จำไว้ว่าถ้าก่อนที่จะประกาศขั้นตอน VBA การทำงานหรือ ย่อยไม่ได้แทรกคำสำคัญ ดังนั้นคุณสมบัติเริ่มต้นสำหรับขั้นตอนจะถูกตั้งค่า สาธารณะ(นั่นคือ จะพร้อมใช้งานทุกที่ในโครงการ VBA ที่ระบุ) สิ่งนี้แตกต่างจากการประกาศตัวแปรซึ่งโดยค่าเริ่มต้นคือ ส่วนตัว.
ออกจากขั้นตอน VBA ก่อนกำหนด "ฟังก์ชัน" และ "ย่อย"
หากคุณต้องการยุติการดำเนินการตามขั้นตอน VBA การทำงานหรือ ย่อยโดยไม่ต้องรอให้จุดจบตามธรรมชาติของมัน ก็จะมีผู้ดำเนินการสำหรับสิ่งนี้ ออกจากฟังก์ชันและ ออกจากย่อย. การใช้ตัวดำเนินการเหล่านี้แสดงไว้ด้านล่างโดยใช้ตัวอย่างขั้นตอนง่ายๆ การทำงานซึ่งคาดว่าจะได้รับข้อโต้แย้งเชิงบวกเพื่อดำเนินการต่อไป หากส่งค่าที่ไม่ใช่ค่าบวกไปยังขั้นตอนดังกล่าว จะไม่สามารถดำเนินการใดๆ เพิ่มเติมได้ ดังนั้นผู้ใช้จะต้องได้รับข้อความแสดงข้อผิดพลาดและขั้นตอนจะต้องยุติทันที:
ฟังก์ชัน VAT_Amount(sVAT_Rate As Single) เป็น VAT_Amount เดี่ยว = 0 ถ้า sVAT_Rate<= 0 Then MsgBox "Expected a Positive value of sVAT_Rate but Received " & sVAT_Rate Exit Function End If ... End Function
โปรดทราบว่าก่อนที่จะเสร็จสิ้นขั้นตอน การทำงาน – VAT_จำนวนฟังก์ชัน VBA ในตัวจะถูกแทรกลงในโค้ด กล่องข้อความซึ่งจะแสดงหน้าต่างคำเตือนป๊อปอัปให้ผู้ใช้เห็น
เมื่อเขียนโค้ด VBA ใน Excel จะมีการใช้ชุดตัวดำเนินการในตัวในทุกขั้นตอน ตัวดำเนินการเหล่านี้แบ่งออกเป็นตัวดำเนินการทางคณิตศาสตร์ สตริง การเปรียบเทียบ และตัวดำเนินการเชิงตรรกะ ต่อไปเราจะมาดูรายละเอียดของโอเปอเรเตอร์แต่ละกลุ่มกัน
ตัวดำเนินการทางคณิตศาสตร์
ตัวดำเนินการทางคณิตศาสตร์ VBA พื้นฐานแสดงอยู่ในตารางด้านล่าง
คอลัมน์ด้านขวาของตารางแสดงลำดับความสำคัญของตัวดำเนินการเริ่มต้นในกรณีที่ไม่มีวงเล็บ ด้วยการเพิ่มวงเล็บในนิพจน์ คุณสามารถเปลี่ยนลำดับการดำเนินการคำสั่ง VBA ได้ตามต้องการ
ตัวดำเนินการสตริง
ตัวดำเนินการสตริงหลักใน Excel VBA คือตัวดำเนินการต่อข้อมูล & (ผสาน):
ตัวดำเนินการเปรียบเทียบ
ตัวดำเนินการเปรียบเทียบใช้เพื่อเปรียบเทียบตัวเลขหรือสตริงสองตัว และส่งกลับค่าบูลีน เช่น บูลีน(จริงหรือเท็จ) ตัวดำเนินการเปรียบเทียบ Excel VBA หลักแสดงอยู่ในตารางนี้:
ตัวดำเนินการเชิงตรรกะ
ตัวดำเนินการเชิงตรรกะ เช่น ตัวดำเนินการเปรียบเทียบ จะส่งกลับค่าบูลีนของประเภท บูลีน(จริงหรือเท็จ) ตัวดำเนินการทางลอจิคัล Excel VBA พื้นฐานแสดงอยู่ในตารางด้านล่าง:
ตารางด้านบนไม่ได้แสดงรายการตัวดำเนินการบูลีนทั้งหมดที่มีอยู่ใน VBA รายชื่อตัวดำเนินการเชิงตรรกะทั้งหมดสามารถพบได้ใน Visual Basic Developer Center
ฟังก์ชั่นในตัว
มีฟังก์ชันในตัวมากมายใน VBA ที่สามารถนำมาใช้ในการเขียนโค้ดได้ ด้านล่างนี้คือบางส่วนที่ใช้บ่อยที่สุด:
การทำงาน | การกระทำ |
---|---|
หน้าท้อง | ส่งกลับค่าสัมบูรณ์ของตัวเลขที่กำหนด
|
ค | ส่งกลับอักขระ ANSI ที่สอดคล้องกับค่าตัวเลขของพารามิเตอร์
|
วันที่ | ส่งกลับวันที่ของระบบปัจจุบัน |
วันที่เพิ่ม | เพิ่มช่วงเวลาเฉพาะให้กับวันที่ที่กำหนด ไวยากรณ์ของฟังก์ชัน: วันที่เพิ่ม( ช่วงเวลา , ตัวเลข , วันที่ ) ข้อโต้แย้งอยู่ที่ไหน ช่วงเวลากำหนดประเภทของช่วงเวลาที่เพิ่มให้กับที่กำหนด วันที่ตามจำนวนที่ระบุในอาร์กิวเมนต์ ตัวเลข . การโต้แย้ง ช่วงเวลาสามารถใช้ค่าใดค่าหนึ่งต่อไปนี้:
|
DateDiff | คำนวณจำนวนช่วงเวลาที่ระบุระหว่างวันที่ที่กำหนดสองวัน
|
วัน | ส่งกลับจำนวนเต็มที่สอดคล้องกับวันของเดือนในวันที่ที่กำหนด ตัวอย่าง: วัน(“01/29/2558”)ส่งกลับหมายเลข 29 |
ชั่วโมง | ส่งกลับจำนวนเต็มที่สอดคล้องกับจำนวนชั่วโมงในเวลาที่กำหนด ตัวอย่าง: ชั่วโมง(“22:45:00”)ส่งกลับหมายเลข 22 |
InStr | รับจำนวนเต็มและสองสตริงเป็นอาร์กิวเมนต์ ส่งกลับตำแหน่งที่เกิดของสตริงที่สองภายในสตริงแรก โดยเริ่มต้นการค้นหาในตำแหน่งที่ระบุด้วยจำนวนเต็ม
บันทึก:ไม่สามารถระบุอาร์กิวเมนต์ตัวเลขได้ ในกรณีนี้การค้นหาจะเริ่มต้นจากอักขระตัวแรกของสตริงที่ระบุในอาร์กิวเมนต์ที่สองของฟังก์ชัน |
นานาชาติ | ส่งกลับส่วนจำนวนเต็มของตัวเลขที่กำหนด ตัวอย่าง: อินท์(5.79)ส่งคืนผลลัพธ์ 5 |
ไอดาเตะ | การส่งคืน จริงถ้าค่าที่กำหนดเป็นวันที่หรือ เท็จ– หากไม่ใช่การออกเดท
|
เป็นข้อผิดพลาด | การส่งคืน จริงหากค่าที่กำหนดเป็นข้อผิดพลาด หรือ เท็จ- ถ้าไม่ใช่ข้อผิดพลาด |
ที่ขาดหายไป | ชื่อของอาร์กิวเมนต์ของขั้นตอนทางเลือกจะถูกส่งผ่านเป็นอาร์กิวเมนต์ของฟังก์ชัน ที่ขาดหายไปผลตอบแทน จริงหากไม่มีการส่งผ่านค่าสำหรับอาร์กิวเมนต์ของโพรซีเดอร์ที่เป็นปัญหา |
เป็นตัวเลข | การส่งคืน จริงหากค่าที่กำหนดถือเป็นตัวเลขได้ มิฉะนั้นจะส่งคืน เท็จ. |
ซ้าย | ส่งกลับจำนวนอักขระที่ระบุจากจุดเริ่มต้นของสตริงที่ส่งผ่าน ไวยากรณ์ของฟังก์ชันคือ: ซ้าย( เส้น , ความยาว ) ที่ไหน เส้นเป็นสตริงดั้งเดิมและ ความยาว– จำนวนอักขระที่ส่งคืน นับจากต้นบรรทัด
|
เลน | ส่งกลับจำนวนอักขระในสตริง ตัวอย่าง: เลน("abvgdez")ส่งกลับหมายเลข 7 |
เดือน | ส่งกลับจำนวนเต็มที่สอดคล้องกับเดือนในวันที่ที่กำหนด ตัวอย่าง: เดือน(“01/29/2558”)ส่งกลับค่า 1 |
กลาง | ส่งกลับจำนวนอักขระที่ระบุจากตรงกลางของสตริงที่ส่งผ่าน ไวยากรณ์ของฟังก์ชัน: กลาง( เส้น , เริ่ม , ความยาว ) ที่ไหน เส้นคือสายเดิม เริ่ม– ตำแหน่งของจุดเริ่มต้นของสตริงที่แยกออกมา ความยาว– จำนวนตัวอักษรที่ต้องการแยก
|
นาที | ส่งกลับจำนวนเต็มที่สอดคล้องกับจำนวนนาทีในเวลาที่กำหนด ตัวอย่าง: นาที(“22:45:15”)ส่งกลับค่า 45 |
ตอนนี้ | ส่งกลับวันที่และเวลาของระบบปัจจุบัน |
ขวา | ส่งกลับจำนวนอักขระที่ระบุจากส่วนท้ายของสตริงที่ส่งผ่าน ไวยากรณ์ของฟังก์ชัน: ขวา( เส้น , ความยาว ) ที่ไหน เส้นเป็นสตริงดั้งเดิมและ ความยาว– นี่คือจำนวนอักขระที่ต้องแยก โดยนับจากจุดสิ้นสุดของสตริงที่กำหนด
|
ที่สอง | ส่งกลับจำนวนเต็มที่สอดคล้องกับจำนวนวินาทีในเวลาที่กำหนด ตัวอย่าง: ที่สอง (“22:45:15”)ส่งกลับค่า 15 |
ตร.ม | ส่งคืนค่ารากที่สองของค่าตัวเลขที่ส่งเป็นอาร์กิวเมนต์
|
เวลา | ส่งกลับเวลาของระบบปัจจุบัน |
อุบล | ส่งคืนค่าตัวยกของมิติของอาร์เรย์ที่ระบุ บันทึก:สำหรับอาร์เรย์หลายมิติ อาร์กิวเมนต์ทางเลือกสามารถระบุดัชนีของมิติที่ควรส่งคืน หากไม่ได้ระบุ จะมีค่าเริ่มต้นเป็น 1 |