VBA InStrRev | วิธีใช้ฟังก์ชัน Excel VBA InStrRev

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:อาร์กิวเมนต์นี้เป็นทางเลือก

เราสามารถระบุค่าต่อไปนี้สำหรับอาร์กิวเมนต์นี้

ส่งคืนค่า

  1. INSTRREVฟังก์ชั่นผลตอบแทน 0 ถ้าตรวจสอบสตริง  มีความยาวเป็นศูนย์หรือตรงกับสตริง  ไม่พบหรือ'เริ่ม'อาร์กิวเมนต์> ความยาวของการจับคู่สตริง
  2. ฟังก์ชั่นนี้ผลตอบแทน'Null'ถ้าตรวจสอบสตริง  หรือการจับคู่สตริง  เป็น'Null'
  3. ถ้าจับคู่สตริงมีความยาวเป็นศูนย์แล้วกลับมาทำงานที่จะเริ่มต้น
  4. หากมีการจับคู่สตริงจะพบในการตรวจสอบสตริง,แล้วฟังก์ชันจะคืนตำแหน่งที่แข่งขันพบ

วิธีใช้ฟังก์ชัน 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.