[VBA] 操控IE,秒抓 資產負債表

何謂「 資產負債表 」?

資產負債表 ( Balance Sheet ) 是會計報表的一種,用於呈現一個企業或機構在特定日期的財務狀況。
它主要由兩個部分組成:資產負債股東權益。( 這兩個部分必須平衡 ),也就是說 : 資產總額 必須等於 負債股東權益總額

資產 = 負債 + 股東權益

資產負債表 中的重要數據

[ 資產負債表 – 重要數據 ]
A. 總資產:是公司所有資產的總和,包括 : 流動資產固定資產。 這反映公司的規模和經濟實力。
流動資產:是公司 現金 / 存貨 / 應收款項 等能夠在短時間內變現的資產。 這反映公司的營運狀況和短期償債能力。
固定資產:是公司長期持有的不易轉換為現金的資產,如 : 房屋 / 設備 / 機器等。 這反映公司的資本投資和長期發展方向。
B. 總負債:是公司所有債務的總和,包括 : 流動負債長期負債。 這反映公司的財務風險和債務負擔。
流動負債:是公司短期需償還的債務,如 : 應付款項 / 短期貸款 等。 這反映公司的短期財務風險和償債能力。
長期負債:是公司長期需要償還的債務,如 : 長期貸款 / 公司債 等。 這反映公司長期財務風險和長期償債能力。
C. 股東權益:是公司剩餘的資產,包括 : 普通股股本 / 資本公積 / 保留盈餘非控制制權益 等。 這反映公司的價值和股東對公司的投資收益。

資產負債表 的數據來源

◎ 為求準確,本文 資產負債表 的數據來源,取自 公開資訊觀測站,網址 : https://mops.twse.com.tw/mops/web/index
[ 公開資訊觀測站 — 網站頁面 ] :
資產負債表
資產負債表 : 取得路徑,參考上圖。也可以直接輸入網址 : https://mops.twse.com.tw/mops/web/t164sb03 取得。

[ 資產負債表 — 個股代號 / 輸入畫面 ] :
資產負債表

[ 輸入步驟 ] :
1. 資料 選項 : 有 最新資料 ( 預設 ) 及 歷史資料 二組。
2. 公司代號或簡稱 輸入 : 本文以 2330 ( 台積電 ) 為例。
3. 查詢 點擊。

PS. 公開資訊觀測站 — 同時提供 歷史資料 的抓取。( ◎ 在資料選項框內,點擊 — 選取 : 歷史資料,即可。此時,在 年度季別 位置,會顯示資料輸入框,等待輸入。)
資產負債表

總資產 數據擷取

◎ 以最新資料為例,完成以上的輸入動作,網頁下方會出現 上一季去年季度 的財報資料。( PS. 由於頁面資料冗長,便分段解說重要數據位置。)
[ 總資產 數據擷取 ] :
資產負債表
資產總額 ( 總資產 ) = 流動資產合計 + 非流動資產( 固定資產 )合計。

總負債 數據擷取

[ 總負債 數據擷取 ] :
資產負債表
負債總額 ( 總負債 ) = 流動負債合計 + 非流動負債( 長期負債 )合計。

股東權益 數據擷取

[ 股東權益 數據擷取 ] :
資產負債表
權益總額 ( 股東權益 ) = 股本合計 + 資本公積合計 + 保留盈餘合計 + 非控制權益

[ 注意 — 資料驗算 ] :
資產 = 負債 + 股東權益
※ 台積電(2330) / 民國111年第4季 — 總資產 : 4964778878 = 負債 + 股東權益 : 4964778878 ( 達成平衡 )。

網路爬蟲 – 抓取 資產負債表 最新資料

IE 設定與連線

