📌 連載:6月高配当株シリーズ Week 2/4 | 対象銘柄:株式会社鈴木(東証プライム:6785)

1. はじめに:なぜ「本当の手取り」にこだわるか

高配当株の記事でよく見る「配当利回り4%」という数字は、税引前・手数料前の数字です。

実際の手取りは:

  • 配当金に20.315%の源泉税がかかる
  • 売却益(譲渡益)にも20.315%がかかる
  • 証券会社の手数料が引かれる
  • 100株単位の制約で元本全部は使えない

このシミュレーションでは、これらを全部正確に計算します。 株価データは quantmod パッケージで自動取得し、再現性を担保します。


2. パッケージと株価データの取得

2.1 必要パッケージの読み込み

# 必要なパッケージ(初回は install.packages() でインストール)
# install.packages(c("quantmod", "dplyr", "ggplot2", "scales", "knitr", "kableExtra"))

library(quantmod)   # 株価データ取得(Yahoo Finance経由)
library(dplyr)      # データ操作
library(ggplot2)    # グラフ描画
library(scales)     # 数値フォーマット
library(knitr)      # 表作成
library(kableExtra) # 表スタイリング

2.2 株価データの自動取得

💡 getSymbols() は Yahoo Finance から株価を取得します。 ティッカーシンボルは 「証券コード.T」(東証)の形式です。

# 対象期間(前後1営業日を含めて取得)
date_from <- "2025-05-20"
date_to   <- "2026-05-25"

# Yahoo Finance から株価取得(東証:.T)
getSymbols("6785.T",
           src  = "yahoo",
           from = date_from,
           to   = date_to,
           auto.assign = TRUE)
## [1] "6785.T"
# 終値系列を抽出
prices_xts <- Cl(`6785.T`)

# 日付指定で終値を取得するヘルパー関数
get_close <- function(xts_obj, target_date) {
  target <- as.Date(target_date)
  # 指定日がなければ翌営業日を探す(祝日・休場対応)
  for (i in 0:5) {
    d <- target + i
    key <- format(d, "%Y-%m-%d")
    if (key %in% index(xts_obj)) {
      val <- as.numeric(xts_obj[key])
      if (!is.na(val)) {
        if (i > 0) message("注: ", target_date, " は休場 → ", key, " の終値を使用")
        return(list(price = val, date_used = as.Date(key)))
      }
    }
  }
  stop("株価を取得できませんでした: ", target_date)
}

# 購入日・売却日の終値を取得
buy_result  <- get_close(prices_xts, "2025-05-23")
sell_result <- get_close(prices_xts, "2026-05-22")

price_buy  <- buy_result$price
price_sell <- sell_result$price
date_buy   <- buy_result$date_used
date_sell  <- sell_result$date_used

cat(sprintf("購入日 (%s) 終値 : %s 円\n", date_buy,  format(price_buy,  big.mark=",")))
## 購入日 (2025-05-23) 終値 : 1,704 円
cat(sprintf("売却日 (%s) 終値 : %s 円\n", date_sell, format(price_sell, big.mark=",")))
## 売却日 (2026-05-22) 終値 : 3,175 円
cat(sprintf("株価変化率 : +%.1f%%\n", (price_sell/price_buy - 1)*100))
## 株価変化率 : +86.3%

3. シミュレーション本体

3.1 パラメータ設定

# ── 投資条件 ──────────────────────────────────────────────
investment   <- 1000000   # 投資元本(円)

# ── 手数料(kabu.com / 三菱UFJ eスマート証券) ──────────────
# 購入時:ワンショット手数料(旧体系)
#   ~5万円 : 55円 / ~10万円 : 99円 / ~20万円 : 115円
#   ~50万円 : 275円 / ~100万円 : 535円
#   100万円超 : 約定代金×0.099%+99円(上限4,059円)
# 売却時:2026年5月18日より国内株式取引手数料無料化
fee_buy  <- 535   # 円(税込):50万超〜100万以下
fee_sell <- 0     # 円:2026/5/18以降 無料

