Vba: วิธีแทนที่อักขระในสตริง
คุณสามารถใช้เมธอด แทนที่() ใน VBA เพื่อแทนที่อักขระในสตริงได้
วิธีนี้ใช้ไวยากรณ์พื้นฐานต่อไปนี้:
แทนที่(นิพจน์ ค้นหา แทนที่ เริ่ม นับ)
ทอง:
- expression : สตริงที่คุณต้องการแทนที่อักขระ
- find : สตริงที่จะค้นหา
- แทนที่ : สตริงที่จะใช้แทน
- start ( ทางเลือก ) : ตำแหน่งเริ่มต้นในสตริงที่จะค้นหา
- count ( ทางเลือก ) : จำนวนการเปลี่ยนที่จะดำเนินการ
ตัวอย่างต่อไปนี้แสดงวิธีการใช้วิธีนี้ในทางปฏิบัติกับรายการสตริงต่อไปนี้ใน Excel:
ตัวอย่างที่ 1: ใช้ VBA เพื่อแทนที่อักขระทั้งหมดในสตริง (คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่)
สมมติว่าเราต้องการแทนที่ “this” ด้วย “THAT” ในแต่ละสตริง
เราสามารถสร้างมาโครต่อไปนี้เพื่อทำสิ่งนี้:
Sub ReplaceChar() Dim i As Integer For i = 2 To 8 Range(" B " & i) = Replace(Range(" A " & i), " this ", " THAT ") Next i End Sub
เมื่อเราเรียกใช้แมโครนี้ เราได้รับผลลัพธ์ต่อไปนี้:
คอลัมน์ B จะแสดงแต่ละสตริงในคอลัมน์ A โดยแต่ละรายการของ “this” จะถูกแทนที่ด้วย “THAT”
โปรดทราบว่าการเปลี่ยนนี้จะ คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
นั่นคือแต่ละเหตุการณ์ของ “สิ่งนี้” จะถูกแทนที่ แต่แต่ละเหตุการณ์ของ “สิ่งนี้” จะถูกทิ้งไว้ตามลำพัง
ตัวอย่างที่ 2: ใช้ VBA เพื่อแทนที่อักขระทั้งหมดในสตริง (ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่)
สมมติว่าเราต้องการแทนที่ “this” (โดยไม่คำนึงถึงกรณี) ด้วย “THAT” ในแต่ละสตริง
เราสามารถสร้างมาโครต่อไปนี้เพื่อทำสิ่งนี้:
Sub ReplaceChar() Dim i As Integer For i = 2 To 8 Range(" B " & i) = Replace(LCase(Range(" A " & i)), " this ", " THAT ") Next i End Sub
เมื่อเราเรียกใช้แมโครนี้ เราได้รับผลลัพธ์ต่อไปนี้:
คอลัมน์ B จะแสดงแต่ละสตริงในคอลัมน์ A โดยแต่ละรายการของ “this” จะถูกแทนที่ด้วย “THAT”
โปรดทราบว่าการเปลี่ยนนี้ ไม่คำนึงถึงขนาดตัวพิมพ์
นั่นคือ ทุกเหตุการณ์ของ “สิ่งนี้” (ไม่ว่าจะใช้ตัวพิมพ์ใหญ่หรือไม่ก็ตาม) จะถูกแทนที่
เราสามารถทำการแทนที่โดยไม่คำนึงถึงขนาดตัวพิมพ์ได้โดยใช้วิธี LCase เพื่อแปลงแต่ละสตริงในคอลัมน์ A เป็นตัวพิมพ์เล็กก่อน ก่อนที่จะค้นหา “this” ในแต่ละสตริง
ตัวอย่างที่ 3: ใช้ VBA เพื่อแทนที่ N รายการแรกของอักขระในสตริง
สมมติว่าเราต้องการแทนที่เฉพาะการเกิดขึ้นครั้งแรกของ “this” (โดยไม่คำนึงถึงกรณี) ด้วย “THAT” ในแต่ละสตริง
เราสามารถสร้างมาโครต่อไปนี้เพื่อทำสิ่งนี้:
Sub ReplaceChar() Dim i As Integer For i = 2 To 8 Range(" B " & i) = Replace(LCase(Range(" A " & i)), " this ", " THAT ", Count:=1) Next i End Sub
เมื่อเราเรียกใช้แมโครนี้ เราได้รับผลลัพธ์ต่อไปนี้:
คอลัมน์ B จะแสดงแต่ละสตริงในคอลัมน์ A โดยมีเพียง “this” ตัวแรกที่แทนที่ด้วย “THAT”
โปรดทราบว่าเราใช้ Count:=1 เพื่อแทนที่เฉพาะสตริงที่ระบุครั้งแรก แต่คุณสามารถแทนที่ 1 ด้วยค่าใดก็ได้ที่คุณต้องการแทนที่ n รายการแรกของสตริงที่ระบุ
หมายเหตุ : คุณสามารถดูเอกสารฉบับเต็มสำหรับวิธี การแทนที่ VBA ได้ที่นี่
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้จะอธิบายวิธีดำเนินการงานทั่วไปอื่นๆ โดยใช้ VBA:
VBA: วิธีนับจำนวนอักขระในสตริง
VBA: วิธีตรวจสอบว่าสตริงมีสตริงอื่นหรือไม่
VBA: วิธีนับเซลล์ด้วยข้อความเฉพาะ