※ 本文以操控 IE 瀏覽器的爬蟲方式,抓取 公開資訊觀測站 的 資產負債表。
[ A ] : 首先,設定 IE 物件 : Set IE = CreateObject(“InternetExplorer.Application”)
[ B ] : 設定欲瀏覽網頁 – 資產負債表 網址 : URL = “https://mops.twse.com.tw/mops/web/t164sb03”
[ C ] : 設定是否顯示網頁連線畫面 : IE.Visible = True ( PS. True : 顯示 / False : 不顯示 )
[ D ] : IE 連線到 資產負債表 頁面 : IE.Navigate URL

    
    [ 程式碼 / IE 設定與連線 ] :
    Set IE = CreateObject("InternetExplorer.Application")
    URL = "https://mops.twse.com.tw/mops/web/t164sb03"
    IE.Visible = True
    IE.Navigate URL 

[ E ] : IE 連線後,等待網頁加載完成 :

    
    [ 程式碼 / 等待網頁加載完成 ] :
    Do Until Not IE.Busy And IE.readyState = 4
            DoEvents
    Loop

網路爬蟲 – 操控IE

◎ 完成以上步驟,系統根據 IE.Visible = True ( 顯示頁面 ),則彈出IE瀏覽器視窗,顯示 資產負債表 首頁。畫面如下 :


◎ 此時,資產負債表 的預設抓取為 : 最新資料,所以不必修改,只需填入 : 公司代碼 及 按下 : 查詢按鈕,即可。

模擬 / 輸入股票代號

※ 正式進入 網路爬蟲 — 模擬鍵盤輸入 : 2330 ( 台積電 ) 公司代號。

[ 0 ] : 模擬鍵盤輸入 : 首先利用 Chrome 開發者工具,查出 公司代號輸入框,在 HTML 裡的確切位置。


[ 1 ] : 開啟 Chrome 開發者工具 : 按下 > 滑鼠右鍵 – 點選 : 檢查 或 直接按下 > 鍵盤 : F12 鍵,螢幕右半邊會彈出 Chrome 開發者工具 畫面。


[ 2 ] : 執行網頁刷新 : 剛啟動 Chrome 開發者工具時,網頁資料並未與之連結,必須先按下 : Ctrl + R 或是 F5 鍵,將網頁刷新,才能連結網頁資料。


[ 3 ] : 點擊 檢查工具 : 在 Chrome 開發者工具中,有個非常好用的工具 : ,它可以直接顯示網頁中任何元素的使用語法。
[ 4 ] : 點擊 公司代號輸入框 : 點擊完 後,便移動游標至左邊網頁,點擊 : 公司代號輸入框,其HTML設計語法,顯示在右邊 Elements 文件夾裡。


[ 5 ] : 輸入框 / 程式語法 :


[ 語法解說 ] :
A. IE.document.getElementsBy : 這是操控IE的使用語法 — 意思是 : 從 IE 下載的文件檔中,取得何種元素值
B. ClassName : 對應 HTML 屬性名稱 : Class。( 參考上圖 )
C. “textbox” : 對應 HTML 屬性值 : “textbox”。( 參考上圖 )
D. (1).Value : 對應 IE文件檔中,第2Class = “textbox” 屬性值位置的數值(Value) 。

( PS. 至於為何是 : (1),可在開發者工具視窗內,按 : Ctrl + F 鍵 (搜尋),此時下方會出現搜尋框,輸入 : textbox 後,右邊數值出現 : 1 of 3,表示 : 文件資料中,有3個相同值(textbox),調整 鍵,來到 2 of 3,網頁畫面中公司代號輸入框會有顏色變化,表示位置正確,排序 : 2。但在VBA程式中,物件排序以 0 開頭,所以實際值為 : 1。)



IE.document.getElementsByClassName(“textbox”)(1).Value = “2330” : 程式語法意思為 : 在第 2 個輸入框(“textbox”)中,填入 : 2330 (台積電/公司代號)。
[ 同理 ] : 只要將公司代號 : 2330,設定成 : 變數,只要修改–變數值,便能查詢所有上市櫃公司的 資產負債表。

模擬 / 按下查詢按鈕

※ 網路爬蟲 — 模擬按下 : 查詢 按鈕。

