Hàm thao tác chuỗi VBA & Operaxoắn

⚡ Tóm tắt thông minh

Các hàm thao tác chuỗi trong VBA và Operacác tors kết hợp, đo lường và extracVăn bản t bên trong macro Excel. Trang này giải thích toán tử nối chuỗi, các hàm Left, Right, Mid, Len và InStr, việc tách và ghép chuỗi, cũng như các lỗi thường gặp nhất gây ra lỗi mã chuỗi.

  • 🔤 Dữ liệu chuỗi: Một giá trị được tạo thành từ các ký tự, ký hiệu và số, chẳng hạn như văn bản Jul-2015.
  • Sự kết hợp Operator: Dấu và (&) nối hai chuỗi ký tự, vì vậy “John” & “Doe” trả về John Doe.
  • ✂️ ExtracChức năng tion: Các tham số Left, Right và Mid trích xuất một chuỗi con từ đầu, cuối hoặc giữa của một giá trị.
  • 📏 Chức năng đo lường: Len đếm số ký tự và InStr trả về vị trí bắt đầu của một chuỗi con.
  • 🧩 Chia và ghép: Hàm `split` tách một chuỗi ký tự được phân tách thành một mảng, còn hàm `join` ghép lại mảng đó thành một chuỗi duy nhất.
  • ⚠️ Lỗi thông thường: Lỗi so sánh không khớp kiểu dữ liệu, hàm InStr trả về giá trị 0 và khoảng trắng thừa ở cuối chuỗi là nguyên nhân gây ra hầu hết các trường hợp so sánh thất bại.

Các hàm thao tác chuỗi trong VBA và Operaxoắn

Chuỗi VBA Operaxoắn

Dữ liệu chuỗi được sử dụng để chứa dữ liệu được tạo thành từ số, ký tự và ký hiệu. “Tháng 2015 năm XNUMX” là một ví dụ về dữ liệu chuỗi. Nó được tạo thành từ

  • Nhân vật (tháng 7)
  • Biểu tượng (-)
  • Numbers (2015)

Toán tử chuỗi được sử dụng để thao tác dữ liệu chuỗi. Ví dụ: bạn có thể ghép giá trị của tháng 2015-3 từ 2015 chữ cái đầu tiên của tháng và năm như “Jul-XNUMX”.

Bảng sau đây hiển thị toán tử nối chuỗi VBA.

S / N Operator Mô tả Chi tiết Ví dụ Đầu ra
1 & Concatenate: Toán tử này dùng để nối các chuỗi lại với nhau “John” & “Doe” John Doe

Nguồn ví dụ Code

Chuỗi VBA OperaVí dụ về nguồn Code

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

Thực hiện đoạn mã trên sẽ tạo ra kết quả sau

Chuỗi VBA OperaVí dụ về nguồn Code

Dấu và (&) không phải là ký hiệu duy nhất được dùng để nối văn bản, và sự khác biệt giữa hai ký hiệu này rất quan trọng khi có sự xuất hiện của các con số.

Sự khác biệt giữa & và + trong phép nối chuỗi

VBA chấp nhận cả dấu và (&) và dấu cộng (+) giữa hai giá trị văn bản, vì vậy người mới bắt đầu thường coi chúng là có thể thay thế cho nhau. Tuy nhiên, chúng hoạt động khác nhau ngay khi một trong hai toán hạng là số hoặc giá trị rỗng, và chỉ có một trong hai là an toàn.

Hành vi & (Ký hiệu và) + (Thêm)
Hai giá trị văn bản Tham gia cùng họ: “Guru” & “99” trả về Guru99 Tham gia cùng họ: “Guru” + “99” trả về Guru99
Văn bản và một con số Chuyển đổi số thành văn bản: “Tuổi ” & 30 trả về Tuổi 30 Gây ra lỗi không khớp kiểu dữ liệu.
Hai chuỗi số “10” và “5” trả về 105 “10” + “5” có thể cộng và trả về 15
Giá trị rỗng Coi Null là chuỗi rỗng. Trả về Null và loại bỏ toàn bộ kết quả.

💡 Mẹo: Luôn sử dụng dấu và (&) để nối chuỗi và chỉ sử dụng dấu cộng (+) cho các trường hợp khác. các phép tính toán họcHãy đặt một khoảng trắng trước và sau dấu và (&), vì VBA sẽ hiểu cú pháp Total& là một ký tự khai báo kiểu dữ liệu Long.