# ── 配当金(確定値) ────────────────────────────────────────
# 2025年6月期 期末配当
#   権利確定日:2025年6月30日
#   支払開始日:2025年9月29日(実績)
div_final_per_share   <- 45   # 円/株(注:2026/4修正後 期末60円だが
                               # 2025/6期は45円が期末配当)

# 2026年6月期 中間配当
#   権利確定日:2025年12月31日
#   支払開始日:2026年3月3日(実績)
div_interim_per_share <- 45   # 円/株

# ── 税率 ────────────────────────────────────────────────
tax_div <- 0.20315   # 配当課税(所得税15.315% + 住民税5%)
tax_cap <- 0.20315   # 譲渡益課税

📅 配当スケジュール(確定値)

  • 2025年6月期 期末配当(45円/株)→ 2025年9月29日 支払
  • 2026年6月期 中間配当(45円/株)→ 2026年3月3日 支払
  • 2026年6月期 期末配当(60円/株)→ 2026年9月頃支払予定(今回の売却後)

3.2 購入株数と実コストの計算

# 100株単位の制約を正確に反映
shares <- floor((investment - fee_buy) / price_buy / 100) * 100
cost   <- shares * price_buy + fee_buy
cash   <- investment - cost   # 余剰現金(運用せず手元に残る)

cat(sprintf("購入可能株数 : %s 株(100株単位)\n",   format(shares, big.mark=",")))
## 購入可能株数 : 500 株(100株単位)
cat(sprintf("株式購入代金 : %s 円\n",                format(shares * price_buy, big.mark=",")))
## 株式購入代金 : 852,000 円
cat(sprintf("購入手数料   : %s 円\n",                format(fee_buy, big.mark=",")))
## 購入手数料   : 535 円
cat(sprintf("合計支出     : %s 円\n",                format(cost, big.mark=",")))
## 合計支出     : 852,535 円
cat(sprintf("余剰現金     : %s 円(運用外)\n",      format(cash, big.mark=",")))
## 余剰現金     : 147,465 円(運用外)

3.3 配当金の計算(税引後)

# 期末配当
div_final_gross <- shares * div_final_per_share
div_final_tax   <- floor(div_final_gross * tax_div)   # 源泉税は切り捨て
div_final_net   <- div_final_gross - div_final_tax

# 中間配当
div_interim_gross <- shares * div_interim_per_share
div_interim_tax   <- floor(div_interim_gross * tax_div)
div_interim_net   <- div_interim_gross - div_interim_tax

div_total_gross <- div_final_gross + div_interim_gross
div_total_net   <- div_final_net   + div_interim_net

# 表示
div_df <- data.frame(
  区分             = c("2025年6月期 期末配当", "2026年6月期 中間配当", "合計"),
  支払日           = c("2025年9月29日", "2026年3月3日", "—"),
  `税引前(円)`   = c(div_final_gross, div_interim_gross, div_total_gross),
  `源泉税(円)`   = c(div_final_tax, div_interim_tax, div_final_tax + div_interim_tax),
  `税引後(円)`   = c(div_final_net, div_interim_net, div_total_net),
  check.names = FALSE
)
kable(div_df, format.args = list(big.mark = ","), align = "lrrrr") |>
  kable_styling(full_width = FALSE, position = "left") |>
  row_spec(3, bold = TRUE, background = "#f0faf4", color = "#1a6e3c")
区分 | 支払日| 税引前 円)| 源泉税(円)| 税 後(円)|
2025年6月期 期末配当 | 2025年 月29日| 22 500| 4 570| 17 930|
2026年6月期 中間配当 | 2026 3月3日| 22 500| 4 570| 17 930|
合計 | —| 45,000| 9,140| 35,860|

3.4 売却損益の計算(税引後)

