ฟังก์ชั่นการจัดการสตริง VBA & Operaโปร

⚡ สรุปอย่างชาญฉลาด

ฟังก์ชันการจัดการสตริงใน VBA และ Operaทอร์รวม วัด และทดสอบtracข้อความภายในมาโคร Excel หน้านี้อธิบายตัวดำเนินการเชื่อมต่อข้อความ ฟังก์ชัน Left, Right, Mid, Len และ InStr การแยกและการเชื่อมต่อข้อความ และข้อผิดพลาดที่มักทำให้โค้ดสตริงทำงานผิดพลาด

  • 🔤 ข้อมูลสตริง: ค่าที่สร้างขึ้นจากตัวอักษร สัญลักษณ์ และตัวเลข เช่น ข้อความ Jul-2015
  • เรียงต่อกัน Operaทอร์: เครื่องหมายแอมเปอร์แซนด์เชื่อมสตริงสองสตริงเข้าด้วยกัน ดังนั้น “John ” & “Doe” จะได้ผลลัพธ์เป็น John Doe
  • 🇧🇷 Extracฟังก์ชัน tion: ฟังก์ชัน Left, Right และ Mid จะดึงสตริงย่อยจากต้น ท้าย หรือตรงกลางของค่า
  • 📏 ฟังก์ชันการวัด: Len นับจำนวนอักขระ และ InStr ส่งคืนตำแหน่งที่สตริงย่อยเริ่มต้น
  • 🧩 แยกและรวม: ฟังก์ชัน Split จะแยกสตริงที่คั่นด้วยตัวคั่นออกเป็นอาร์เรย์ และฟังก์ชัน Join จะรวมอาร์เรย์กลับเป็นสตริงเดียว
  • ⚠️ ข้อผิดพลาดทั่วไป: ความไม่ตรงกันของชนิดข้อมูล การส่งคืนค่าศูนย์ของ InStr และช่องว่างท้ายข้อความ เป็นสาเหตุหลักที่ทำให้การเปรียบเทียบล้มเหลว

ฟังก์ชันการจัดการสตริงใน VBA และ Operaโปร

สตริง VBA Operaโปร

ข้อมูลสตริงใช้เพื่อเก็บข้อมูลที่ประกอบด้วยตัวเลข อักขระ และสัญลักษณ์ “Jul-2015” เป็นตัวอย่างของข้อมูลสตริง ประกอบด้วย

  • ตัวละคร (ก.ค.)
  • เครื่องหมาย (-)
  • Numbers (2015)

ตัวดำเนินการสตริงใช้เพื่อจัดการข้อมูลสตริง ตัวอย่างเช่น คุณสามารถเชื่อมโยงค่าของเดือนกรกฎาคม 2015 จาก 3 ตัวอักษรแรกของเดือนและปี เช่น "กรกฎาคม 2015"

ตารางต่อไปนี้แสดงตัวดำเนินการเรียงสตริง VBA

S / N OperaTor Descriptไอออน ตัวอย่าง เอาท์พุต
1 & Concatenate: ตัวดำเนินการนี้ใช้ในการต่อสตริงเข้าด้วยกัน “จอห์น” และ “โด” จอห์นโด

ที่มาตัวอย่าง Code

สตริง VBA Operaตัวอย่างแหล่งที่มาของทอร์ส Code

MsgBox "John " & "Doe", vbOKOnly, "Concatenate Operator"

การดำเนินการโค้ดข้างต้นจะสร้างผลลัพธ์ต่อไปนี้

สตริง VBA Operaตัวอย่างแหล่งที่มาของทอร์ส Code

เครื่องหมายแอมเปอร์แซนด์ไม่ใช่สัญลักษณ์เดียวที่ใช้เชื่อมข้อความ และความแตกต่างระหว่างสัญลักษณ์ทั้งสองมีความสำคัญเมื่อมีตัวเลขเข้ามาเกี่ยวข้อง

ความแตกต่างระหว่าง & และ + สำหรับการเชื่อมต่อสตริง

VBA ยอมรับทั้งเครื่องหมายแอมเปอร์แซนด์และเครื่องหมายบวกระหว่างค่าข้อความสองค่า ดังนั้นผู้เริ่มต้นจึงมักใช้แทนกันได้ แต่การทำงานจะแตกต่างกันเมื่อตัวถูกดำเนินการตัวใดตัวหนึ่งเป็นตัวเลขหรือค่าว่าง และมีเพียงเครื่องหมายเดียวเท่านั้นที่ปลอดภัย