Hàm thao tác chuỗi VBA

Thao tác chuỗi VBA là một yếu tố quan trọng trong Excel VBA cho lập trình Macro và các thao tác trên chuỗi. Excel cung cấp nhiều loại hàm Thao tác chuỗi VBA khác nhau như:

  • Còn lại: được dùng để ví dụtracký tự t từ phía bên trái của chuỗi
  • Đúng: được dùng để ví dụtracký tự t từ phía bên phải của chuỗi
  • ở giữa: được dùng để ví dụtracmột chuỗi con từ giữa một chuỗi
  • Len: được sử dụng để tìm độ dài của một chuỗi
  • trongStr: được sử dụng để tìm vị trí của chuỗi con trong chuỗi
  • Tỉa: được sử dụng để loại bỏ khoảng trắng ở cả hai đầu của chuỗi.
  • Thay thế: được sử dụng để hoán đổi mọi lần xuất hiện của một chuỗi con này với một chuỗi con khác.
  • UCase / LCase: được sử dụng để chuyển đổi chuỗi thành chữ hoa hoặc chữ thường.

Bảng dưới đây hiển thị cú pháp của từng hàm kèm theo ví dụ minh họa, giúp bạn có thể sao chép trực tiếp mẫu này vào macro.

Chức năng cú pháp Ví dụ Đầu ra
Còn lại Trái (chuỗi, độ dài) Trái (“Tháng 7 năm 2015”, 3) Tháng Bảy
Đúng Phải (chuỗi, độ dài) Phải (“Tháng 7 năm 2015”, 4) 2015
ở giữa Giữa (chuỗi, bắt đầu, độ dài) Giữa (“Tháng 7 năm 2015”, 5, 4) 2015
Len Độ dài (chuỗi) Len (“Tháng 7 năm 2015”) 8
trongStr InStr(start, string, substring) InStr(1, “Tháng 7-2015”, “-“) 4
Tỉa Cắt (chuỗi) Cắt tỉa (“ Guru99 “) Guru99
Thay thế Thay thế (chuỗi, tìm, thay thế) Thay thế(“Tháng 7-2015”, “-“, “/”) Tháng 2015 năm XNUMX
UCase UCase(string) UCase(“guru99”) GURU99

Đoạn mã macro bên dưới kết hợp một số chức năng này để tái tạo lại nhãn ngày tháng từ các thành phần của nó.

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

Khi chạy macro sẽ hiển thị tháng 7 năm 2015. Mỗi hàm trả về một giá trị mới và giữ nguyên chuỗi gốc, đó là lý do tại sao các kết quả có thể được kết hợp an toàn trong một biểu thức duy nhất.

Các hàm này đều hoạt động trên từng chuỗi một. Khi một giá trị duy nhất chứa toàn bộ một danh sách, hai hàm khác sẽ xử lý tốt hơn.

Cách tách và nối chuỗi trong VBA

Dữ liệu được dán vào Excel thường đến dưới dạng một chuỗi dài với dấu phân cách giữa mỗi mục, chẳng hạn như “Pepsi, Coke, Fanta, Juice”. Việc đọc dữ liệu đó bằng Mid và InStr rất chậm và dễ bị lỗi. VBA cung cấp một cặp hàm phù hợp cho chính công việc này.

chẻ Nhận vào một chuỗi ký tự được phân tách bằng dấu phẩy và trả về một mảng chỉ mục từ 0, với một phần tử tương ứng với một mục. Tham gia Hàm này thực hiện điều ngược lại, nhận một mảng và trả về một chuỗi duy nhất với dấu phân cách giữa các phần tử. Lưu ý rằng Join hoạt động trên một mảng, chứ không phải trên hai chuỗi riêng biệt.

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