[ 0 ] : 模擬按下按鈕 : 利用 Chrome 開發者工具,查出 查詢按鈕,在 HTML 裡的確切位置。


[ 1 ] : 開啟 Chrome 開發者工具 : 按下 > 滑鼠右鍵 – 點選 : 檢查 或 直接按下 > 鍵盤 : F12 鍵,螢幕右半邊會彈出 Chrome 開發者工具 畫面。
◎ 同 模擬 / 輸入股票代號 步驟 [ 1 ] 畫面。

[ 2 ] : 執行網頁刷新 : 剛啟動 Chrome 開發者工具時,網頁資料並未與之連結,必須先按下 : Ctrl + R 或是 F5 鍵,將網頁刷新,才能連結網頁資料。
◎ 同 模擬 / 輸入股票代號 步驟 [ 2 ] 畫面。

[ 3 ] : 點擊 檢查工具 : 在 Chrome 開發者工具中,有個非常好用的工具 : ,它可以直接顯示網頁中任何元素的使用語法。
[ 4 ] : 點擊 查詢按鈕 : 點擊完 後,便移動游標至左邊網頁,點擊 : 查詢按鈕,其HTML設計語法,顯示在右邊 Elements 文件夾裡。


[ 5 ] : 查詢按鈕 / HTML 網頁語法 :

    
    [ 程式碼 / 按下按鈕 ] :
    Set A = IE.document.getElementsByTagName("input")
    For x = 0 To A.Length - 1
        If A(x).Type = "button" And A(x).Value = " 查詢 " Then
            A(x).Click
        End If
    Next

[ 程式解說 ] :
※ 網路爬蟲 — 有很多種搜尋資料的方法。以下是以指定 標籤(Tag) 的方式,篩選出 查詢按鈕 的位置,再做 按下(Click) 動作。

A. Set A = IE.document.getElementsByTagName(“input”) : 首先取得網頁文件中所有 input 標籤資料,並整合、設定(Set) 成 A 物件。
B. For x = 0 To A.Length – 1 : 利用迴圈篩選所有 input 標籤資料。( PS. A.Length : 物件長度 = 28,表示 : 網頁中有 28個 input 標籤資料。)
C. If A(x).Type = “button” And A(x).Value = ” 查詢 ” Then : 根據 HTML網頁資料 : ,利用 IF指令找出 A(x)物件中,符合 Type = “button” And A(x).Value = ” 查詢 “ 的查詢按鈕。
D. A(x).Click : 找到查詢按鈕,系統自動執行 按下(Click) 動作,網頁便會列出 2330(台積電) 的資產負債表。

資產負債表 / 資料寫入 EXCEL

※ 網頁列出 資產負債表 後,需要了解的是該擷取那些資料,以及資料所在位置。
◎ 寫入區域,劃分如下 :

表頭資料 — 寫入

[ 表頭資料寫入 — 執行步驟 ] :
[ 1 ] : 開啟 Chrome 開發者工具 : 按下 F12 鍵。
[ 2 ] : 執行網頁刷新 : 按下 F5 鍵。
[ 3 ] : 點擊 檢查工具
[ 4 ] : 點擊 表頭資料 : 點擊完 後,將游標移至左邊網頁,點擊 : 民國111年第4季,其HTML語法 : ,顯示在右邊 Elements 文件夾裡。
[ 5 ] : 求得 VBA 公式 : 從語法中得知 class = “tblHead”,便能套以公式 : IE.document.getElementsByClassName(“tblHead“)(0),擷取出 : 民國111年第4季
[ 6 ] : 依序求得其他資料 : 由下圖右邊(HTML)可以看出,網頁表頭資料,是依照順序 : 0 ~ 9 排列設計。