sell_gross         <- shares * price_sell
capital_gain_gross <- sell_gross - cost          # 売却益(税前)
capital_gain_tax   <- floor(capital_gain_gross * tax_cap)
capital_gain_net   <- capital_gain_gross - capital_gain_tax

3.5 最終損益サマリー

total_net     <- capital_gain_net + div_total_net
net_pct       <- total_net / investment * 100
gross_pct     <- (capital_gain_gross + div_total_gross) / investment * 100

# サマリーテーブル
sum_df <- data.frame(
  項目    = c(
    "購入コスト(株式+手数料)",
    "売却収入(手数料ゼロ)",
    "配当合計 — 税引前",
    " うち源泉税",
    " うち税引後手取り",
    "譲渡益 — 税引前",
    " うち譲渡益税",
    " うち税引後手取り",
    "税引後トータル利益",
    "税引後リターン(元本比)"
  ),
  金額 = c(
    paste0("▲ ", format(cost, big.mark=",")),
    format(sell_gross, big.mark=","),
    format(div_total_gross, big.mark=","),
    paste0("▲ ", format(div_final_tax + div_interim_tax, big.mark=",")),
    format(div_total_net, big.mark=","),
    format(capital_gain_gross, big.mark=","),
    paste0("▲ ", format(capital_gain_tax, big.mark=",")),
    format(capital_gain_net, big.mark=","),
    format(round(total_net), big.mark=","),
    sprintf("+%.2f%%", net_pct)
  )
)
kable(sum_df, col.names = c("項目", "金額(円)"), align = "lr") |>
  kable_styling(full_width = FALSE, position = "left") |>
  row_spec(9:10, bold = TRUE, background = "#f0faf4", color = "#1a6e3c")
項目 | 額(円)|
購入コスト(株式+手数料) | ▲ 852,535|
売却収入(手数料ゼロ) | 1,587,50

📊 最終結果(税引後)

トータル利益 621,517 円
リターン(元本比) +62.15 %
税引前リターン(参考) +78.00 %

4. インカムタイムライン

# タイムライン可視化
events <- data.frame(
  date   = as.Date(c("2025-05-23","2025-09-29","2026-03-03","2026-05-22")),
  label  = c("購入\n▲871,535円",
             "期末配当(税後)\n+15,937円",
             "中間配当(税後)\n+17,929円",
             paste0("売却(税後)\n+", format(round(capital_gain_net), big.mark=","), "円")),
  amount = c(-cost, div_final_net, div_interim_net, capital_gain_net),
  y      = c(-1, 1, 1, 1)
)

ggplot(events, aes(x = date, y = 0)) +
  geom_hline(yintercept = 0, linewidth = 0.7, color = "#cccccc") +
  geom_point(aes(color = amount > 0), size = 5) +
  geom_text(aes(label = label, vjust = ifelse(amount > 0, -0.6, 1.8)),
            size = 3.2, lineheight = 1.3) +
  scale_color_manual(values = c("TRUE" = "#1a6e3c", "FALSE" = "#c0381a"),
                     guide = "none") +
  scale_x_date(date_labels = "%Y/%m", date_breaks = "3 months") +
  labs(title = "インカムタイムライン:鈴木(6785)2025年5月〜2026年5月",
       x = NULL, y = NULL) +
  theme_minimal() +
  theme(
    plot.title   = element_text(size = 13, face = "bold", color = "#1a1a2e"),
    axis.text.y  = element_blank(),
    panel.grid   = element_blank(),
    axis.text.x  = element_text(size = 9, color = "#6e7180")
  )


5. 株価推移チャート(保有期間)

# 期間中の株価データをデータフレームに変換
price_df <- data.frame(
  date  = as.Date(index(prices_xts)),
  close = as.numeric(prices_xts)
) |> filter(!is.na(close))

# 配当支払日
div_dates <- as.Date(c("2025-09-29", "2026-03-03"))

# geom_ribbon の fill を aes 外でベクトル指定するとエラーになるため
# 2層に分けて描画(購入価格以上=緑、以下=赤)
price_df <- price_df |>
  mutate(fill_color = ifelse(close >= price_buy, "#dcf0e5", "#fde8e4"))

# 購入価格より上=緑リボン、下=赤リボンの2層で描画
ggplot(price_df, aes(x = date, y = close)) +
  geom_ribbon(aes(ymin = price_buy, ymax = pmax(close, price_buy)),
              fill = "#dcf0e5", alpha = 0.6) +
  geom_ribbon(aes(ymin = pmin(close, price_buy), ymax = price_buy),
              fill = "#fde8e4", alpha = 0.6) +
  geom_line(color = "#1a1a2e", linewidth = 0.8) +
  geom_hline(yintercept = price_buy,  linetype = "dashed",
             color = "#c0381a", linewidth = 0.6) +
  geom_hline(yintercept = price_sell, linetype = "dashed",
             color = "#1a6e3c", linewidth = 0.6) +
  geom_vline(xintercept = as.numeric(div_dates),
             linetype = "dotted", color = "#b8922a", linewidth = 0.6) +
  annotate("text", x = as.Date("2025-05-23"), y = price_buy * 1.015,
           label = paste0("Purchase ", format(price_buy, big.mark=","), "yen"),
           hjust = 0, size = 3.2, color = "#c0381a") +
  annotate("text", x = as.Date("2026-05-22"), y = price_sell * 1.015,
           label = paste0("Sell ", format(price_sell, big.mark=","), "yen"),
           hjust = 1, size = 3.2, color = "#1a6e3c") +
  annotate("text", x = div_dates, y = min(price_df$close, na.rm=TRUE) * 0.985,
           label = c("Final div\n9/29", "Interim div\n3/3"),
           size = 2.8, color = "#b8922a", vjust = 1) +
  scale_y_continuous(labels = comma_format(suffix = "")) +
  scale_x_date(date_labels = "%Y/%m", date_breaks = "2 months") +
  labs(title = "Suzuki (6785) closing price — holding period May 2025 to May 2026",
       x = NULL, y = "Close (JPY)",
       caption = "Source: Yahoo Finance  |  dotted lines: dividend payment dates") +
  theme_minimal() +
  theme(
    plot.title       = element_text(size = 12, face = "bold", color = "#1a1a2e"),
    plot.caption     = element_text(size = 8,  color = "#aaaaaa"),
    axis.text        = element_text(size = 9,  color = "#6e7180"),
    panel.grid.minor = element_blank()
  )


6. 結果の読み解き方

6.1 「100万円全部は使えない」問題

100万円投じても、100株単位の制約から実際に買えるのは 500株(852,535円)。 残り 147,465円は余剰現金として手元に残ります。

この余剰現金を含めた元本全体(100万円)に対するリターンが +62.15% です。

6.2 売却手数料ゼロの恩恵

kabu.com(現・三菱UFJ eスマート証券)は2026年5月18日から国内株式の取引手数料を無料化しました。 今回の売却(2026年5月22日)はこの無料化後なので手数料ゼロです。

旧体系では売却代金 1,587,500円に対し約1,490円かかっていました。

6.3 税引前と税引後の差

tax_df <- data.frame(
  区分        = c("税引前リターン", "税引後リターン", "差(税負担)"),
  リターン    = c(sprintf("+%.2f%%", gross_pct),
                  sprintf("+%.2f%%", net_pct),
                  sprintf("▲%.2f%%", gross_pct - net_pct)),
  利益額      = c(format(round(capital_gain_gross + div_total_gross), big.mark=","),
                  format(round(total_net), big.mark=","),
                  format(round(capital_gain_tax + div_final_tax + div_interim_tax), big.mark=","))
)
kable(tax_df, col.names = c("区分", "リターン", "利益額(円)"),
      align = "lrr") |>
  kable_styling(full_width = FALSE, position = "left") |>
  row_spec(3, background = "#fdf0ec", color = "#c0381a")