Vòng lặp ghi mỗi loại đồ uống vào một hàng riêng trong bảng tính, và hộp thoại thông báo sẽ hiển thị Pepsi | Coke | Fanta | Juice. Ba điểm sau đây làm cho mẫu này đáng tin cậy trong mã sản phẩm:

  • Kết quả dựa trên chỉ số 0: Hàm Split luôn trả về một mảng được đánh số từ 0, bất kể Option Base được thiết lập như thế nào, vì vậy hãy điều khiển vòng lặp bằng LBound và UBound thay vì một số cố định.
  • Khai báo là String(): Gán kết quả vào một mảng chuỗi động. Việc khai báo kích thước cố định trước sẽ gây ra lỗi biên dịch.
  • Đầu vào trống: Việc tách một chuỗi rỗng sẽ trả về một mảng không có phần tử nào, vì vậy hãy kiểm tra với UBound trước khi đọc Items(0).

Ngay cả khi chọn đúng hàm, mã xử lý chuỗi vẫn có thể gặp lỗi theo một số cách có thể dự đoán được.

Các lỗi chuỗi VBA thường gặp và cách khắc phục chúng

Hầu hết các lỗi liên quan đến chuỗi ký tự trong Excel VBA đều xuất phát từ một vài nguyên nhân ngắn gọn. Nhận biết được triệu chứng sẽ giúp tiết kiệm thời gian và công sức gỡ lỗi.

  • Lỗi không khớp kiểu dữ liệu khi nối chuỗi: Dấu cộng được sử dụng giữa văn bản và số. Hãy thay thế nó bằng dấu và (&), dấu này sẽ tự động chuyển đổi số.
  • InStr trả về 0: Không tìm thấy chuỗi con. Phương thức InStr trả về 0 thay vì -1 khi thất bại, vì vậy hãy kiểm tra giá trị lớn hơn 0 trước khi truyền kết quả cho phương thức Mid.
  • Lỗi gọi thủ tục không hợp lệ trong Mid hoặc Left: Độ dài yêu cầu là số âm, hoặc vị trí bắt đầu nhỏ hơn 1. Hãy bảo vệ lời gọi hàm bằng Len để độ dài không bao giờ vượt quá chuỗi.
  • Những so sánh đáng lẽ phải khớp nhưng lại không khớp: Khoảng trắng thừa từ dữ liệu nhập khẩu sẽ phá vỡ sự bằng nhau. Hãy bọc cả hai phía bằng hàm Trim, và sử dụng StrComp khi cần bỏ qua chữ hoa chữ thường.
  • Văn bản sẽ không chuyển thành số: Giá trị như “1,200” sẽ không thực hiện được phép toán do dấu phân cách. Hãy loại bỏ dấu phân cách bằng hàm Replace trước khi chuyển đổi bằng CLng.

Tải xuống Excel chứa mã ở trên

Tải xuống tệp Excel ở trên Code

Câu Hỏi Thường Gặp

Chuỗi ký tự có độ dài thay đổi có thể chứa đến khoảng hai tỷ ký tự, còn chuỗi ký tự có độ dài cố định có thể chứa đến 65,400 ký tự. Tuy nhiên, một ô trong bảng tính chỉ lưu trữ được 32,767 ký tự, vì vậy các giá trị dài hơn sẽ bị cắt bớt khi ghi vào bảng tính.

Dấu bằng mặc định so sánh chúng có phân biệt chữ hoa chữ thường. Sử dụng StrComp(a, b, vbTextCompare) để có kết quả không phân biệt chữ hoa chữ thường, hoặc đặt Option Compare Text ở đầu mô-đun để thay đổi mặc định cho toàn bộ mô-đun.

Dấu và (&) chuyển đổi mọi toán hạng thành văn bản trước khi nối, vì vậy 10 & 5 sẽ trả về chuỗi 105. Hãy giữ nguyên các giá trị số và cộng chúng trước, sau đó nối kết quả nếu cần hiển thị trong một thông báo.

Vâng. Hãy mô tả đầu vào và đầu ra mong muốn, ví dụ như...tracKiểm tra đoạn mã trước dấu gạch ngang đầu tiên, và trợ lý AI sẽ trả về biểu thức Left và InStr. Hãy kiểm tra nó với các trường hợp ngoại lệ như thiếu dấu gạch ngang.

Đúng vậy. Hãy dán một biểu thức lồng nhau như Mid với InStr bên trong và trợ lý AI sẽ phân tích nó thành các bước, đặt tên cho từng đối số và đánh dấu trường hợp InStr trả về 0 và lệnh gọi thất bại.

Tóm tắt bài viết này với: