Google Sheets 計算股息殖利率的兩種公式
GOOGLEFINANCE 沒有 dividend yield 屬性,可用已支付股息計算 trailing yield,或輸入已宣告的 forward rate,取得兩種可行公式。
若要在 Google Sheets 計算 dividend yield,必須自行建立計算方式。GOOGLEFINANCE 會回傳股價、EPS、P/E、市值及一長串其他報價欄位,但不包含 dividend yield:=GOOGLEFINANCE("AAPL","yield") 會回傳 #N/A,其他拼寫方式也無法取得結果。
有兩種可行的替代方法。第一種是使用工作表中自行維護的股息欄位,計算 trailing yield。第二種是將已宣告的 forward rate 輸入儲存格,再進行除法計算。
為何 GOOGLEFINANCE 沒有股息殖利率屬性
這個函式的屬性分為兩大類。第一類是即時報價欄位,使用兩個引數擷取:price、volume、pe、eps、marketcap、high52、changepct,以及約十多個其他欄位。第二類是歷史價格欄位,使用日期或日期範圍擷取:open、high、low、close、volume。股息紀錄不屬於其中任何一類。沒有任何屬性會回傳股息支付或配息歷史,因此殖利率的分子必須從函式外部取得。
股息殖利率是每股年度股息除以每股價格,並以百分比表示。其中價格部分只需一個儲存格。股息部分才是需要處理的內容。如果你不熟悉這個比率,股息殖利率實際衡量的內容會先說明其意義,再進入試算表操作;如何計算股息殖利率則會逐步說明算式。
以下是原始資料:某家家庭用品公司在大約過去三年內支付的每一筆股息。每一列列出除息日,也就是自該日起買進股票的投資人無法取得即將發放的股息,旁邊則是每股支付的現金金額。
每個數據背後的精確 SQL 語法
SELECT
toString(ex_dividend_date) AS ex_date,
formatDateTime(ex_dividend_date, '%b %e, %Y') AS ex_date_label,
round(toFloat64(payment), 4) AS cash_amount,
round(toFloat64(payment) * 4, 4) AS annualized_run_rate
FROM
(
SELECT
ex_dividend_date,
max(cash_amount) AS payment
FROM global_markets.stocks_dividends
WHERE ticker = 'KO'
AND ex_dividend_date >= today() - 1120
AND ex_dividend_date <= today()
GROUP BY ex_dividend_date
)
ORDER BY ex_dividend_dateCoca-Cola 在 Sep 14, 2023 每股支付 $0.46,並在 Jun 15, 2026 支付 $0.53;在這段期間內共支付 12 筆股息。圖表中的第二條線,是將每筆股息乘以四,代表若該季股息全年維持不變,所推算出的年度股息率。這條線每年上調一次,其餘時間維持平坦。多數試算表中的殖利率錯誤,都出在這個階梯式變化。完整紀錄請見Coca-Cola 的股息歷史。
在 Google Sheets 取得股息殖利率的兩種方法
方法一是以自建欄位計算 trailing yield。在 A 欄填入除息日,在 B 欄填入每股現金股息,每筆分配各占一列,接著輸入:
- 過去十二個月總額:
=SUMIFS($B$2:$B,$A$2:$A,">="&EDATE(TODAY(),-12),$A$2:$A,"<="&TODAY()) - 即時價格:
=GOOGLEFINANCE("KO","price") - 過去十二個月殖利率,並將儲存格格式設為百分比:
=SUMIFS($B$2:$B,$A$2:$A,">="&EDATE(TODAY(),-12),$A$2:$A,"<="&TODAY())/GOOGLEFINANCE("KO","price") - 同一期間的分配次數,作為檢核:
=COUNTIFS($A$2:$A,">="&EDATE(TODAY(),-12),$A$2:$A,"<="&TODAY())
EDATE(TODAY(),-12)代表十二個月前的同一個日曆日,因此計算期間會自行向前滾動。應將殖利率儲存格格式設為百分比,不要在公式內乘以 100。若工作表同時採用這兩種做法,原本代表 2.9% 的數值就會顯示為 290%。
方法二是根據已宣告的股息率計算 forward yield。在 D2 填入最近一次宣告的每股股息率,在 E2 填入每年分配次數:
- Forward yield:
=D2*E2/GOOGLEFINANCE("KO","price")
D2 不會自動更新。董事會宣告股息率後,必須從公告中讀取並手動輸入。這才是如實計算 forward yield 的方式,而兩種分子之間的選擇,正是 trailing yield 與 forward dividend yield 的差異 的核心。
另外有兩點較小的注意事項。報價最多延遲 20 分鐘,而特定儲存格的延遲時間可用 =GOOGLEFINANCE("KO","datadelay") 讀取。歷史資料擷取會回傳二乘二陣列,而不是單一數值,因此需要加以包裝:=INDEX(GOOGLEFINANCE("KO","close",DATE(2026,6,30)),2,2) 只會傳回收盤價。
年化步驟及其掩蓋的錯誤
股息試算表中最常見的錯誤公式,是將最近一次分配乘以 four。這個公式在公司提高股息前都能運作。調高股息後,過去一年的 four 次分配中,有 three 次仍按舊股息率發放;將新股息率乘以 four,會高估股東實際收到的金額。
下方面板比較 eight 家大型股息發放公司的差距:各公司過去 twelve 個月每股實際發放的金額,以及最近一次分配乘以 four 的結果。
每個數據背後的精確 SQL 語法
SELECT
ticker,
round(toFloat64(sum(cash_amount)), 4) AS paid_last_12m,
round(toFloat64(argMax(cash_amount, ex_dividend_date)) * 4, 4) AS latest_x4,
round((toFloat64(argMax(cash_amount, ex_dividend_date)) * 4
/ toFloat64(sum(cash_amount)) - 1) * 100, 2) AS gap_pct,
count() AS payment_count
FROM
(
SELECT
ticker,
ex_dividend_date,
max(cash_amount) AS cash_amount
FROM global_markets.stocks_dividends
WHERE ticker IN ('KO', 'JNJ', 'PG', 'AAPL', 'MSFT', 'CVX', 'ABBV', 'IBM')
AND ex_dividend_date > today() - 365
AND ex_dividend_date <= today()
GROUP BY ticker, ex_dividend_date
)
GROUP BY ticker
ORDER BY gap_pct DESC按差距排序後,JNJ 位居首位。該公司在這段期間發放了 4 次分配,合計每股 $5.24;但最近一次分配乘以 four 後為 $5.36,高出 2.29%。對殖利率接近 3% 的股票而言,這種幅度的錯誤會使顯示的殖利率偏高十分之一個百分點以上,足以改變排序結果。
分配次數欄位是採用 SUMIFS 而非乘法的第二項依據。過去 twelve 個月的滾動期間不一定恰好包含 four 次季度分配。除息日每年可能前後相差幾天,因此一個期間可能包含 three 次或 five 次分配。COUNTIFS 會告訴你實際發生的是哪一種情況,確認後再採信合計金額。
特別股利不代表持續性年化水準
另一個常見錯誤,是把一次性付款視為定期配息的一部分。公司以單筆大額分配方式清理多餘現金,SUMIFS 將這筆款項納入追蹤期間合計,殖利率欄位便會跳升。十二個月後,數值又會悄然回落。
這類付款並不少見。該面板逐月統計整個美國市場的所有付款;股利日曆會將這些付款標記為一次性付款,而非重複性配息計畫的一部分。
每個數據背後的精確 SQL 語法
SELECT
toString(month_start) AS month,
formatDateTime(month_start, '%b %Y') AS month_label,
countIf(freq = '0') AS one_time_payments,
round(countIf(freq = '0') / count() * 100, 2) AS one_time_share_pct
FROM
(
SELECT
toStartOfMonth(ex_dividend_date) AS month_start,
ticker,
ex_dividend_date,
ifNull(toString(any(frequency)), 'na') AS freq
FROM global_markets.stocks_dividends
WHERE ex_dividend_date >= toStartOfMonth(today() - 730)
AND ex_dividend_date < toStartOfMonth(today())
GROUP BY month_start, ticker, ex_dividend_date
)
GROUP BY month_start
ORDER BY month在 Jul 2026(最近一個完整月份),有 111 筆付款帶有一次性標記,占當月所有除息付款的 2.91%。採用滾動十二個月合計時,遲早會將其中一筆納入。
解決方法是新增旗標欄位。在每筆付款旁的 C 欄填入 regular 或 special,再將其設為篩選條件:
=SUMIFS($B$2:$B,$A$2:$A,">="&EDATE(TODAY(),-12),$A$2:$A,"<="&TODAY(),$C$2:$C,"regular")
保留工作表中的特殊付款列。這些是真實收到的現金,應列入收款紀錄。但若某個數字是用來描述持續性的配息率,則不應納入這些付款。
完成計算結果
這種方式計算出的追蹤殖利率包含兩個變動部分,而且兩者的變動頻率不同。股息總額一年會變動數次,例如某筆股息進入或移出計算區間,或公司調高股息。股價則每個交易日都會變動。下方面板以相同的配息股票為例,按月呈現過去兩年的完整計算結果。
每個數據背後的精確 SQL 語法
WITH
month_close AS
(
SELECT
toLastDayOfMonth(date) AS month_end,
argMax(close, date) AS close_px
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'KO'
AND date >= toStartOfMonth(today() - 730)
AND date < toStartOfMonth(today())
GROUP BY month_end
),
payouts AS
(
SELECT
ex_dividend_date,
max(cash_amount) AS cash_amount
FROM global_markets.stocks_dividends
WHERE ticker = 'KO'
AND ex_dividend_date >= today() - 1160
AND ex_dividend_date <= today()
GROUP BY ex_dividend_date
)
SELECT
toString(month_end) AS month,
formatDateTime(month_end, '%b %Y') AS month_label,
round(ttm, 4) AS ttm_dividends,
round(ttm / close_px * 100, 2) AS trailing_yield_pct
FROM
(
SELECT
m.month_end AS month_end,
toFloat64(any(m.close_px)) AS close_px,
toFloat64(sumIf(p.cash_amount,
(p.ex_dividend_date > subtractYears(m.month_end, 1))
AND (p.ex_dividend_date <= m.month_end))) AS ttm
FROM month_close AS m
CROSS JOIN payouts AS p
GROUP BY m.month_end
)
ORDER BY month股息資料線會階梯式變動,之後維持平坦。同期的殖利率資料線則每月變動。在 Aug 2024,追蹤股息總額為每股 $1.89,殖利率為 2.61%;到了 Jul 2026,總額為 $2.08,殖利率則為 2.37%。如果股息欄沒有任何變動,但殖利率儲存格仍然改變,這正是追蹤殖利率的正常表現:分母發生了變化。
單一 ticker 的計算區塊完成後,將該區塊向下複製到每一檔持股,並按照市值為結果加權,而不是直接平均各檔殖利率。這一步就是投資組合加權股息殖利率。
常見問答
GOOGLEFINANCE 是否提供股息殖利率屬性?
沒有。這個函數涵蓋即時報價欄位與歷史價格,但其中沒有股息或殖利率欄位。=GOOGLEFINANCE("KO","yield") 會回傳 #N/A。試算表中的殖利率,必須以你提供的股息數字除以函數回傳的價格計算。
如何在 Google 試算表中計算過去十二個月的股息殖利率?
將除息日期放在一欄,並在下一欄填入每股現金股息。使用 =SUMIFS($B$2:$B,$A$2:$A,">="&EDATE(TODAY(),-12),$A$2:$A,"<="&TODAY()) 加總過去十二個月的股息,再將總額除以 =GOOGLEFINANCE("KO","price"),並將結果儲存格設定為百分比格式。
為什麼我的股息殖利率與券商頁面上的數值不同?
最常見的原因是分子不同。標示預估殖利率的頁面,會將目前已宣布的股息率年化;但以過去十二個月為期間的 SUMIFS,算出的是落後殖利率,其中仍可能包含按舊股息率支付的股息。若該期間內有一次性特別股息,差距會進一步擴大。
如何排除特別股息,不讓它計入殖利率?
新增一欄,標記每筆股息是定期股息還是特別股息。接著在 SUMIFS 中,將該欄作為額外的條件範圍與條件配對。特別股息仍會保留在試算表中,但不會計入殖利率。
Google 試算表可以自動擷取股息歷史嗎?
不能透過 GOOGLEFINANCE 完成。股息欄位必須手動維護,或從公布支付紀錄的來源貼上資料。這是本頁兩種方法中唯一需要手動處理的步驟。
本頁的每個面板都附有產生該面板的 SQL,因此你可以開啟其中一個,查看總額的確切計算方式。同樣的問題,也可以在 Strasmore terminal 以一般英文提問。