Một chức năng đơn giản để loại bỏ các ký tự đặc biệt từ một chuỗi trong VBA. Hữu ích để làm sạch tên tệp, tên trang tính trong Excel và nhiều nội dung khác
Ngày 23 tháng 12 năm 2021 • 3 phút đọcMike Wolfe
Hàm sau sẽ xóa các ký tự đặc biệt khỏi chuỗi trong VBA
Mật mã
Hãy xem bài viết của tôi về các bài kiểm tra tài liệu lấy cảm hứng từ Python nếu bạn quan tâm đến ký hiệu '>>>
trong tiêu đề hàm bên dưới. Những tuyên bố sử dụng mẫu đó trong các nhận xét có thể được kiểm chứng bằng một cuộc gọi đến thủ tục DocTests
của tôi
'---------------------------------------------------------------------------------------
' Procedure : StripSpecChars
' DateTime : 9/28/2007 - 12/23/2021
' Author : Mike Wolfe
' Source : //nolongerset.com/stripspecchars/
' Purpose : This function strips special characters from a string.
'---------------------------------------------------------------------------------------
'>>> StripSpecChars["Some Text to strip: Numbers 1-42!"]
'Some Text to strip Numbers 142
'>>> StripSpecChars["Some Text to strip: Numbers 1-42!", False, False, "-:"]
'SomeTexttostrip:Numbers-
'>>> StripSpecChars["Some Text to strip: Numbers 1-42!", False, True, "!", "_"]
'Some_Text_to_strip__Numbers_1_42!
'>>> StripSpecChars["Some Text to strip: Numbers 1-42!", False, True, "", ".^."]
'Some.^.Text.^.to.^.strip.^..^.Numbers.^.1.^.42.^.
'
Function StripSpecChars[TextToStrip As String, _
Optional AllowSpaces As Boolean = True, _
Optional AllowNums As Boolean = True, _
Optional WhiteList As String = vbNullString, _
Optional ReplacementText As String = vbNullString] As String
StripSpecChars = TextToStrip
Dim TextLength As Long
TextLength = Len[TextToStrip]
Dim i As Long
i = 1
Do While i "z"] And _
[Not IsNumeric[CurrChar] Or Not AllowNums] And _
[CurrChar " " Or Not AllowSpaces] And _
[Not CurrChar Like "[" & WhiteList & "]"] Then
StripSpecChars = Left[StripSpecChars, i - 1] & ReplacementText & Right[StripSpecChars, TextLength - i]
TextLength = TextLength - 1 + Len[ReplacementText]
i = i + Len[ReplacementText]
Else
i = i + 1
End If
Loop
End Function
Cách sử dụng
Sử dụng cơ bản
Ở mức cơ bản nhất, bạn chỉ cần truyền vào hàm một chuỗi và nó sẽ trả về cùng một chuỗi với bất kỳ ký tự đặc biệt nào bị loại bỏ
Thay thế khoảng trắng bằng dấu gạch dưới
Thông thường, bạn sẽ muốn giữ lại khoảng cách chữ cái để dễ đọc nhưng loại bỏ khoảng trắng. Điều đó rất dễ thực hiện bằng cách đặt tham số AllowSpaces tùy chọn thành Sai và tham số Văn bản thay thế thành ký tự gạch dưới
Thay thế TẤT CẢ các ký tự đặc biệt
Nếu bạn muốn giới hạn đầu ra chỉ ở các chữ cái [không có dấu cách hoặc số], bạn cũng có thể làm điều đó
Cho phép một số ký tự đặc biệt
Nếu có một vài ký tự đặc biệt mà bạn muốn cho phép đi qua thì sao?
cân nhắc địa phương
Tôi chỉ từng sử dụng điều này với cài đặt ngôn ngữ tiếng Anh Mỹ. Điều đó nói rằng, nó nên Just Work™ trong hầu hết các trường hợp vì nó dựa trên cài đặt So sánh tùy chọn mà bạn đang sử dụng trong mã của mình. Bản thân các cài đặt đó dựa trên trang mã hiệu quả của hệ thống hoặc cài đặt ngôn ngữ.
Kiểm tra liên kết So sánh cài đặt tùy chọn ở trên để biết chi tiết
Cân nhắc hiệu suất
Mã này không dành cho sử dụng với các chuỗi rất lớn [100 nghìn ký tự trở lên].
Đoạn mã lặp qua chuỗi từng ký tự một và cũng tạo lại chuỗi mới từng ký tự một. Thời gian xử lý không đáng kể đối với các chuỗi lên tới vài nghìn ký tự. Tuy nhiên, nó bắt đầu chậm lại với hơn 100 nghìn chuỗi ký tự
Bài viết tham khảo
Các bài kiểm tra tài liệu lấy cảm hứng từ Python trong VBA
Kiểm tra tài liệu không phải là sự thay thế cho kiểm tra đơn vị hoặc tích hợp. Nhưng chúng mang lại lợi tức đầu tư [ROI] tốt nhất so với bất kỳ loại thử nghiệm nào, chủ yếu là do nỗ lực viết chúng gần như bằng không