Strasmore Research
Học tập Matt ConnorBởi Matt Connor · data as of August 21, 2026 · refreshed weekly

Cách tính dividend yield trong Google Sheets

GOOGLEFINANCE không có thuộc tính dividend yield. Tìm hiểu hai công thức: tính trailing yield từ cổ tức đã trả và forward yield từ tỷ lệ đã công bố.

Để tính dividend yield trong Google Sheets, bạn phải tự xây dựng chỉ số này. GOOGLEFINANCE trả về giá, EPS, P/E, vốn hóa thị trường và nhiều trường dữ liệu báo giá khác, nhưng không có dividend yield: =GOOGLEFINANCE("AAPL","yield") trả về #N/A, và các cách viết khác của thuật ngữ này cũng không cho kết quả. Có hai cách xử lý phù hợp. Bạn có thể tính trailing yield từ cột cổ tức tự duy trì trong bảng tính, hoặc nhập tỷ lệ forward đã công bố vào một ô rồi thực hiện phép chia.

Vì sao GOOGLEFINANCE không có thuộc tính dividend yield

Các thuộc tính của hàm này thuộc hai nhóm. Nhóm thứ nhất là các trường báo giá trực tiếp, được lấy bằng hai đối số: price, volume, pe, eps, marketcap, high52, changepct và khoảng một chục trường khác. Nhóm thứ hai là các trường giá lịch sử, được lấy kèm một ngày hoặc một khoảng ngày: open, high, low, close, volume. Dữ liệu cổ tức không thuộc nhóm nào trong hai nhóm này. Không có thuộc tính nào trả về lịch sử thanh toán hoặc phân phối. Vì vậy, tử số của dividend yield phải được lấy từ bên ngoài hàm.

Dividend yield là cổ tức hằng năm trên mỗi cổ phiếu chia cho giá mỗi cổ phiếu, biểu thị dưới dạng phần trăm. Phần giá chỉ cần một ô. Phần cổ tức mới là phần cần xử lý. Nếu khái niệm này còn mới với bạn, bài viết dividend yield thực sự đo lường điều gì giải thích trước về ý nghĩa của chỉ số, không đi ngay vào các thao tác trên bảng tính. Bài viết cách tính dividend yield trình bày các bước tính.

Dưới đây là dữ liệu gốc: mọi khoản thanh toán của một doanh nghiệp trả cổ tức trong khoảng ba năm gần đây. Mỗi dòng gồm ngày giao dịch không hưởng quyền (ex-dividend date), tức ngày mà từ đó người mua cổ phiếu không được nhận khoản thanh toán sắp tới, cùng với số tiền mặt trả trên mỗi cổ phiếu.

Truy vấnCổ tức trên mỗi cổ phiếu của Coca-Cola, theo ngày giao dịch không hưởng quyền
Câu lệnh SQL chính xác đằng sau mỗi con số
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_date
Run this yourself

Coca-Cola đã trả $0.46 trên mỗi cổ phiếu vào Sep 14, 2023$0.53 vào Jun 15, 2026, với 12 khoản thanh toán trong giai đoạn này. Đường thứ hai trên biểu đồ là mỗi khoản thanh toán nhân với four: mức cổ tức hằng năm hàm ý nếu khoản thanh toán của quý đó được lặp lại trong cả năm. Mức này tăng một lần mỗi năm và giữ nguyên trong khoảng thời gian giữa hai lần tăng. Chính điểm tăng theo từng bậc này khiến phần lớn phép tính dividend yield trên bảng tính bị sai. Toàn bộ lịch sử nằm trong lịch sử cổ tức của Coca-Cola.

Hai cách tính dividend yield trong Google Sheets

Cách một là yield theo dữ liệu quá khứ, được xây dựng từ cột dữ liệu của bạn. Nhập ngày giao dịch không hưởng quyền vào cột A và tiền mặt trên mỗi cổ phiếu vào cột B, mỗi dòng tương ứng với một lần chi trả, sau đó:

  • Tổng trong 12 tháng gần nhất: =SUMIFS($B$2:$B,$A$2:$A,">="&EDATE(TODAY(),-12),$A$2:$A,"<="&TODAY())
  • Giá hiện tại: =GOOGLEFINANCE("KO","price")
  • Yield trong 12 tháng gần nhất, với ô được định dạng theo tỷ lệ phần trăm: =SUMIFS($B$2:$B,$A$2:$A,">="&EDATE(TODAY(),-12),$A$2:$A,"<="&TODAY())/GOOGLEFINANCE("KO","price")
  • Số lần chi trả trong cùng kỳ, dùng để kiểm tra: =COUNTIFS($A$2:$A,">="&EDATE(TODAY(),-12),$A$2:$A,"<="&TODAY())

EDATE(TODAY(),-12) là cùng ngày theo lịch của 12 tháng trước, nên khoảng thời gian sẽ tự động dịch chuyển. Hãy định dạng ô yield theo tỷ lệ phần trăm thay vì nhân với 100 trong công thức. Một bảng tính làm cả hai việc này có thể hiển thị 290% trong khi kết quả đúng là 2,9%.

Cách hai là yield dự phóng dựa trên mức chi trả đã công bố. Nhập mức chi trả gần nhất trên mỗi cổ phiếu vào D2 và số lần chi trả mỗi năm vào E2:

  • Yield dự phóng: =D2*E2/GOOGLEFINANCE("KO","price")

Không có cách nào tự động hóa D2. Hội đồng quản trị công bố mức chi trả, bạn đọc thông tin đó từ thông báo công bố rồi nhập vào. Đây là cách tính yield dự phóng trung thực. Việc lựa chọn giữa hai tử số là nội dung cốt lõi của yield cổ tức theo dữ liệu quá khứ và yield cổ tức dự phóng.

Hai lưu ý ngắn về hàm này. Dữ liệu báo giá có thể chậm tối đa 20 phút. Độ trễ của từng ô có thể được xem bằng =GOOGLEFINANCE("KO","datadelay"). Ngoài ra, lệnh truy xuất dữ liệu lịch sử trả về một mảng two by two thay vì một con số, vì vậy hãy bọc lệnh đó: =INDEX(GOOGLEFINANCE("KO","close",DATE(2026,6,30)),2,2) chỉ trả về giá đóng cửa.

Annual hóa và sai lầm mà phép tính này che giấu

Công thức sai phổ biến nhất trong bảng tính cổ tức là lấy khoản chi trả gần nhất nhân với bốn. Công thức này chỉ đúng cho đến khi công ty tăng cổ tức. Sau đợt tăng, ba trong bốn khoản chi trả của 12 tháng trước vẫn được thực hiện theo mức cũ. Vì vậy, lấy mức mới nhân với bốn sẽ phóng đại số tiền cổ đông thực tế đã nhận.

Bảng dưới đây đo lường chênh lệch đó đối với tám doanh nghiệp trả cổ tức lớn. Bảng đặt tổng cổ tức mỗi cổ phiếu mà từng doanh nghiệp đã chi trả trong 12 tháng gần nhất cạnh bốn lần khoản chi trả gần nhất.

Truy vấnCổ tức thực tế đã trả trong 12 tháng qua so với 4 lần khoản trả mới nhất
Câu lệnh SQL chính xác đằng sau mỗi con số
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
Run this yourself

Xếp theo mức chênh lệch, JNJ đứng đầu. Doanh nghiệp này đã thực hiện 4 khoản chi trả, tổng cộng $5.24 mỗi cổ phiếu trong giai đoạn trên. Trong khi đó, bốn lần khoản chi trả gần nhất là $5.36, cao hơn 2.29%. Với một cổ phiếu có yield gần 3%, sai số ở mức này có thể làm thay đổi con số hiển thị thêm một phần mười điểm phần trăm hoặc hơn. Mức thay đổi đó đủ để đảo thứ tự trong danh sách xếp hạng.

Cột số lần chi trả là đối số thứ hai để dùng SUMIFS thay vì phép nhân. Khoảng thời gian 12 tháng cuốn chiếu không phải lúc nào cũng bao gồm đúng bốn khoản chi trả hàng quý. Ngày giao dịch không hưởng quyền có thể lệch vài ngày mỗi năm, nên một khoảng thời gian có thể bao gồm ba hoặc năm khoản chi trả. COUNTIFS cho bạn biết khoản nào đã xảy ra trước khi bạn tin vào tổng số đó.

Cổ tức đặc biệt không phải là run rate

Lỗi kinh điển khác là coi một khoản chi trả một lần như một phần của lịch chi trả. Doanh nghiệp phân phối một khoản tiền mặt thặng dư lớn trong một lần, hàm SUMIFS cộng khoản này vào tổng lũy kế, khiến ô yield tăng vọt. Mười hai tháng sau, chỉ số này âm thầm giảm về mức cũ.

Các khoản chi trả này không hiếm. Bảng thống kê ghi nhận mọi khoản chi trả trên toàn thị trường Mỹ được lịch cổ tức đánh dấu là trả một lần, thay vì thuộc một lịch chi trả lặp lại, theo từng tháng.

Truy vấnCác khoản trả được đánh dấu là một lần thay vì theo lịch, theo tháng
Câu lệnh SQL chính xác đằng sau mỗi con số
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
Run this yourself

Trong Jul 2026, tháng gần nhất đã hoàn tất, có 111 khoản chi trả được đánh dấu là trả một lần, chiếm 2.91% tổng số khoản đã giao dịch không hưởng quyền trong tháng đó. Tổng lũy kế 12 tháng sớm muộn cũng sẽ bao gồm một trong các khoản này.