[ VBA公式 ] : [A1] = IE.document.getElementsByClassName(“tblHead“)(0).innerText
→ Excel儲存格 : A1 欄位,放置 民國111年第4季 的文本內容( innerText )。

    
    [ 程式碼 / 表頭資料寫入 ] :
    [A1] = IE.document.getElementsByClassName("tblHead")(0).innerText  ' 填寫 - 表頭 : 年份/季別
    [A2] = IE.document.getElementsByClassName("tblHead")(1).innerText  ' 填寫 - 表頭 : 單位
    [A3] = IE.document.getElementsByClassName("tblHead")(2).innerText  ' 填寫 - 表頭 : 會計項目
    For xC = 0 To 1  
        Cells(3, 2 + xC * 2) = IE.document.getElementsByClassName("tblHead")(3 + xC).innerText  ' 日期
        Cells(4, 2 + xC * 2) = IE.document.getElementsByClassName("tblHead")(6 + xC * 2).innerText  ' 金額
        Cells(4, 3 + xC * 2) = IE.document.getElementsByClassName("tblHead")(7 + xC * 2).innerText  ' %
    Next

[ 程式解說 ] :
For xC = 0 To 1 : 因為有二組 ( 日期 / 金額 / % ) 資料,故用 FOR 迴圈跑二次,即可。( PS. 資料排列方式,請自行研究,不多贅述。)

[ EXCEL 表格資料展示表頭資料 ] :

財報資料 — 寫入

[ 財報資料寫入 — 執行步驟 ] :
[ 1 ] : 點擊 檢查工具
[ 2 ] : 點擊 — 財報資料 : 點擊完 後,將游標移至左邊網頁,點擊 : 流動資產,其HTML語法 : ;再點擊下一列 : 現金及約當現金,其HTML語法 : ,兩者相比較,會發現 class 屬性值,並不相同,故無法一同處理。
[ 3 ] : 改用階層架構取值 : 參考下圖右邊框線內,HTML語法中層層包覆的結構 : < div > 包覆 < tr > 包覆 < td >。
◎ 藉由階層式的樹狀結構,由上層 < div id = “table01” > 架構,擷取出 < tr > 標籤資料;再一個個從 < tr > 標籤,將 < td > 標籤內容擷取出來。

    
    [ 程式碼 / 資產負債表 -- 資料寫入 ] :
    Set xTBL = IE.document.getElementById("table01")
    Set xTR = xTBL.getElementsByTagName("tr") 
    For xRow = 7 To xTR.Length - 1  ' 執行迴圈 ( tr的標籤數量 ) -- 相當於 列。
        Set xTD = xTR(xRow).getElementsByTagName("td") 
        For xCol = 0 To 4  ' 資產負債表之資料欄位( 行 )。
            Cells(xRow - 2, xCol + 1) = xTD(xCol).innerText ' 列出 - 資產負債表之財報資料。
        Next
    Next

[ 程式解說 ] :
※ 首先要了解網頁的資料結構 — 表格( table ) 包含所有的行( tr ),每行包含若干單元格( td ),同時表格也可附加標題行( th ),用於定義列的標題。

A. Set xTBL = IE.document.getElementById(“table01”) : 由上圖(桔框)知道上層主架構為 : < div id = “table01” >,便可利用 getElementById 指令,鎖定整個架構(“table01”)資料,並將其設定成 xTBL 物件變數。
B. Set xTR = xTBL.getElementsByTagName(“tr”) : 主架構 : < div id > 下一層為 : < tr >,相當於所有列資料(藍框)集合。意思就是 : 從 xTBL 物件中,抓取 getElementsByTagName(“tr”) 所有 < tr > 標籤的資料,將其設定成 xTR 物件變數。
C. For xRow = 7 To xTR.Length – 1 : 資料底層包覆在 < tr > 裡面,總數為 : xTR.Length。( PS. 由 7 (流動資產) 開始,是因為之前的資料 — 不需要。)
D. Set xTD = xTR(xRow).getElementsByTagName(“td”) : 意思就是 : 從第幾(xRow)個 xTR 物件中,抓取 getElementsByTagName(“td”) 所有 < td > 標籤的資料,將其設定成 xTD 物件變數。
E. For xCol = 0 To 4 : 執行迴圈,資產負債表之資料欄位數(行)。
F. Cells(xRow – 2, xCol + 1) = xTD(xCol).innerText : 將包覆在 < tr > 標籤內的 < td > 內容(innerText),一一列出。

