Excel隐形问号

我从系统中提取信息到Excel文件。 “Leone”的名字看起来是一样的,但是Excel对它的认识却不同。

塞拉利昂

塞拉利昂

string的长度是不一样的,如果我用VBA检查值是不可见的? 是第一个字符。

你能帮我如何摆脱隐形人物吗?

在这里输入图像描述

一般来说,这很奇怪 – 这就是Chrome从问题中呈现HTML的方式:

在这里输入图像说明

这是一个解决方法,它检查string的字符,并build立一个新的,如果其中一个等于63.非常像一个简单的replace函数:

 Public Function removeInvisible(rngRange As Range) As String Dim cnt As Long For cnt = 1 To Len(rngRange) If AscW(Mid(rngRange, cnt, 1)) <> 8203 Then removeInvisible = removeInvisible & Mid(rngRange, cnt, 1) End If Next cnt End Function 

摆脱所有隐形? 你可以试试这个。

 Sub CleanUnicode() Dim n As Long, strClean As String, strChr As String Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet3") 'change Sheet3 to data sheet For Each cel In ws.Range("A1:A10") 'change A1:A10 to working range strClean = cel.Value For n = Len(strClean) To 1 Step -1 strChr = Mid(strClean, n, 1) If AscW(strChr) = 8203 Then '? is unicode character 8203 strClean = Replace(strClean, strChr, "") End If Next cel.Value = WorksheetFunction.Trim(strClean) Next cel End Sub 

而不是If AscW(strChr) = 8203 Then你也可以使用If AscW(strChr) > 255 Then

编辑1:根据@ YowE3K的build议。 假设你只在单元中有Unicode 8203被replace。

 Sub CleanUnicode() Dim n As Long, strClean As String, strChr As String Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet3") 'change Sheet3 to data sheet For Each cel In ws.Range("A1:A10") 'change A1:A10 to working range cel.Value = Replace(cel.Value, ChrW(8203), "") Next cel End Sub 

从这里得到这个。

如果文本来自复制/粘贴,则可能采取了其他一些不可打印的字符。 这些可能会显示在VBA编辑器中? 这通常是unicode字符在字体不支持时呈现的方式。

我会尝试在其中一个单元格中的公式=CODE(LEFT(A3,1)) ,看看不可见字符的Unicode代码点是什么。

如果事实certificate是一个非ASCII的聊天,那么你可以写一个macros,去掉根据代码值有问题的字符。

要从所有范围内的单元格中删除多个非ASCII字符,可以使用这个。

 Option Explicit Sub test() Dim regEx As Object Dim temparray() As String Dim myrange As Range Dim lrow As Long Dim lcol As Long Dim counter As Long Dim i As Long Dim j As Long Set regEx = CreateObject("vbscript.regexp") With regEx .Pattern = "[^\u0000-\u007F]" .MultiLine = False .Global = True .IgnoreCase = False End With 'set your last row and column lrow = 5 lcol = 5 ReDim temparray(1 To lrow, 1 To lcol) Set myrange = Sheets("Sheet1").Range(Cells(1, 1), Cells(lrow, lcol)) Application.ScreenUpdating = False counter = 0 For i = 1 To lrow For j = 1 To lcol temparray(i, j) = regEx.Replace(myrange.Cells(i, j).Value, "") counter = counter + 1 Next j Next i myrange.Value = temparray Application.ScreenUpdating = True End Sub