ฟังก์ชัน vba ในตัว วีบีเอ เอ็กเซล ฟังก์ชันแบบกำหนดเอง (ไวยากรณ์ ส่วนประกอบ) การสร้างฟังก์ชันใน VBA ด้วยอาร์กิวเมนต์หลายตัว

ฟังก์ชันที่เขียนใน VBA คือโค้ดที่ทำการคำนวณและส่งกลับค่า (หรืออาร์เรย์ของค่า) เมื่อคุณสร้างฟังก์ชันแล้ว คุณจะสามารถใช้งานได้สามวิธี:

  1. เป็นสูตรในเวิร์กชีตที่สามารถรับอาร์กิวเมนต์และส่งกลับค่าได้
  2. เป็นส่วนหนึ่งของรูทีน VBA ของคุณ ในขั้นตอนย่อยหรือภายในฟังก์ชันอื่นๆ
  3. ในกฎการจัดรูปแบบตามเงื่อนไข

แม้ว่า 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 ที่สามารถนำมาใช้ในการเขียนโค้ดได้ ด้านล่างนี้คือบางส่วนที่ใช้บ่อยที่สุด:

การทำงาน การกระทำ
หน้าท้อง ส่งกลับค่าสัมบูรณ์ของตัวเลขที่กำหนด
  • หน้าท้อง(-20)ส่งกลับค่า 20;
  • หน้าท้อง(20)ส่งกลับค่า 20
ส่งกลับอักขระ ANSI ที่สอดคล้องกับค่าตัวเลขของพารามิเตอร์
  • ช.(10)ส่งคืนตัวแบ่งบรรทัด;
  • ช.(97)ส่งคืนอักขระ .
วันที่ ส่งกลับวันที่ของระบบปัจจุบัน
วันที่เพิ่ม เพิ่มช่วงเวลาเฉพาะให้กับวันที่ที่กำหนด ไวยากรณ์ของฟังก์ชัน:

วันที่เพิ่ม( ช่วงเวลา , ตัวเลข , วันที่ )

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

การโต้แย้ง ช่วงเวลาสามารถใช้ค่าใดค่าหนึ่งต่อไปนี้:

  • วันที่เพิ่ม("d", 32, "01/01/2015")บวก 32 วันเข้ากับวันที่ 01/01/2558 และส่งกลับวันที่ 02/02/2558
  • DateAdd(“ww”, 36, “01/01/2015”)บวก 36 สัปดาห์เข้ากับวันที่ 01/01/2015 และส่งคืนวันที่ 09/09/2015
DateDiff คำนวณจำนวนช่วงเวลาที่ระบุระหว่างวันที่ที่กำหนดสองวัน
  • DateDiff(“d”, “01/01/2558”, “02/02/2558”)คำนวณจำนวนวันระหว่างวันที่ 01/01/2558 ถึง 02/02/2558 โดยส่งคืนผลลัพธ์ 32
  • DateDiff(“ww”, “01/01/2558”, “03/03/2559”)คำนวณจำนวนสัปดาห์ระหว่างวันที่ 01/01/2558 ถึง 03/03/2559 โดยส่งคืนผลลัพธ์ 61
วัน ส่งกลับจำนวนเต็มที่สอดคล้องกับวันของเดือนในวันที่ที่กำหนด

ตัวอย่าง: วัน(“01/29/2558”)ส่งกลับหมายเลข 29

ชั่วโมง ส่งกลับจำนวนเต็มที่สอดคล้องกับจำนวนชั่วโมงในเวลาที่กำหนด

ตัวอย่าง: ชั่วโมง(“22:45:00”)ส่งกลับหมายเลข 22

InStr รับจำนวนเต็มและสองสตริงเป็นอาร์กิวเมนต์ ส่งกลับตำแหน่งที่เกิดของสตริงที่สองภายในสตริงแรก โดยเริ่มต้นการค้นหาในตำแหน่งที่ระบุด้วยจำนวนเต็ม
  • InStr(1, “นี่คือคำที่คุณกำลังมองหา”, “คำ”)ส่งกลับหมายเลข 13
  • InStr(14, “นี่คือคำค้นหา และนี่คือคำค้นหาอื่น”, “คำ”)ส่งกลับหมายเลข 38

บันทึก:ไม่สามารถระบุอาร์กิวเมนต์ตัวเลขได้ ในกรณีนี้การค้นหาจะเริ่มต้นจากอักขระตัวแรกของสตริงที่ระบุในอาร์กิวเมนต์ที่สองของฟังก์ชัน