Cách khắc phục là thêm một cột đánh dấu. Điền regular hoặc special vào cột C bên cạnh từng khoản chi trả, sau đó thêm cột này làm tiêu chí:

  • =SUMIFS($B$2:$B,$A$2:$A,">="&EDATE(TODAY(),-12),$A$2:$A,"<="&TODAY(),$C$2:$C,"regular")

Hãy giữ các dòng cổ tức đặc biệt trong bảng tính. Đây là tiền mặt thực tế và chúng thuộc về hồ sơ các khoản đã nhận. Nhưng chúng không thuộc về một chỉ số dùng để mô tả mức chi trả đang duy trì.

Kết quả ô tính hiển thị

Trailing yield được tính theo cách này có hai thành phần, và chúng thay đổi theo các nhịp khác nhau. Tổng cổ tức thay đổi vài lần mỗi năm, khi một khoản chi trả mới đi vào hoặc ra khỏi khoảng thời gian tính, hoặc khi doanh nghiệp tăng cổ tức. Giá thay đổi trong mỗi phiên. Bảng dưới đây thực hiện phép tính hoàn chỉnh theo từng tháng trong hai năm qua cho cùng một mã trả cổ tức.

Truy vấnCổ tức 12 tháng qua và trailing yield của Coca-Cola, theo từng tháng
Câu lệnh SQL chính xác đằng sau mỗi con số
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
Run this yourself

Dòng cổ tức tăng theo từng nấc rồi đi ngang. Dòng yield thay đổi mỗi tháng trong cùng giai đoạn. Vào Aug 2024, tổng trailing là $1.89 trên mỗi cổ phiếu, tương ứng với yield 2.61%; đến Jul 2026, tổng này là $2.08 và yield ở mức 2.37%. Một ô yield thay đổi trong khi không ai chỉnh sửa cột cổ tức là đúng với cách trailing yield vận hành: mẫu số đã thay đổi.

Sau khi tính xong cho một ticker, hãy sao chép khối công thức xuống cho toàn bộ danh mục và tính trọng số kết quả theo market value thay vì lấy bình quân các mức yield. Bước này là lợi suất cổ tức có trọng số theo danh mục.

Câu hỏi thường gặp

GOOGLEFINANCE có thuộc tính dividend yield không?

Không. Hàm này cung cấp các trường báo giá trực tiếp và giá lịch sử, nhưng không có trường nào là cổ tức hoặc yield. =GOOGLEFINANCE("KO","yield") trả về #N/A. Trong bảng tính, yield được tính từ giá trị cổ tức bạn nhập và mức giá do hàm trả về.

Làm thế nào để tính trailing dividend yield trong Google Sheets?

Đặt ngày giao dịch không hưởng quyền (ex-dividend date) vào một cột và tiền mặt trên mỗi cổ phiếu vào cột kế bên. Dùng =SUMIFS($B$2:$B,$A$2:$A,">="&EDATE(TODAY(),-12),$A$2:$A,"<="&TODAY()) để cộng các khoản trong mười hai tháng gần nhất, chia tổng đó cho =GOOGLEFINANCE("KO","price"), rồi định dạng ô kết quả dưới dạng phần trăm.

Vì sao dividend yield của tôi khác với con số trên trang của broker?

Thông thường, nguyên nhân nằm ở tử số. Trang hiển thị forward yield sẽ quy đổi theo năm mức chi trả hiện tại đã được công bố. Trong khi đó, SUMIFS cho mười hai tháng trả về trailing yield, vẫn bao gồm các khoản chi trả theo mức cũ. Nếu trong khoảng thời gian này có cổ tức đặc biệt, chênh lệch sẽ lớn hơn.

Làm thế nào để loại cổ tức đặc biệt khỏi yield?

Thêm một cột đánh dấu mỗi khoản chi trả là thường kỳ hay đặc biệt. Sau đó, đưa cột này vào SUMIFS dưới dạng một cặp tiêu chí bổ sung. Khoản chi trả đặc biệt vẫn được giữ trong bảng tính nhưng không được tính vào yield.

Google Sheets có thể tự động lấy lịch sử cổ tức không?

Không thông qua GOOGLEFINANCE. Cột cổ tức phải được cập nhật thủ công hoặc dán từ một nguồn công bố lịch sử chi trả. Đây là bước thủ công duy nhất trong cả hai phương pháp trên trang này.


Mỗi panel ở đây đều đi kèm SQL đã tạo ra panel đó. Bạn có thể mở một panel để xem chính xác cách tổng được tính. Bạn cũng có thể đặt các câu hỏi tương tự bằng tiếng Anh thông thường trên terminal Strasmore.

#dividend yield#google sheets#spreadsheets#dividends#tools