close

最近因為工作需要,下班後摸索嘗試了excel巨集,竟然成功了~(雖然現在Excel巨集已經算退流行了,python才是主流...以後有機會再來學python ^^)

真有成就感~來記錄分享一下~

 

這次主要是讓巨集自動抓取網站上的資料,依據不同欄位分類,自動填入

 

會使用到的excel功能有:

excel 錄製巨集、

資料匯入(從web來源匯入)

 

覺得「錄製巨集」對於初學者很方便,跟photoshop的動作錄製有點類似,都是先把要做的事情錄一遍下來,然後讓電腦重複幫你做。

就算完全沒任何基礎,不會寫程式也OK。遇到需要的功能而不知道語法,可以在網路上搜尋語法就OK了。

(但會寫程式也是有差啦,debug時就需要靠程式邏輯了 XDD)

 

這次會使用的是公益資訊中心網站,抓取非營利組織的email名單。

image

由於網站是一個組織就一個頁面,所以如果要蒐集各組織的名稱、聯絡人和email,就需要一個個網頁點進去,複製再貼到excel裡,感覺蠻花時間。

所以我就想...能不能我指定好要抓的各網址,讓電腦自動到該網址抓取~

 

我先開立3個工作表,分別存放

工作表1.要抓取的機構  

工作表2.網站複製下來的原始資料 

工作表3.最後彙整的清單

 

巨集,我分為3個部分。(不確定能不能在同一個巨集裡有多個函式,有請高手補充)

巨集1.從網站匯入外部資料,放在工作表2

巨集2.從工作表2複製機構名稱、聯絡人、email到 工作表3,回到工作表2清除外部匯入的資料(若不清除亦可,新匯入的資料會以插入方式,加在上一筆資料的最左邊)

巨集3.呼叫巨集1和巨集2

 

步驟1.複製網頁上的各組織的名稱,直接貼上至excel的工作表1,這時候第一欄會呈現帶連結的文字,
我們等下要做的就是抓取這些文字的超連結,讓巨集進入到該機構的超連結網址,抓取資料。

image

 

image

 

步驟2.開始錄製巨集~

首先要開啟「開發人員」頁籤,可以在檔案→選項→自訂功能區,把開發人員這個選項打勾

image

 

image

在工作表2,點選錄製巨集,

imageimage

 

接著點選「資料」頁籤,選擇「從Web」(從網站取得外部資料) ,

image

在地址欄位輸入其中一筆網址(例如 http://www.npo.org.tw/npolist_detail.asp?id=7457 ),點選右邊的「到」按鈕

image

 

等畫面載入後,點選聯絡資訊那塊表格左邊的箭頭,然後按下 匯入

image

按下 確定

image

匯入後 如下圖

image

 

接著按 停止錄製,到此,巨集1告一個段落

image

 

然後再錄製巨集2

image

複製工作表2的 B1儲存格,機構名稱,貼到工作表3的 A1 儲存格。

再複製工作表2的 聯絡人(B4),貼到工作表3。依此類推,複製電子郵件欄位。

image

貼完如下圖,回到工作表2,刪除剛剛匯入的資料(不刪也OK),接著按「停止錄製」

這樣就完成了巨集1和巨集2的部分了。

image

 

接下來是把巨集1和巨集2合併呼叫的巨集3~

點選Visual Basic,進入巨集編輯畫面

image

image

 

在最下方增加一個巨集3,設定url和i兩個變數,分別傳入巨集1和巨集2

定義變數url 為 工作表1的第一欄的超連結網址

變數 i ,則是跑迴圈用的,看有幾列就寫到幾,也可以先測試跑個3~5個,以免有錯誤時會卡死

image

 

接著稍微改一下巨集1,把url變數傳入巨集1

記得要在巨集1最上方 增加一列  「Sheets("工作表2").Select」,因為剛剛錄製時,沒有產生這行

修改URL這行,移除原本網址,改為「"URL;" + url, Destination:=Range( _ 」

image

 

Name的那行,可以在最前方加 ' 單引號,即可註解掉,但實測這列不改也不會影響到程式運行~

image

調整後的巨集1,長這樣~

image

巨集2,加入i 變數,微調程式碼,改為貼到第i列的第1個 , Cells( i , 1 ),其餘依此類推。

image

 

到此就大致完成囉!

為了方便呼叫巨集,也可以點選 巨集→巨集3→選項,設定快捷鍵~

image

image

 

大家工作上如有遇到要自動抓資料,也可以試試看哦~蠻方便的!

也可以在這篇底下留言,交流討論~

因為我是初學者,如果有寫錯的地方,也歡迎留言告訴我,我會盡快修正哦~

 

arrow
arrow
    創作者介紹
    創作者 clover75 的頭像
    clover75

    種子種子快長大

    clover75 發表在 痞客邦 留言(0) 人氣()