区分 | ターン| 利益額( )|
税引前リターン | +78. 0%| 79,965|
税引後リターン | +62. 5%| 21,517|
差(税負担) | ▲15. 4%| 58,448|

⚠️ 税引前と税引後の差は約15.8ポイント。 高配当株を評価するときは、必ず税引後の数字で考える習慣が大切です。

6.4 利益の内訳

breakdown_df <- data.frame(
  区分  = c("キャピタルゲイン(税後)", "配当合計(税後)"),
  金額  = c(capital_gain_net, div_total_net),
  割合  = c(capital_gain_net / total_net * 100,
            div_total_net   / total_net * 100)
)
kable(breakdown_df,
      col.names = c("区分", "金額(円)", "割合(%)"),
      digits = 1,
      format.args = list(big.mark=","),
      align = "lrr") |>
  kable_styling(full_width = FALSE, position = "left") |>
  row_spec(1, background = "#f0faf4", color = "#1a6e3c")
区分 | 額(円)| 割合(%)
キャピタルゲイン(税後) | 585,657 94.2|
配当合計(税後) | 35 860| .8|

総利益の94.2%がキャピタルゲイン、5.8%が配当。 「高配当株」を買ったはずが、1年間では株価上昇が圧倒的な主役でした。 これが増配株の面白さです。


7. 再現性のための環境情報

sessionInfo()
## R version 4.4.3 (2025-02-28 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 11 x64 (build 26200)
## 
## Matrix products: default
## 
## 
## locale:
## [1] LC_COLLATE=Japanese_Japan.utf8  LC_CTYPE=Japanese_Japan.utf8   
## [3] LC_MONETARY=Japanese_Japan.utf8 LC_NUMERIC=C                   
## [5] LC_TIME=Japanese_Japan.utf8    
## 
## time zone: Asia/Tokyo
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] kableExtra_1.4.0 knitr_1.50       scales_1.3.0     ggplot2_3.5.2   
## [5] dplyr_1.1.4      quantmod_0.4.28  TTR_0.24.4       xts_0.14.2      
## [9] zoo_1.8-15      
## 
## loaded via a namespace (and not attached):
##  [1] gtable_0.3.6      jsonlite_2.0.0    compiler_4.4.3    tidyselect_1.2.1 
##  [5] xml2_1.5.2        stringr_1.5.1     jquerylib_0.1.4   textshaping_1.0.5
##  [9] systemfonts_1.3.2 yaml_2.3.10       fastmap_1.2.0     lattice_0.22-6   
## [13] R6_2.6.1          labeling_0.4.3    generics_0.1.3    curl_7.1.0       
## [17] tibble_3.2.1      munsell_0.5.1     svglite_2.2.2     bslib_0.9.0      
## [21] pillar_1.10.2     rlang_1.1.6       stringi_1.8.7     cachem_1.1.0     
## [25] xfun_0.52         sass_0.4.10       viridisLite_0.4.2 cli_3.6.4        
## [29] withr_3.0.2       magrittr_2.0.3    digest_0.6.37     grid_4.4.3       
## [33] rstudioapi_0.17.1 lifecycle_1.0.4   vctrs_0.6.5       evaluate_1.0.3   
## [37] glue_1.8.0        farver_2.1.2      colorspace_2.1-1  rmarkdown_2.29   
## [41] tools_4.4.3       pkgconfig_2.0.3   htmltools_0.5.8.1

【免責事項】 本記事は情報提供を目的としたものであり、特定の銘柄への投資を推奨するものではありません。投資判断はご自身の責任において行ってください。株式投資には元本割れのリスクがあります。将来の運用成果を保証するものではありません。

連載:6月高配当株シリーズ | Week 2/4 | 高配当株ラボ