Excel技巧(2):拜託殺了那些看不見的空白吧!

看過儲存格內怎麼看明明都是數字沒錯,可是卻怎麼樣都沒有辦法用它來做任何運算吧?
就算使用很基本的公式(TRIM)、或者資料剖析的方式,始終沒有辦法有效的改正。
其實原因大多都是你的資料很有可能是從網頁上的表格複製下來,或者檔案根本就是網頁格式(Excel很聰明可以自動開啟,只是有些地方沒有處理)。
如何診斷
使用公式 =LEN(儲存格) 來判斷,如果你眼睛明明看到的就1個3位數的數字,理當用LEN來數把3位數字當成文字的長度,應該也是3,可是結果卻是3以上的數字。
肇因
儲存格除了看到的數字之外,也存在了其他「不是用鍵盤上空白鍵輸入的空白」....很像在繞口令,但文字中其實有很多沒有顯示、或者顯示跟空白相同,但是他卻不等於空白。
舉例來說:換行符號、Tab鍵(一般人非常難再儲存格中輸入TAB)、或HTML的空白 。這些都是導致該儲存格被Excel判定是文字,可是我們卻沒有辦法用取代空白的方式改變。
解法

  1. 如果只有幾筆資料的話,真的!自己另外在別格看著數字重新敲一次吧。這絕對是最有效率與簡單的方法(沒開玩笑,我真的是建議幾個數字而已,手敲吧~~)
  2. 用滑鼠或鍵盤點選編輯該儲存格,在數字的前後想辦法可否選取到那看不見的空白,想辦法複製1個,再用取代的功能,用Ctrl+V貼上那看不到的空白。(一般的HTML空白是可以這麼處裡的!)
  3. 使用巨集寫成Function 或者 Sub,然後用以下的程式碼處理它。我自己是把這個類似的功能寫成Sub,然後固定儲存在個人巨集,設定快速鍵來呼叫。(改天再來寫怎麼做出個人巨集
Sub Trim_Range(selRange As Range)
    Dim i As Long, j As Long, cnt As Integer
    cnt = 0
    For i = 1 To selRange.Areas.Count
        For j = 1 To selRange.Areas(i).Count
            If IsEmpty(selRange.Areas(i).Item(j).Value) Then
                cnt = cnt + 1
            Else
                If cnt > 0 Then cnt = 0
                selRange.Areas(i).Item(j) = Trim(Replace(Replace(Replace(selRange.Areas(i).Item(j).Value, ChrW(160), ""), Chr(9), ""), Chr(10), ""))
            End If
            ' 50是為了可選整個Row或Column,取巧地連續找到50個沒值就當其他也都是空的了
            If cnt >= 50 Then Exit Sub
        Next j
    Next i
End Sub

留言

Unknown寫道…
HI~ 我非常有興趣知道 巨集的i 和 j~要怎麼使用?!
可以怎麼使用??
SC寫道…
i , j 是變數名稱,目的是把集合內的所有項目都數過一遍。
如果你沒有試過,建議可以先練習操作基本的座標 Cells(i, j)。
因為這裡是比較抽象的 i 指的是被選取的Area總數,j 指的是個別Area內的項目個數。會這麼寫是因為可以選擇多個區塊(ex: 同時選取兩部分的儲存格A1~B3, D1~F3)。
Unknown寫道…
太感謝了!!
每篇都說什麼TRIM SUBTITUTE函數,真的就刪不掉!!
原來就複製空格再取代掉就好!!!
謝謝你!!!

這個網誌中的熱門文章

Excel技巧(1):檔案肥大的原因,附上減肥撇步

Excel版本與檔案格式