นานาชาติ ส่งกลับส่วนจำนวนเต็มของตัวเลขที่กำหนด

ตัวอย่าง: อินท์(5.79)ส่งคืนผลลัพธ์ 5

ไอดาเตะ การส่งคืน จริงถ้าค่าที่กำหนดเป็นวันที่หรือ เท็จ– หากไม่ใช่การออกเดท
  • IsDate(“01/01/2015”)ผลตอบแทน จริง;
  • อิสเดท(100)ผลตอบแทน เท็จ.
เป็นข้อผิดพลาด การส่งคืน จริงหากค่าที่กำหนดเป็นข้อผิดพลาด หรือ เท็จ- ถ้าไม่ใช่ข้อผิดพลาด
ที่ขาดหายไป ชื่อของอาร์กิวเมนต์ของขั้นตอนทางเลือกจะถูกส่งผ่านเป็นอาร์กิวเมนต์ของฟังก์ชัน ที่ขาดหายไปผลตอบแทน จริงหากไม่มีการส่งผ่านค่าสำหรับอาร์กิวเมนต์ของโพรซีเดอร์ที่เป็นปัญหา
เป็นตัวเลข การส่งคืน จริงหากค่าที่กำหนดถือเป็นตัวเลขได้ มิฉะนั้นจะส่งคืน เท็จ.
ซ้าย ส่งกลับจำนวนอักขระที่ระบุจากจุดเริ่มต้นของสตริงที่ส่งผ่าน ไวยากรณ์ของฟังก์ชันคือ:

ซ้าย( เส้น , ความยาว )

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

  • ซ้าย("abvgdezziklmn", 4)ส่งกลับสตริง “abvg”;
  • ซ้าย(“abvgdezziklmn”, 1)ส่งคืนสตริง "a"
เลน ส่งกลับจำนวนอักขระในสตริง

ตัวอย่าง: เลน("abvgdez")ส่งกลับหมายเลข 7

เดือน ส่งกลับจำนวนเต็มที่สอดคล้องกับเดือนในวันที่ที่กำหนด

ตัวอย่าง: เดือน(“01/29/2558”)ส่งกลับค่า 1

กลาง ส่งกลับจำนวนอักขระที่ระบุจากตรงกลางของสตริงที่ส่งผ่าน ไวยากรณ์ของฟังก์ชัน:

กลาง( เส้น , เริ่ม , ความยาว )

ที่ไหน เส้นคือสายเดิม เริ่ม– ตำแหน่งของจุดเริ่มต้นของสตริงที่แยกออกมา ความยาว– จำนวนตัวอักษรที่ต้องการแยก

  • กลาง(“abvgdezziklmn”, 4, 5)ส่งคืนสตริง “where”;
  • กลาง(“abvgdezziklmn”, 10, 2)ส่งคืนสตริง "cl"
นาที ส่งกลับจำนวนเต็มที่สอดคล้องกับจำนวนนาทีในเวลาที่กำหนด ตัวอย่าง: นาที(“22:45:15”)ส่งกลับค่า 45
ตอนนี้ ส่งกลับวันที่และเวลาของระบบปัจจุบัน
ขวา ส่งกลับจำนวนอักขระที่ระบุจากส่วนท้ายของสตริงที่ส่งผ่าน ไวยากรณ์ของฟังก์ชัน:

ขวา( เส้น , ความยาว )

ที่ไหน เส้นเป็นสตริงดั้งเดิมและ ความยาว– นี่คือจำนวนอักขระที่ต้องแยก โดยนับจากจุดสิ้นสุดของสตริงที่กำหนด

  • ขวา(“abvgdezziklmn”, 4)ส่งกลับสตริง “clmn”;
  • ขวา(“abvgdezziklmn”, 1)ส่งคืนสตริง "n"
ที่สอง ส่งกลับจำนวนเต็มที่สอดคล้องกับจำนวนวินาทีในเวลาที่กำหนด

ตัวอย่าง: ที่สอง (“22:45:15”)ส่งกลับค่า 15

ตร.ม ส่งคืนค่ารากที่สองของค่าตัวเลขที่ส่งเป็นอาร์กิวเมนต์
  • ตร.ม.(4)ส่งกลับค่า 2;
  • ตร.ม.(16)ส่งกลับค่า 4
เวลา ส่งกลับเวลาของระบบปัจจุบัน
อุบล ส่งคืนค่าตัวยกของมิติของอาร์เรย์ที่ระบุ

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