[ EXCEL 表格資料展示資產負債表 資料 ] :

結束 操控IE

※ 程式開頭啟動 IE.Navigate URL 之後,便與IE瀏覽器建立連結,一旦程式執行完畢,不再使用,請務必將其關閉,才不會造成系統負擔。

[ 程式語法 – 切斷 IE 連線 ] : IE.Quit

清除所有 SET 設定

※ 程式結尾,請務必將程式中所有 SET 的設定值清空,才不會造成系統負擔。

    
    [ 程式碼 / 清除 SET 設定 ] :
    Set IE = Nothing
    Set xTBL = Nothing
    Set xTR = Nothing
    Set xTD = Nothing

完整程式碼

 
 [ 程式碼 / 爬取資產負債表歷史資料 ]
 Sub 資產負債表_歷史資料()   
 Dim xCol As Integer, xRow As Integer
   
    stockCode = "2330"    

    Set IE = CreateObject("InternetExplorer.Application")  ' 使用IE操控物件
    URL = "https://mops.twse.com.tw/mops/web/t164sb03"  ' 個股各日成交資訊

    IE.Visible = True  ' 顯示IE網頁 / False : 不顯示IE網頁
    IE.Navigate URL ' 連線到證交所網址

    Do Until Not IE.Busy And IE.readyState = 4  ' 等待網頁加載完成
        DoEvents
    Loop

    IE.document.getElementsByClassName("textbox")(1).Value = stockCode   ' 股票代號 : 2330

    Set A = IE.document.getElementsByTagName("input")
    For x = 0 To A.Length - 1
        If A(x).Value = " 查詢 " And A(x).Type = "button" Then
            A(x).Click
        End If
    Next
        
    Application.Wait Now + TimeValue("00:00:01")  ' 暫停01秒 -- 等待網頁完成。

    [A1] = IE.document.getElementsByClassName("tblHead")(0).innerText  ' 填寫 - 表頭 : 年份/季別
    [A2] = IE.document.getElementsByClassName("tblHead")(1).innerText  ' 填寫 - 表頭 : 單位
    [A3] = IE.document.getElementsByClassName("tblHead")(2).innerText  ' 填寫 - 表頭 : 會計項目
    For xC = 0 To 1
        Cells(3, 2 + xC * 2) = IE.document.getElementsByClassName("tblHead")(3 + xC).innerText  ' 日期
        Cells(4, 2 + xC * 2) = IE.document.getElementsByClassName("tblHead")(6 + xC * 2).innerText  ' 金額
        Cells(4, 3 + xC * 2) = IE.document.getElementsByClassName("tblHead")(7 + xC * 2).innerText  ' %
    Next

    Set xTBL = IE.document.getElementById("table01")
    Set xTR = xTBL.getElementsByTagName("tr")
    For xRow = 7 To xTR.Length - 1  ' 執行迴圈 ( tr的標籤數量 ) -- 相當於 列。
        Set xTD = xTR(xRow).getElementsByTagName("td")
        For xCol = 0 To 4  ' 資產負債表之資料欄位 -- 相當於 行。
            Cells(xRow - 2, xCol + 1) = xTD(xCol).innerText ' 列出 - 財報資料。
        Next
    Next

    IE.Quit  ' IE 切斷連線

    Set IE = Nothing  ' 清除設定
    Set xTBL = Nothing
    Set xTR = Nothing
    Set xTD = Nothing

End Sub

結論

利用網路爬蟲 / 操控IE 的方式,抓取 資產負債表 的數據,然後導入 Excel 進行計算和分析,可以幫助您深入研究和分析公司的財務狀況和業績表現,了解其潛在風險和投資價值。

