星期三, 1月 19, 2011

Excel 實戰筆記之一,用 MS Excel 整理從網路上copy下來的通訊錄資料

上週末,我以前的同事她在工作上遇到了一些需要處理的資料——這應該是從哪裡的網站上蒐集下來的吧!
2011-01-19_181925
而她要整理成如下面的樣式:
2011-01-19_183504
身為童子軍的我的,當然要日行一善、伸出援手⋯(謎之音:我看你是寒假吃飽太無聊了,在找機會練功吧!)

首先,我們來分析看看這個問題,「應該」會需要作的步驟:
  1. 需要刪掉所有資料間的「-------------------------------------------------------」一串無意義的符號
  2. 刪掉所有多餘的空隔
  3. 刪掉電話號碼前的「TEL:」
  4. 將資料以每三列為一組整理成一列資料表

首先前三個步驟,很容易完成,因為資料來源很單純,所以不需要用的複雜的正規表示法(Regular Expressions),只要用普通的「尋找及取代」就可以了。
刪掉每一行的「-----------------------------------------------------------------」
2011-01-19_182049
刪掉多餘的空格(註:因為中文的文句中,本來就不會出現空格,所以我用很簡單的方法刪掉各個資料頭尾多餘的空格,但不一定試用於英文的文句中,因為英文地址間本來就容許空格,如用此方法則會連句子中應有的空格也被刪除。)
2011-01-19_182143
刪除「TEL:」
2011-01-19_183206
完了嗎?還沒!出來的資料還不夠整齊,我還要刪掉多餘的空行。
首先我在最上面的第一列插如一列空行,等一下我才可以用「自動篩選」找出所有的空行,並刪除所有的空行。
2011-01-19_182551
2011-01-19_182608

在這要用「自動篩選」前,請注意,我們要先選取一整欄的資料欄,否則「自動篩選」只會選到前面的幾列資料。
2011-01-19_182703

在「自動篩選」的下拉式方塊裡,我們只要選擇顯示「空格」就可以了,其它的資料都不要勾選。
2011-01-19_182814
選取藍色列號的資料列,按滑鼠右鍵選取「刪除列」。
2011-01-19_182914
取消「自動篩選」按鈕,我們應該可以看到如下圖的資料:
2011-01-19_183136
但是到這裡我們還沒有完成,我們還沒有把這些資料變成一列一列的資料表。但是,接下來我們應該怎麼作呢?我們先來想想看這些資料有什麼規律:
每三列為一組,第一列是店名、第二列是地址、第三列是聯絡電話。
所以第一筆資料的店名是在A1、第二筆資料的店名是在A4、第三筆資料的店名是在A7⋯
所以第n筆店名資料所在儲存格位置的關係是:
第n筆店所在儲存格=n3-2
我新建立一個工作表,在A欄的位置拉出從1開始的連續數字(這個實例中大約到400多就夠了),而在B欄的第一格(B1)填入
=A1*3-2
並下拉複製填滿B欄(大約到400多列就夠了)
2011-01-19_183906

接下來我們需要在C欄第一列(C1)叫用我們的 Excel 函數 INDIRECT ,它可以參照到傳給它的文字,只要該文字符合一定的樣式
2011-01-19_184158
例如我這裡填入的
=INDIRECT("'1'!A1")
所出來的效果就相當於
='1'!A1
只是用 INDIRECT 我可以賦予它更多的變數。
2011-01-19_184533
例如在我這個個案中,我的 C1 填如的函數是:
=INDIRECT("'1'!A"&B1)
其中的 B1 就是一個變數,當我下拉填滿其它儲存格時,會隨著我每一列的B1、B2、B3⋯⋯資料而改變。而指向它們所代表的數字 1 、 4 、 7 ⋯⋯ 整個函式就相當於變成了 ='1'!A1 、 ='1'!A4 、 ='1'!A7 ⋯⋯ 只是後面的函式不再需要我一個一個去填,只要用 Excel 就可以搞定了。(註:其中的& 符號代表的是字串的連結符號)
2011-01-19_184814
另外後面代表地址的 D1 和代表聯絡電話的 E1 則只要分別在 B1 的後面 +1 和 +2 ,並填滿其它資料列即可:
=INDIRECT("'1'!A"&B1+1)
=INDIRECT("'1'!A"&B1+2)

後記:或許有人會問我為什麼不用程式再加正規表示法(Regular Expressions),首先,因為我不會用 RE ,也不知道那是什麼,能不能用來解決這個問題。再者,我想,這個問題應該沒有困難到要寫程式來解決= =|||

沒有留言:

張貼留言

創用 CC 授權條款
瑀的貓、田園與電腦點點滴滴何崧瑀製作,以創用CC 姓名標示-非商業性-禁止改作 3.0 台灣 授權條款釋出。