[英]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()
方法結合使用,該方法可以刪除不可打印的字符。
為什么不嘗試使用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.