※ 以下是一些關鍵指標和相關的計算公式:
[ A ] : 負債比率負債總額 / 資產總額
[ B ] : 流動比率流動資產 / 流動負債
[ C ] : 速動比率:( 流動資產 – 存貨 ) / 流動負債
[ D ] : 利息保障倍數:( 稅前淨利 + 利息費用 ) / 利息費用
[ E ] : 總資產週轉率營業收入 / 資產總額
[ F ] : 存貨周轉率營業成本 / 平均存貨餘額
[ G ] : 現金流量比率營業現金 / 流動負債

◎ 透過這些指標和計算公式,可以清楚了解公司的 財務狀況和經營績效,並進一步研究和分析其商業模式、市場競爭力和投資風險。

非常感謝您看到最後,若在閱讀的過程中,有任何疑問,歡迎您利用左下角 Messenger 直接提問或寫信給我,我會盡快回覆您,最後感謝您的閱讀,感恩 !

( PS. 如果喜歡 股小白 的文章,歡迎到 股小白臉書粉絲頁 點讚,衝人氣,目前不定期分析大盤趨勢,將來會有 每日公報 : 分析並公布跑分的個股資料,讓大家作為投資參考。 )

關 聯 文 章

[ 0 ] : 網路爬蟲 – 操控IE,秒抓上市櫃公司財務報表
※ 財務報表 是評估一家公司財務健康狀況的重要工具。投資者可以透過學習財務概念,來理解報表中的數字,並利用網路爬蟲/操控IE的方式,擷取公開資訊觀測站的財務報表數據,將其導入EXCEL,計算出關鍵指標,進而研究和分析,再根據自身的風險承受能力和投資目標來做出買賣決策。

[ 1 ] : 操控IE – 秒抓資產負債表
※ 利用 操控IE 的方式,抓取 資產負債表 數據,再導入 Excel 進行公式計算,求得重要的指標資訊,便能清楚了解公司的 財務狀況和經營績效,並進一步研究和分析其商業模式、市場競爭力和投資風險。

[ 2 ] : 操控IE – 秒抓損益表
※ 利用 操控IE 的方式,抓取 損益表 數據,再導入 Excel 進行資料抓取,求得重要的指標資訊,便能清楚了解公司經濟表現的總體情況,可以幫助投資者和管理層更好地了解公司的財務狀況,制定相應的經營策略。

[ 3 ] : 操控IE – 秒抓現金流量表
※ 利用 操控IE 的方式,抓取 現金流量表 數據,再導入 Excel 進行計算和分析,從而瞭解該公司在 經營 / 投資 / 融資 的各種現金流量狀況,進而評估企業的財務狀況、經營現況和抵禦風險的能力。

[] : VBA 網路爬蟲 真簡單 – 爬取台指期歷史交易資料
※ VBA 網路爬蟲 是一個利用 VBA語言和 Excel功能,實現網路數據爬取的解決方案。文中以爬取台指期歷史交易資料做實例,一一講述如何透過IE操控的技巧,上網抓取台指期交易記錄,並將其資料寫入EXCEL,加以整合處理,進而歸檔分析。

V B A 資 源

EXCEL & VBA功能 – 綜合筆記
※ EXCEL & VBA功能 筆記 : 將針對文章中所使用的 EXCEL 及 VBA公式 / 工具操作 / 巨集設定 / 控制項的運用,做個整合記錄,方便大家在學習當下的參考與使用。

VBA指令 – 彙整筆記
※ VBA 提供相當多的指令用法,VBA指令 彙整筆記,將會陸續記錄 VBA文章 中,所用過的 VBA指令,方便學員們對照運用。

VBA程式語法 – 彙整筆記
※ 語法就是程式的文法。 使用者要與電腦溝通,就必須遵守這些規則。VBA程式語法 筆記 : 將針對 VBA文章 中所使用的 VBA程式語法,做個整合記錄,方便大家在學習當下參考與使用。