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

สตริง VBA Operaโปร
ข้อมูลสตริงใช้เพื่อเก็บข้อมูลที่ประกอบด้วยตัวเลข อักขระ และสัญลักษณ์ “Jul-2015” เป็นตัวอย่างของข้อมูลสตริง ประกอบด้วย
- ตัวละคร (ก.ค.)
- เครื่องหมาย (-)
- Numbers (2015)
ตัวดำเนินการสตริงใช้เพื่อจัดการข้อมูลสตริง ตัวอย่างเช่น คุณสามารถเชื่อมโยงค่าของเดือนกรกฎาคม 2015 จาก 3 ตัวอักษรแรกของเดือนและปี เช่น "กรกฎาคม 2015"
ตารางต่อไปนี้แสดงตัวดำเนินการเรียงสตริง VBA
| S / N | OperaTor | Descriptไอออน | ตัวอย่าง | เอาท์พุต |
|---|---|---|---|---|
| 1 | & | Concatenate: ตัวดำเนินการนี้ใช้ในการต่อสตริงเข้าด้วยกัน | “จอห์น” และ “โด” | จอห์นโด |
ที่มาตัวอย่าง Code
MsgBox "John " & "Doe", vbOKOnly, "Concatenate Operator"
การดำเนินการโค้ดข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
เครื่องหมายแอมเปอร์แซนด์ไม่ใช่สัญลักษณ์เดียวที่ใช้เชื่อมข้อความ และความแตกต่างระหว่างสัญลักษณ์ทั้งสองมีความสำคัญเมื่อมีตัวเลขเข้ามาเกี่ยวข้อง
ความแตกต่างระหว่าง & และ + สำหรับการเชื่อมต่อสตริง
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