พฤติกรรม & (แอมเปอร์แซนด์) + (บวก)
ค่าข้อความสองค่า เข้าร่วมกับพวกเขา: “Guru” & “99” กลับมาแล้ว Guru99 เข้าร่วมกับพวกเขา: “Guru” + “99” ส่งคืน Guru99
ข้อความและตัวเลข แปลงตัวเลขเป็นข้อความ: “อายุ ” & 30 จะได้ผลลัพธ์เป็น อายุ 30 ทำให้เกิดข้อผิดพลาดประเภทไม่ตรงกัน
สตริงตัวเลขสองสตริง “10” และ “5” จะได้ผลลัพธ์เป็น 105 “10” + “5” อาจบวกและคืนค่าเป็น 15
ค่าว่าง ถือว่าค่า Null เป็นสตริงว่าง ส่งคืนค่า Null และละทิ้งผลลัพธ์ทั้งหมด

💡 เคล็ดลับ: ควรใช้เครื่องหมายแอมเปอร์แซนด์ (&) สำหรับการเชื่อมต่อข้อความ และสงวนเครื่องหมายบวก (+) ไว้สำหรับกรณีพิเศษ การดำเนินการทางคณิตศาสตร์เว้นวรรคก่อนและหลังเครื่องหมายแอมเปอร์แซนด์ เนื่องจาก VBA จะอ่าน Total& เป็นอักขระประกาศชนิดข้อมูล Long

ฟังก์ชั่นการจัดการสตริง VBA

VBA String Manipulation เป็นองค์ประกอบสำคัญใน Excel VBA สำหรับการเขียนโปรแกรมมาโคร และการดำเนินการสตริง Excel มีฟังก์ชันการจัดการสตริง VBA หลายประเภท เช่น:

  • ซ้าย: ใช้เพื่อยกตัวอย่างtracอักขระ t จากด้านซ้ายของสตริง
  • ขวา: ใช้เพื่อยกตัวอย่างtracอักขระ t จากด้านขวาของสตริง
  • ปานกลาง: ใช้เพื่อยกตัวอย่างtracสตริงย่อยจากตรงกลางของสตริง
  • Len: ใช้ในการหาความยาวของสตริง
  • ในStr: ใช้เพื่อค้นหาตำแหน่งของสตริงย่อยในสตริง
  • ตัดแต่ง: ใช้สำหรับลบช่องว่างออกจากทั้งสองด้านของสตริง
  • แทนที่: ใช้สำหรับแทนที่สตริงย่อยหนึ่งทุกตำแหน่งด้วยสตริงย่อยอื่น
  • UCase / LCase: ใช้สำหรับแปลงสตริงเป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก

ตารางด้านล่างแสดงไวยากรณ์ของแต่ละฟังก์ชันพร้อมตัวอย่างการใช้งาน เพื่อให้คุณสามารถคัดลอกรูปแบบลงในมาโครได้โดยตรง

ฟังก์ชัน วากยสัมพันธ์ ตัวอย่าง เอาท์พุต
ซ้าย ซ้าย(สตริง, ความยาว) ซ้าย (“กรกฎาคม 2015”, 3) กรกฎาคม
ขวา ขวา(สตริง, ความยาว) ขวา (“กรกฎาคม 2015”, 4) 2015
ปานกลาง กลาง (สตริง, จุดเริ่มต้น, ความยาว) กลางเดือน (“กรกฎาคม 2015”, 5, 4) 2015
Len ความยาว (สตริง) เลน (“กรกฎาคม 2015”) 8
ในStr InStr(start, string, substring) InStr(1, “ก.ค.-2015”, “-“) 4
ตัดแต่ง ตัดแต่ง (เชือก) ตัดแต่ง(” Guru99”) Guru99
แทนที่ แทนที่ (สตริง, ค้นหา, แทนที่) แทนที่ (“ก.ค.-2015”, “-“, “/”) ก.ค./2015
ยูเคส UCase(string) UCase(“guru99”) กูรู99

มาโครด้านล่างนี้ได้รวมฟังก์ชันหลายอย่างเข้าด้วยกันเพื่อสร้างป้ายกำกับวันที่เกิดขึ้นใหม่จากส่วนประกอบต่างๆ

Sub StringFunctionsDemo()
    Dim Source As String
    Dim MonthPart As String
    Dim YearPart As String

    Source = "July-2015"

    ' Take the first three characters
    MonthPart = Left(Source, 3)
    ' Take the last four characters
    YearPart = Right(Source, 4)

    MsgBox MonthPart & "-" & YearPart, vbOKOnly, "String Functions"
