我知道Excel CLEAN函数会从提供的文本字符串中删除所有不可打印的字符。例如,让我们在excel中考虑以下命令
=CHAR(127)& "10"
结果是
它位于A1的单元格,但是命令
=CLEAN(A1)
会留下相同的结果,那么问题是什么?为什么它不起作用
答案 0 :(得分:0)
from Microsoft Office Support: CLEAN Function
CLEAN功能旨在从文本中删除7位ASCII代码(值0到31)中的前32个非打印字符。在Unicode字符集中,还有其他非打印字符(值127,129,141,143,144和157)。 CLEAN函数本身不会删除这些额外的非打印字符
答案 1 :(得分:0)
我创建了一个可以删除选择范围
上的字符的函数Sub Remove_Invisible_Character()
'Remove spaces and nonprinting characters from text
'9,13,28,29,30,31,128,129,130,131,132,133,134,135,136,137,
'138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,
'153,154,155,156,157,158,159,1970,1971,1972,1973,1974,1975,1976,
'1977,1978,1979,1980,1981,1982,1983,6155,6156,6157,6158,8203,8204,
'8205,8206,8207,8233,8234,8235,8236,8237,8238,8289,8290,8291,8292,
'8298,8299,8300,8301,8302,8303,64976,64977,64978,64979,64980,64981,
'64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,
'64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,
'65004,65005,65006,65007,65060,65061,65062,65063,65064,65065,65066,
'65067,65068,65069,65070,65071,65279
Dim C, nArrSearch As Variant
Dim nRng As Range
Dim firstAddress, nMsg, nChar As String
Dim bRemoved As Boolean
Dim N As Single
Dim nSearchStr As Variant
nChar = ""
nChar = nChar & "9,13,28,29,30,31,128,129,130,131,132,133,134,135,136,137,"
nChar = nChar & "138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,"
nChar = nChar & "153,154,155,156,157,158,159,1970,1971,1972,1973,1974,1975,1976,"
nChar = nChar & "1977,1978,1979,1980,1981,1982,1983,6155,6156,6157,6158,8203,8204,"
nChar = nChar & "8205,8206,8207,8233,8234,8235,8236,8237,8238,8289,8290,8291,8292,"
nChar = nChar & "8298,8299,8300,8301,8302,8303,64976,64977,64978,64979,64980,64981,"
nChar = nChar & "64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,"
nChar = nChar & "64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,"
nChar = nChar & "65004,65005,65006,65007,65060,65061,65062,65063,65064,65065,65066,"
nChar = nChar & "65067,65068,65069,65070,65071,65279"
nArrSearch = Split(nChar, ",")
With Selection
For N = 0 To UBound(nArrSearch)
nSearchStr = ChrW(CSng(nArrSearch(N)))
nSearchStr = "*" & nSearchStr & "*"
Set C = .Find(nSearchStr, LookIn:=xlFormulas)
If Not C Is Nothing Then
If nRng Is Nothing Then
Set nRng = C
Else
Set nRng = Union(nRng, C)
End If
firstAddress = C.Address(0, 0)
Do While Not C Is Nothing
Set C = .FindNext(C)
If C.Address(0, 0) = firstAddress Then Exit Do
Set nRng = Union(nRng, C)
Loop
End If
Next N
End With
If Not nRng Is Nothing Then
nMsg = "Based on Your Selection : " & Selection.Address(0, 0) & vbNewLine & _
"Total Found : " & nRng.Cells.Count & vbNewLine
If MsgBox(nMsg & vbNewLine & _
"Do you want to remove invisible character ?", vbYesNo + vbQuestion, "Remove Invisible Character") <> vbYes Then Exit Sub
bRemoved = True
For N = 0 To UBound(nArrSearch)
nSearchStr = ChrW(CSng(nArrSearch(N)))
'MsgBox AscB(nSearchStr)
' MsgBox nRng.Replace(Asc(CSng(nArrSearch(N))), "", MatchByte:=True)
If nRng.Replace(nSearchStr, "", MatchByte:=True) <> True Then
bRemoved = False
End If
Next N
If bRemoved Then
MsgBox "Invisible Character Removed", , "Completed"
Else
MsgBox "Some invisible character not able to remove" & vbNewLine & _
"Please inform the Developer for further improvement", , "Completed"
End If
Else
MsgBox "Based on Your Selection : " & Selection.Address(0, 0) & vbNewLine & _
"No Invisible Character Found", vbInformation
End If
End Sub
答案 2 :(得分:-1)
因为我发现干净功能适用于以下命令
=CHAR(21)& "dato"
但是char(21)和char(127)键入相同的非打印字符,有什么区别?