工作中我常常需要從系統中導出數據,比如說我導出了店鋪銷售,但是當我用Vlookup查找某一個店鋪的銷售時,總是顯示錯誤值(#N/A)。很奇怪,查找與被查找的店鋪名稱完全一樣,為什麼匹配會出現錯誤呢?
原因其實是系統導出的數據有時會帶有非打印字符或空格(肉眼不可見),導致匹配出錯。比如下面的例子:
首先我們看一下單元格中的文本個數,公式計算和自己數出來相差1。這就是我們看不到的那個1。

那麼我們怎麼才能清除那個看不見的字符呢?
第一種方法:分列法

一直點擊下一步到最終完成即可。如果不可以,那就採用第二種方法。
第二種:函數法
這裡要介紹的函數是CLEAN和TRIM。
CLEAN 函數用於刪除文本中 7 位 ASCII 碼的前 32 個非打印字符(值為 0 到 31)。
TRIM可以除去字符串開頭和末尾的空格,ASCII為32。
通常我會將兩個函數一起使用,這樣既可清除空格,也可清除非打印字符。當然也可以單獨使用。


那麼我們怎麼知道文本是否含有非打印字符呢?
CODE函數可以告訴你。
CODE函數用於返迴文本字符串中第一個字符的數字代碼。如下所示:

CODE計算為9表示文本最前有水平製表符。因為水平製表符的ASCII碼為9。CODE如果小於等於33就可以判斷文本首字符為非打印字符或者空格。
做到這裡我很好奇,如果非打印字符或者空格在文本中間或者尾部又怎麼發現呢(當然一般不會在中間)?所以我編了一段代碼。使用效果如下:


代碼原理:
代碼逐個單元格逐個字符查看ASCII,如果大於等於0且小於33即判斷為含非打印字符或空格。

Sub asc編碼()
For Each rg In Selection
For i = 1 To Len(rg)
n = Mid(rg, i, 1)
num = asc(n)
If num < 33 And num >= 0 Then
rg.Offset(0, 1) = "含非打印字符或空格"
GoTo 100
End If
Next
100:
Next
MsgBox "結束"
End Sub
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/273131.html