簡體   English   中英

VBA修剪留下領先的空白區域

[英]VBA Trim leaving leading white space

我正在嘗試比較宏中的字符串,並且數據並不總是一致地輸入。 差異歸結為領先的空白量(即“測試”與“測試”與“測試”的比較)

對於我的宏,示例中的三個字符串應該是等效的。 但是我不能使用Replace,因為字符串中間的任何空格(例如“test one two three”)都應該保留。 我曾經認為這是Trim應該做的(以及刪除所有尾隨空格)。 但是當我在琴弦上使用Trim時,我看不出有什么不同,而且我肯定在琴弦前面留下了白色空間。

那么A)Trim在VBA中做了什么? B)我正在嘗試做什么內置功能,或者我只需要編寫一個函數?

謝謝!

所以,正如加里的學生所說,這個角色不是32歲。實際上是160歲。現在我是一個簡單的人,白色空間就是白色空間。 因此,根據該視圖,我創建了以下函數,該函數將刪除未實際顯示給人眼的所有Unicode字符(即非特殊字符,非字母數字)。 該功能如下:

Function TrueTrim(v As String) As String
Dim out As String
Dim bad As String
bad = "||127||129||141||143||144||160||173||" 'Characters that don't output something
       'the human eye can see based on http://www.gtwiki.org/mwiki/?title=VB_Chr_Values

out = v

'Chop off the first character so long as it's white space
If v <> "" Then
    Do While AscW(Left(out, 1)) < 33 Or InStr(1, bad, "||" & AscW(Left(out, 1)) & "||") <> 0 'Left(out, 1) = " " Or Left(out, 1) = Chr(9) Or Left(out, 1) = Chr(160)
        out = Right(out, Len(out) - 1)
    Loop

    'Chop off the last character so long as it's white space
    Do While AscW(Right(out, 1)) < 33 Or InStr(1, bad, "||" & AscW(Right(out, 1)) & "||") <> 0 'Right(out, 1) = " " Or Right(out, 1) = Chr(9) Or Right(out, 1) = Chr(160)
        out = Left(out, Len(out) - 1)
    Loop
End If 'else out = "" and there's no processing to be done

'Capture result for return
TrueTrim = out
End Function

TRIM()將刪除所有前導空格

Sub demo()
    Dim s As String
    s = "   test   "
    s2 = Trim(s)
    msg = ""
    For i = 1 To Len(s2)
        msg = msg & i & vbTab & Mid(s2, i, 1) & vbCrLf
    Next i
    MsgBox msg
End Sub

您的數據可能包含不可見的字符,但也不是空格。

在沒有看到代碼的情況下很難知道,但您也可以將Application.WorksheetFunction.Clean()方法與Trim()方法結合使用,該方法可以刪除不可打印的字符。

WorksheetFunction.Clean()的MSDN參考頁

為什么不嘗試使用Instr功能呢? 像這樣的東西

Function Comp2Strings(str1 As String, str2 As String) As Boolean
    If InStr(str1, str2) <> 0 Or InStr(str2, str1) <> 0 Then
        Comp2Strings = True
    Else
        Comp2Strings = False
    End If
End Function

基本上你正在檢查string1是否包含string2或string2是否包含string1。 這將始終有效,您無需修剪數據。

VBA的Trim功能僅限於處理空間。 它將刪除字符串開頭和結尾的空格。

為了處理換行符和標簽之類的東西,我總是導入Microsoft VBScript RegEx庫並用它來替換空格字符。

在VBA窗口中,轉到“工具”,“引用”,“查找Microsoft VBScript正則表達式5.5”。 檢查並點擊確定。

然后你可以創建一個相當簡單的函數來修剪所有的空白區域,而不僅僅是空格。

Private Function TrimEx(stringToClean As String)
    Dim re As New RegExp
    ' Matches any whitespace at start of string
    re.Pattern = "^\s*"
    stringToClean = re.Replace(stringToClean, "")
    ' Matches any whitespace at end of string
    re.Pattern = "\s*$"
    stringToClean = re.Replace(stringToClean, "")
    TrimEx = stringToClean
End Function

非printables划分網頁的不同行。 我分別用X,Y和Z替換它們。

Debug.Print Trim(Mid(“X test”,2))'第一個位置在VBA中計為2

Debug.Print Trim(Mid(“XY test”,3))'第二位在VBA中計為3

Debug.Print Trim(Mid(“XYZ test”,2))'需要更多輪:)

程序員更喜歡大文本,因為可以用內置工具(inSTR,Mid,Left和其他)整齊地切割。 使用來自幾個孩子的文本(即使用.textContent與.innerText)可能會導致幾個非printables應對,但DOM和REGEX不適合初學者。 精確地處理內部文本的子元素(子元素一個一個!)可以幫助規避不可打印的字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM