Excel vba tìm ký tự đặc biệt trong chuỗi

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

Mike Wolfe

Ngày 23 tháng 12 năm 2021 3 phút đọc

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

Làm cách nào để tìm các ký tự đặc biệt trong chuỗi trong VBA?

Chức năng Ký tự đặc biệt [văn bản dưới dạng chuỗi] dưới dạng Boolean
Dim f As Long
Dim ee As String
Chọn trường hợp ee
Trường hợp "0" đến "9", "A" đến "Z", "a" đến "z", " "
Ký tự đặc biệt = FALSE
trường hợp khác
Ký tự đặc biệt = TRUE

Làm cách nào để kiểm tra xem một chuỗi có chứa các ký tự đặc biệt trong VB net không?

Click Dim noSpecial Characters = text. Tất cả[Hàm[c] Char .

Làm cách nào để kiểm tra chuỗi chứa ký tự đặc biệt và số trong javascript?

Sử dụng phương thức “match[]” để xem chuỗi chỉ chứa các ký tự và số đặc biệt hay không . Nó so sánh một chuỗi với một biểu thức chính quy hoặc mẫu biểu thức chính quy. Nếu một sự trùng khớp xảy ra, nó trả về một mảng gồm tất cả các lần trùng khớp; .

Chủ Đề