สารบัญ
ในขณะที่ทำงานกับโค้ด VBA ของ Excel เราพบฟังก์ชันที่มีอยู่แล้วภายในไม่กี่ฟังก์ชันที่แปลงงานที่ซับซ้อนให้เป็นโค้ดบรรทัดเดียวขนาดเล็ก InStr เป็นฟังก์ชันที่มีอยู่ใน Excel VBA ที่ค้นหาสตริงเฉพาะภายในสตริงที่กำหนดโดยเริ่มจากตำแหน่งที่กำหนด วันนี้ฉันจะแสดงวิธีที่คุณสามารถใช้ฟังก์ชัน InStr ใน VBA เพื่อค้นหาสตริงเฉพาะภายในสตริงอื่นที่กำหนด
ดาวน์โหลดสมุดงานแบบฝึกหัด
InStr Function.xlsm
ความรู้เบื้องต้นเกี่ยวกับ VBA InStr Function
- สรุป
ค้นหาสตริงเฉพาะภายในสตริงที่กำหนด โดยเริ่มจากตำแหน่งที่กำหนด หากพบการจับคู่ ให้ส่งคืนตำแหน่งในสตริงที่กำหนดจากตำแหน่งที่การจับคู่เริ่มต้น
- ไวยากรณ์
InStr([start ],string1,string2,[เปรียบเทียบ])
- อาร์กิวเมนต์
อาร์กิวเมนต์ | ข้อกำหนด | คำอธิบาย
|
---|---|---|
[start] | ไม่บังคับ | ตำแหน่งที่จะเริ่มค้นหา ค่าเริ่มต้นคือ 1 |
string1 | จำเป็น | สตริงที่ค้นหาสตริงที่กำหนด |
string2 | จำเป็น | สตริงที่ค้นหาภายในสตริงที่กำหนด |
[เปรียบเทียบ] | ไม่บังคับ | ค่าตัวเลขระหว่าง {-1,0,1,2} ที่ระบุประเภทของการเปรียบเทียบ เดอะค่าเริ่มต้นคือ -1 (vbUseCompareOption) หากไม่ได้ระบุคำสั่งเปรียบเทียบตัวเลือก ให้ดำเนินการเปรียบเทียบแบบไบนารี |
หมายเหตุ:
- แม้ว่า [start] อาร์กิวเมนต์และอาร์กิวเมนต์ [compare] เป็นทางเลือก คุณต้องใช้อาร์กิวเมนต์ [start] หากคุณระบุอาร์กิวเมนต์ [compare] มิฉะนั้นจะทำให้เกิดข้อผิดพลาด
- หากอาร์กิวเมนต์ [start] ตัวใดตัวหนึ่งหรือทั้งสองตัวและอาร์กิวเมนต์ [compare] ตัวใดตัวหนึ่งเป็น Null คุณจะพบข้อผิดพลาด
- ค่าที่ระบุสี่ค่าในอาร์กิวเมนต์ [compare] ทำการเปรียบเทียบสี่ประเภทที่แตกต่างกัน มีการระบุไว้ด้านล่าง:
VALUE | คงที่ | DESCRIPTION
|
---|---|---|
-1 | vbUseCompareOption | ดำเนินการเปรียบเทียบที่ระบุใน คำสั่งเปรียบเทียบตัวเลือก |
0 | vbBinaryCompare | ทำการเปรียบเทียบแบบไบนารี |
1 | vbTextCompare | ทำการเปรียบเทียบข้อความ |
2 | vbDatabaseCompare | ทำการเปรียบเทียบตามฐานข้อมูลของคุณ คำสั่ง |
- ตัวเลือกเปรียบเทียบ เป็นคำสั่งที่ให้ไว้ก่อนที่จะเริ่มโค้ด VBA หลัก โดยจะระบุว่าโค้ดจะค้นหาการเปรียบเทียบแบบไบนารีหรือการเปรียบเทียบข้อความเมื่อจำเป็น
ตัวเลือกเปรียบเทียบข้อความ
-
- ในแง่ง่ายๆ การเปรียบเทียบแบบไบนารี หมายถึงการพิจารณาตัวพิมพ์เล็กและใหญ่การเปรียบเทียบ
- ในแง่ง่ายๆ การเปรียบเทียบข้อความ หมายถึงการเปรียบเทียบโดยไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่
- ค่าที่ส่งคืน
- ส่งกลับตำแหน่งใน string1 จากที่เริ่มต้น string2
- ในกรณีที่ไม่พบ string2 ภายใน string1 เริ่มต้นจากตำแหน่ง start ให้คืนค่า 0
- หาก string1 มีความยาวเป็นศูนย์ ให้คืนค่า 0
- ถ้า string2 มีความยาวเป็นศูนย์ ให้คืนค่าอาร์กิวเมนต์ start .
- และสุดท้าย ถ้าค่าใดใน string1 หรือ string2 เป็น Null ส่งคืนข้อผิดพลาด
3 ตัวอย่างง่ายๆ ในการใช้ฟังก์ชัน VBA InStr
ใน ในส่วนนี้ เราจะดูสามตัวอย่างง่ายๆ ของการนำฟังก์ชัน VBA InStr ไปใช้ใน Excel มาดูตัวอย่างแรกของฟังก์ชัน InStr ในโค้ด VBA
1. การตัดสินใจว่าที่อยู่เป็นที่อยู่อีเมลหรือไม่ โดยใช้ฟังก์ชัน VBA InStr
ที่นี่ เราได้นำชุดข้อมูลที่ประกอบด้วยที่อยู่ติดต่อของลูกค้าบางส่วน เป้าหมายของเราในที่นี้คือการระบุว่าที่อยู่นั้นเป็นที่อยู่อีเมลหรือไม่
ตอนนี้เราจะพัฒนาโค้ด VBA โดยใช้ฟังก์ชัน InStr เพื่อระบุ ไม่ว่าจะเป็นที่อยู่อีเมลหรือไม่ โดยทำตามขั้นตอนด้านล่าง
ขั้นตอน:
- ในตอนเริ่มต้น ให้ไปที่แท็บ นักพัฒนาซอฟต์แวร์ และเลือก Visual Basic ( หรือกด Alt+F11) เพื่อเปิด VBA หน้าต่าง
- จากนั้น ในหน้าต่าง VBA ให้ไปที่ แทรก > โมดูล .
- หลังจากนั้น บนโมดูล ให้วางโค้ดต่อไปนี้:
1281
<27
- ยิ่งไปกว่านั้น เราได้สร้างฟังก์ชันที่ชื่อว่า DECISION ตัดสินใจว่าที่อยู่เป็นที่อยู่อีเมลหรือไม่ ลองใช้ฟังก์ชันกับชุดข้อมูลที่เรามี
- ในเซลล์ C5 ให้จดสูตรต่อไปนี้ แล้วป้อนเซลล์ที่เหลือโดยอัตโนมัติโดยใช้ Fill Handle
=DECISION(B5)
- อย่างที่เราเห็น เราได้ระบุที่อยู่แต่ละรายการไม่ว่าจะเป็นที่อยู่อีเมล หรือไม่
🎓 How Do the Code Work?
- Function DECISION(string1 As String)
ก่อนอื่น สร้างฟังก์ชันชื่อ DECISION โดยมี อาร์กิวเมนต์สตริงชื่อ string1 .
- Dim Position As Integer
ประกาศตัวแปรจำนวนเต็มชื่อ Position .
- ตำแหน่ง = InStr(1, string1, “@”, 0)
สิ่งนี้กำหนดค่าของ ตำแหน่ง ตัวแปรเป็นเอาต์พุตของฟังก์ชัน InStr ที่มีอาร์กิวเมนต์ 1, string1, “@” และ 0 กล่าวโดยย่อ สิ่งนี้กำหนดตำแหน่งในที่อยู่ที่มี “@” .
- หากตำแหน่ง = 0 ดังนั้น DECISION = “ไม่ใช่อีเมล”
กำหนดผลลัพธ์ของฟังก์ชัน DECISION เป็น “ไม่ใช่อีเมล” ถ้า ตำแหน่ง ตัวแปรคือ 0 หมายความว่าไม่มี “@” ในที่อยู่
(เรียกคืนหากไม่พบสตริงใดๆ ภายในสตริงที่กำหนด InStr ฟังก์ชันส่งกลับ 0 ).
- Else DECISION = “อีเมล”
สิ่งนี้กำหนด ผลลัพธ์ของฟังก์ชัน DECISION เป็น “อีเมล” หากมี “@” ในที่อยู่ ดังนั้นที่อยู่ที่มี “@” จะถูกจัดประเภทเป็น อีเมล และที่เหลือจะถูกจัดประเภทเป็น “ไม่ใช่อีเมล”
การอ่านที่คล้ายกัน
- วิธีใช้ฟังก์ชัน VBA UCASE ใน Excel (4 ตัวอย่าง)
- ใช้ฟังก์ชัน MsgBox ใน Excel VBA (คำแนะนำฉบับสมบูรณ์)
- วิธีใช้ฟังก์ชัน VBA SPLIT ใน Excel (5 ตัวอย่าง)
- ใช้ฟังก์ชัน LCase ใน VBA ใน Excel (ด้วย 4 ตัวอย่าง)
- วิธีใช้ฟังก์ชัน Fix ใน Excel VBA (4 ตัวอย่าง)
2. การใช้ฟังก์ชัน InStr ของ VBA สำหรับ การแยกส่วนขยายของที่อยู่อีเมลบางรายการออก
ที่นี่ เรามีรายการที่อยู่อีเมลของลูกค้าบางราย คราวนี้เราจะแยกส่วนขยายของที่อยู่อีเมล เช่น ว่ามี gmail.com หรือ yahoo.com .
โดยทำตามขั้นตอนด้านล่าง
ขั้นตอน:
- ในการเริ่มต้น เช่นเดียวกับวิธีก่อนหน้านี้ ให้เปิด VBA<2 ใหม่> โมดูล และวางโค้ดต่อไปนี้ในหน้าต่าง
3643
- นอกจากนี้ เราได้สร้างฟังก์ชันที่เรียกว่า ส่วนขยาย . โดยจะแยกส่วนขยายของที่อยู่อีเมลใดๆ
- นอกจากนี้ ลองใช้ฟังก์ชันนี้กับชุดข้อมูลที่เรามี ขั้นแรก ป้อนสูตรนี้ในเซลล์ C5 จากนั้นดับเบิลคลิกที่ Fill Handle
=EXTENSION(B5)
- สุดท้าย เราจะเห็นว่าเราได้ขยายส่วนขยายของอีเมลทั้งหมดเรียบร้อยแล้ว
🎓 รหัสทำงานอย่างไร
- ส่วนขยายของฟังก์ชัน (อีเมลเป็นสตริง)
ซึ่งจะสร้างฟังก์ชันใหม่ที่เรียกว่า ส่วนขยาย โดยมี อาร์กิวเมนต์สตริงชื่อ อีเมล .
- ตำแหน่งหรี่เป็นจำนวนเต็ม
ส่วนนี้ประกาศตัวแปรจำนวนเต็มชื่อ ตำแหน่ง .
- Position = InStr(1, Email, “@”, 0)
สิ่งนี้กำหนดค่าของ <1 ตัวแปร>Position เป็นเอาต์พุตของฟังก์ชัน InStr ที่มีอาร์กิวเมนต์ 1, อีเมล, “@” และ 0 กล่าวโดยสรุปคือ กำหนดตำแหน่งใน อีเมล โดยมี “@” .
- EXTENSION = Right(Email, (Len (อีเมล) – ตำแหน่ง))
ส่วนนี้กำหนดเอาต์พุตของฟังก์ชัน EXTENSION เป็นอักขระหลังสัญลักษณ์ “@” นี่คือส่วนขยายที่จำเป็นของ อีเมล
3. การแยกชื่อหรือนามสกุลออกจากชื่อ โดยใช้ฟังก์ชัน InStr ของ VBA
สุดท้าย เราจะทำงานที่แตกต่างกันโดยไม่ซ้ำกัน ในครั้งนี้เรามีรายชื่อพนักงานบางส่วนของบริษัท. และเราจะพยายามสร้างฟังก์ชันเพื่อแยกชื่อหรือนามสกุลของพนักงาน
โดยทำตามขั้นตอนด้านล่าง
ขั้นตอน:
- ประการแรก เช่นเดียวกับ วิธีที่ 1 ให้วางโค้ดด้านล่างในโมดูลใหม่ในหน้าต่าง VBA
8440
- ที่นี่ เราได้สร้างฟังก์ชันชื่อ SHORTNAME ซึ่งจะแยกชื่อหรือนามสกุลออกจากชื่อ ลองใช้สูตรนี้กับชุดข้อมูลของเรา
- ในตอนแรก หากต้องการแยกชื่อ ให้จดสูตรด้านล่างลงในเซลล์ C5 .
=SHORTNAME(B5,-1)
- สุดท้าย เพื่อแยกนามสกุล เราจดสูตรต่อไปนี้ใน D5 :
=SHORTNAME(B5,1)
- หลังจากนั้น หากเราเติมเซลล์ที่เหลือโดยอัตโนมัติด้วย Fill Handler เราจะเห็นผลลัพธ์ที่เราต้องการ
🎓 How Do the Code Work?
- ฟังก์ชัน SHORTNAME (ชื่อเป็นสตริง, First_or_Last เป็นจำนวนเต็ม)
สร้างฟังก์ชันใหม่ชื่อ SHORTNAME โดยมีอาร์กิวเมนต์สตริงหนึ่งรายการชื่อ ชื่อ และอาร์กิวเมนต์จำนวนเต็มหนึ่งรายการชื่อ First_or_Last .
- Dim Break As Integer
ส่วนนี้ประกาศตัวแปรจำนวนเต็มใหม่ชื่อ Break .
- Break = InStr(1, Name, ” “, 0)
กำหนดค่าของตัวแปร Break เป็นเอาต์พุตของฟังก์ชัน InStr พร้อมด้วยอาร์กิวเมนต์ 1 ชื่อ “ ” และ 0 ในระยะสั้น สิ่งนี้กำหนดตำแหน่งใน ชื่อ โดยมี ช่องว่าง (“ ”)
- ถ้า First_or_Last = -1 แล้วก็ SHORTNAME = ซ้าย(ชื่อ, ตัวแบ่ง – 1)
บรรทัดนี้กำหนดผลลัพธ์ของฟังก์ชัน SHORTNAME เป็นอักขระก่อนหน้า ช่องว่าง ถ้าอาร์กิวเมนต์ First_or_Last คือ -1 นี่คือชื่อแรก
- SHORTNAME = ขวา(ชื่อ, Len(ชื่อ) – ตัวแบ่ง)
ส่วนนี้กำหนดเอาต์พุตของ ฟังก์ชัน SHORTNAME เป็นอักขระหลัง ช่องว่าง ถ้าอาร์กิวเมนต์ First_or_Last คือ 1 นี่คือนามสกุล
บทสรุป
ด้วยวิธีนี้ คุณสามารถเขียนโค้ด VBA ด้วยฟังก์ชัน InStr ซึ่งจะค้นหาตำแหน่งของสตริงที่ระบุภายในสตริงที่กำหนด สตริง จากนั้นคุณสามารถสร้างฟังก์ชันของคุณเองเพื่อการใช้งานที่หลากหลาย นอกจากนี้ หากคุณมีคำถามใดๆ โปรดอย่าลังเลที่จะถามเรา