Excel VBA INSTRREV
ฟังก์ชันVBA INSTRREVซึ่งย่อมาจาก'In String Reverse'จะส่งกลับตำแหน่งของการเกิดครั้งแรกของสตริงการค้นหา (สตริงย่อย) ในสตริงอื่นโดยเริ่มจากจุดสิ้นสุดของสตริง (จากขวาไปซ้าย) ที่เรากำลังมองหา สตริงที่ค้นหาได้
ฟังก์ชันINSTRREVเริ่มค้นหาสตริงที่ค้นหาได้จากจุดสิ้นสุดของสตริงที่เราต้องการค้นหา แต่จะนับตำแหน่งจากจุดเริ่มต้น มีฟังก์ชันINSTR vba อีกหนึ่งฟังก์ชัน (ย่อมาจาก'In String' ) ที่ค้นหาสตริงในสตริงอื่นและส่งคืนตำแหน่ง แต่ฟังก์ชันนี้จะเริ่มการค้นหาจากจุดเริ่มต้นของสตริงที่เราค้นหาสตริงที่ค้นหาได้
INSTRREVและINSTRทั้งสองเป็นฟังก์ชัน String / Text VBA ในตัวของ MS Excel เราสามารถใช้มันในขณะที่เขียนมาโครใน Microsoft Visual Basic Editor
ไวยากรณ์
ดังที่เราเห็นในภาพด้านบนมี 2 อาร์กิวเมนต์บังคับและ 2 อาร์กิวเมนต์ที่เป็นทางเลือก
- StringCheck As String:นี่คืออาร์กิวเมนต์ที่จำเป็น เราจำเป็นต้องให้นิพจน์สตริงที่กำลังค้นหา
- StringMatch As String:จำเป็นต้องมีอาร์กิวเมนต์นี้ด้วย เราจำเป็นต้องระบุนิพจน์สตริงที่กำลังค้นหา
- Start As Long = -1:นี่คืออาร์กิวเมนต์ที่เป็นทางเลือก เราระบุนิพจน์ตัวเลข โดยค่าเริ่มต้นจะใช้เวลา -1 ซึ่งหมายความว่าการค้นหาเริ่มต้นที่ตำแหน่งอักขระสุดท้าย หากเราระบุค่าบวกเช่น 80 มันจะเริ่มค้นหาจากท้ายสตริงใน 80 อักขระทางซ้าย
- เปรียบเทียบ As VbCompareMethod = vbBinaryCompare As Long:อาร์กิวเมนต์นี้เป็นทางเลือก
เราสามารถระบุค่าต่อไปนี้สำหรับอาร์กิวเมนต์นี้
ส่งคืนค่า
- INSTRREVฟังก์ชั่นผลตอบแทน 0 ถ้าตรวจสอบสตริง มีความยาวเป็นศูนย์หรือตรงกับสตริง ไม่พบหรือ'เริ่ม'อาร์กิวเมนต์> ความยาวของการจับคู่สตริง
- ฟังก์ชั่นนี้ผลตอบแทน'Null'ถ้าตรวจสอบสตริง หรือการจับคู่สตริง เป็น'Null'
- ถ้าจับคู่สตริงมีความยาวเป็นศูนย์แล้วกลับมาทำงานที่จะเริ่มต้น
- หากมีการจับคู่สตริงจะพบในการตรวจสอบสตริง,แล้วฟังก์ชันจะคืนตำแหน่งที่แข่งขันพบ
วิธีใช้ฟังก์ชัน VBA INSTRREV
คุณสามารถดาวน์โหลดเทมเพลต VBA INSTRREV Excel ได้ที่นี่ - เทมเพลต VBA INSTRREV Excelสมมติว่าเรามีข้อมูลสำหรับชื่อภาพยนตร์และผู้กำกับ เราต้องการแยกชื่อผู้กำกับ
เรามีข้อมูลใน 1201 แถว หากเราทำงานนี้ด้วยตนเองจะต้องใช้เวลามาก
ในการทำเช่นเดียวกันเราจะใช้รหัส VBA ขั้นตอนคือ:
- เราจำเป็นต้องคลิกที่คำสั่ง'Visual Basic' ที่มีอยู่ใน'Code' Group ในแท็บ'Developer'หรือเราสามารถกดAlt + F11เพื่อเปิดโปรแกรมแก้ไข Visual Basic
- เราจะแทรกโมดูลโดยใช้เมนู 'แทรก'
- เราจะสร้างย่อยชื่อ'SplittingNames'
- เราต้องการตัวแปร 6 ตัว หนึ่งสำหรับเก็บค่าของเซลล์ซึ่งเราจะจัดการ ประการที่สองสำหรับการจัดเก็บตำแหน่งของช่องว่างแรกในสตริงที่สามสำหรับการจัดเก็บตำแหน่งของช่องว่างสุดท้ายในสตริงที่สี่สำหรับการจัดเก็บหมายเลขแถวสุดท้ายที่ห้าและหกสำหรับแถวและคอลัมน์ที่เราจะใช้เพื่อพิมพ์ค่าในเซลล์ที่อยู่ติดกัน
- ในการค้นหาแถวที่ใช้ล่าสุดในแผ่นงานเราจำเป็นต้องใช้รหัสต่อไปนี้
รหัสนี้จะเลือกเซลล์ B1 ก่อนจากนั้นเลือกเซลล์สุดท้ายที่ใช้ในคอลัมน์เดียวกันจากนั้นเรากำหนดหมายเลขแถวของเซลล์ให้กับตัวแปร 'LastRow'
- ตอนนี้ที่จะจัดการกับทุกเซลล์ในคอลัมน์ B ที่เราจะทำงาน'สำหรับ' ห่วง
- เราจะจัดเก็บค่าของเซลล์ของคอลัมน์ B จากแถวที่ 2 ถึงแถว 1201 ทีละรายการในตัวแปร 's' เพื่อจัดการกับมัน
- เราจำเป็นต้องกำหนดค่าของตัวแปร 'คอลัมน์'เป็น 3 เนื่องจากเราต้องเขียนชื่อแยกใน C (คอลัมน์ที่ 3) และคอลัมน์เป็นต้นไป
- หากสตริงเป็นเพียงคำเดียวซึ่งหมายความว่าไม่มีช่องว่างในสตริงเราต้องการให้สตริงเป็นเอาต์พุต สำหรับสิ่งนี้เราจะระบุเงื่อนไขโดยใช้'If and Else statement'พร้อมกับเครื่องหมายดอกจัน (แสดงถึงอักขระหนึ่งตัวขึ้นไป) ดังนี้
- หากมีพื้นที่ว่างในสตริงเราต้องการแยกสตริง ในการทำเช่นเดียวกันเราได้ใช้ฟังก์ชันINSTRและINSTRREVเพื่อค้นหาตำแหน่งช่องว่างแรกและตำแหน่งพื้นที่สุดท้ายตามลำดับ มันจะช่วยให้เราค้นหาคำแรกและคำสุดท้ายในสตริงตามลำดับ
ฟังก์ชัน INSTR รับอาร์กิวเมนต์ดังนี้:
รายละเอียดอาร์กิวเมนต์
- เริ่มต้น: เริ่มจากตำแหน่งใด
- String1:เราต้องระบุนิพจน์สตริงที่กำลังค้นหา
- String2:เราจำเป็นต้องระบุนิพจน์สตริงที่กำลังค้นหา
เปรียบเทียบกับ VbCompareMethod:การระบุวิธีการเปรียบเทียบ โดยค่าเริ่มต้นจะเป็นการเปรียบเทียบแบบไบนารี
- เราจำเป็นต้องใช้ฟังก์ชัน vba LEFTเพื่อแยกอักขระทางซ้ายออกจากสตริง เราได้ใช้'Last Space-1'เพื่อรับอักขระทางซ้ายก่อนช่องว่างสุดท้าย
เราจำเป็นต้องใช้ฟังก์ชัน RIGHT และ LENเพื่อแยกอักขระที่ถูกต้องออกจากสตริงหลังช่องว่างแรก
มีการเขียนมาโคร ตอนนี้เราต้องเรียกใช้มาโครโดยใช้ปุ่มF5
รหัส:
Sub SplittingNames() Dim s As String Dim FirstSpace As Long Dim LastSPace As Long Dim LastRow As Long Dim Row As Long Dim Column As Long Sheet1.Range("B1").Select Selection.End(xlDown).Select LastRow = ActiveCell.Row For Row = 2 To LastRow s = Sheet1.Cells(Row, 2).Value Column = 3 If s Like "* *" Then FirstSpace = InStr(1, s, " ") LastSPace = InStrRev(s, " ") Sheet1.Cells(Row, Column).Value = Left(s, LastSPace - 1) Sheet1.Cells(Row, Column + 1).Value = Right(s, Len(s) - FirstSpace) Else Sheet1.Cells(Row, Column).Value = s End If Next End Sub
We have a result now.