End Sub

การเรียกใช้มาโครจะแสดงผลเป็น Jul-2015 ฟังก์ชันแต่ละฟังก์ชันจะส่งคืนค่าใหม่โดยไม่เปลี่ยนแปลงสตริงเดิม ซึ่งเป็นเหตุผลว่าทำไมจึงสามารถนำผลลัพธ์มารวมกันได้อย่างปลอดภัยในนิพจน์เดียว

ฟังก์ชันเหล่านี้ทำงานกับสตริงทีละสตริงเท่านั้น เมื่อค่าเดียวบรรจุรายการทั้งหมด ฟังก์ชันอีกสองฟังก์ชันจะจัดการได้ดีกว่า

วิธีการแยกและรวมสตริงใน VBA

ข้อมูลที่คัดลอกและวางลงใน Excel มักจะมาในรูปแบบค่าเดียวที่ยาว โดยมีตัวคั่นระหว่างแต่ละรายการ เช่น “Pepsi,Coke,Fanta,Juice” การอ่านข้อมูลแบบนั้นด้วยฟังก์ชัน Mid และ InStr นั้นช้าและไม่เสถียร VBA มีฟังก์ชันคู่ที่เหมาะสมสำหรับงานนี้โดยเฉพาะ

แยก รับสตริงที่คั่นด้วยตัวคั่น และส่งคืนอาร์เรย์แบบเริ่มต้นที่ศูนย์ โดยมีหนึ่งองค์ประกอบต่อหนึ่งรายการ ร่วมเป็นผู้ขายกับเราที่ ฟังก์ชัน Join ทำงานตรงกันข้าม โดยรับอาร์เรย์และส่งคืนสตริงเดียวที่มีตัวคั่นระหว่างองค์ประกอบ โปรดทราบว่า Join ทำงานกับอาร์เรย์ ไม่ใช่สตริงสองสตริงที่แยกจากกัน

Sub SplitAndJoinDemo()
    Dim Source As String
    Dim Items() As String
    Dim i As Long

    Source = "Pepsi,Coke,Fanta,Juice"

    ' Break the value into an array on every comma
    Items = Split(Source, ",")

    For i = LBound(Items) To UBound(Items)
        Sheet1.Cells(i + 1, 1).Value = Items(i)
    Next i

    ' Rebuild the list with a different separator
    MsgBox Join(Items, " | "), vbOKOnly, "Joined List"
End Sub

ลูปจะเขียนเครื่องดื่มแต่ละชนิดลงในแถวของเวิร์กชีตแต่ละแถว จากนั้นกล่องข้อความจะแสดง Pepsi | Coke | Fanta | Juice มีสามประเด็นที่ทำให้รูปแบบนี้มีความน่าเชื่อถือในโค้ดที่ใช้งานจริง:

  • ผลลัพธ์แบบนับศูนย์: ฟังก์ชัน Split จะส่งคืนอาร์เรย์ที่มีหมายเลขเริ่มต้นจาก 0 เสมอ ไม่ว่าค่า Option Base จะถูกตั้งไว้ที่ใด ดังนั้นควรใช้ LBound และ UBound ในการกำหนดทิศทางการวนซ้ำแทนที่จะใช้หมายเลขคงที่
  • ประกาศเป็น String(): กำหนดผลลัพธ์ให้กับอาร์เรย์สตริงแบบไดนามิก การประกาศขนาดคงที่ก่อนจะทำให้เกิดข้อผิดพลาดในการคอมไพล์
  • ช่องป้อนข้อมูลว่างเปล่า: การแยกสตริงว่างจะคืนค่าเป็นอาร์เรย์ที่ไม่มีองค์ประกอบ ดังนั้นให้ทดสอบด้วย UBound ก่อนอ่าน Items(0)

ถึงแม้จะเลือกฟังก์ชันที่ถูกต้องแล้วก็ตาม โค้ดส่วนสตริงก็ยังอาจทำงานผิดพลาดได้ในบางลักษณะที่คาดเดาได้

ข้อผิดพลาดเกี่ยวกับสตริงใน VBA ที่พบบ่อยและวิธีแก้ไข

ข้อผิดพลาดเกี่ยวกับสตริงส่วนใหญ่ใน Excel VBA เกิดจากสาเหตุเพียงไม่กี่อย่าง การรู้จักสาเหตุของปัญหาจะช่วยประหยัดเวลาในการแก้ไขข้อผิดพลาดได้มาก

  • ประเภทข้อมูลไม่ตรงกันในการเชื่อมต่อ: มีการใช้เครื่องหมายบวก (+) ระหว่างข้อความและตัวเลข ให้เปลี่ยนเป็นเครื่องหมายแอมเปอร์แซนด์ (&) ซึ่งจะแปลงตัวเลขโดยอัตโนมัติ
  • InStr ส่งคืนค่า 0: ไม่พบสตริงย่อย ฟังก์ชัน InStr จะส่งคืนค่า 0 แทนที่จะเป็น -1 เมื่อเกิดข้อผิดพลาด ดังนั้นควรตรวจสอบค่าที่มากกว่าศูนย์ก่อนส่งผลลัพธ์ไปยังฟังก์ชัน Mid
  • การเรียกใช้ฟังก์ชันที่ไม่ถูกต้องในส่วนกลางหรือส่วนซ้าย: ความยาวที่ร้องขอเป็นค่าลบ หรือตำแหน่งเริ่มต้นอยู่ต่ำกว่า 1 ให้ตรวจสอบการเรียกใช้ฟังก์ชันด้วยค่า Len เพื่อไม่ให้ความยาวเกินค่าสตริงที่กำหนด
  • การเปรียบเทียบที่ควรจะตรงกันแต่กลับไม่ตรงกัน: ช่องว่างท้ายข้อมูลจากการนำเข้าทำให้ความเท่าเทียมกันไม่ถูกต้อง ให้ใช้ Trim ครอบทั้งสองด้าน และใช้ StrComp เมื่อต้องการไม่พิจารณาตัวพิมพ์ใหญ่เล็ก
  • ข้อความที่จะไม่ถูกแปลงเป็นตัวเลข: ค่าเช่น “1,200” จะคำนวณผิดพลาดเนื่องจากมีตัวคั่น ให้ใช้คำสั่ง Replace ลบตัวคั่นออกก่อนแปลงด้วยคำสั่ง CLng

ดาวน์โหลด Excel ที่มีโค้ดด้านบน

ดาวน์โหลดไฟล์ Excel ด้านบน Code

คำถามที่พบบ่อย

สตริงที่มีความยาวแปรผันสามารถเก็บอักขระได้ประมาณสองพันล้านตัว และสตริงที่มีความยาวคงที่สามารถเก็บได้สูงสุด 65,400 ตัว อย่างไรก็ตาม เซลล์ในเวิร์กชีตสามารถเก็บได้เพียง 32,767 ตัวอักขระเท่านั้น ดังนั้นค่าที่ยาวกว่านั้นจะถูกตัดทอนเมื่อเขียนลงในชีต

โดยค่าเริ่มต้น เครื่องหมายเท่ากับจะเปรียบเทียบแบบคำนึงถึงตัวพิมพ์ใหญ่เล็ก หากต้องการผลลัพธ์ที่ไม่คำนึงถึงตัวพิมพ์ใหญ่เล็ก ให้ใช้ StrComp(a, b, vbTextCompare) หรือวาง Option Compare Text ไว้ที่ด้านบนของโมดูลเพื่อเปลี่ยนค่าเริ่มต้นสำหรับทั้งโมดูล

เครื่องหมายแอมเปอร์แซนด์จะแปลงตัวถูกดำเนินการทุกตัวให้เป็นข้อความก่อนที่จะรวมกัน ดังนั้น 10 & 5 จะคืนค่าเป็นสตริง 105 ควรคงค่าตัวเลขไว้และบวกกันก่อน จากนั้นจึงนำผลลัพธ์มาต่อกันหากต้องการให้ปรากฏในข้อความ

ใช่ค่ะ อธิบายข้อมูลนำเข้าและข้อมูลส่งออกที่ต้องการ เช่น [ระบุข้อมูลนำเข้าและข้อมูลส่งออกที่ต้องการ]tracตรวจสอบโค้ดก่อนเครื่องหมายขีดกลางตัวแรก และผู้ช่วย AI จะส่งคืนนิพจน์ Left และ InStr ทดสอบกับกรณีพิเศษ เช่น การไม่มีเครื่องหมายขีดกลาง

ใช่แล้ว เพียงแค่คัดลอกนิพจน์แบบซ้อนกัน เช่น Mid ที่มี InStr อยู่ข้างใน แล้วระบบ AI จะแยกนิพจน์นั้นออกเป็นขั้นตอน ตั้งชื่ออาร์กิวเมนต์แต่ละตัว และระบุกรณีที่ InStr ส่งค่ากลับเป็นศูนย์และทำให้การเรียกใช้งานล้มเหลว

สรุปโพสต์นี้ด้วย: