📌 連載:6月高配当株シリーズ Week 2/4 | 対象銘柄:株式会社鈴木(東証プライム:6785)
高配当株の記事でよく見る「配当利回り4%」という数字は、税引前・手数料前の数字です。
実際の手取りは:
このシミュレーションでは、これらを全部正確に計算します。 株価データは quantmod パッケージで自動取得し、再現性を担保します。
# 必要なパッケージ(初回は 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) # 表スタイリング💡 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 円
## 売却日 (2026-05-22) 終値 : 3,175 円
## 株価変化率 : +86.3%
# ── 投資条件 ──────────────────────────────────────────────
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 # 譲渡益課税📅 配当スケジュール(確定値)
# 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株単位)
## 株式購入代金 : 852,000 円
## 購入手数料 : 535 円
## 合計支出 : 852,535 円
## 余剰現金 : 147,465 円(運用外)
# 期末配当
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| |
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 % |
# タイムライン可視化
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")
)# 期間中の株価データをデータフレームに変換
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()
)100万円投じても、100株単位の制約から実際に買えるのは 500株(852,535円)。 残り 147,465円は余剰現金として手元に残ります。
この余剰現金を含めた元本全体(100万円)に対するリターンが +62.15% です。
kabu.com(現・三菱UFJ eスマート証券)は2026年5月18日から国内株式の取引手数料を無料化しました。 今回の売却(2026年5月22日)はこの無料化後なので手数料ゼロです。
旧体系では売却代金 1,587,500円に対し約1,490円かかっていました。
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ポイント。 高配当株を評価するときは、必ず税引後の数字で考える習慣が大切です。
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年間では株価上昇が圧倒的な主役でした。 これが増配株の面白さです。
## 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 | 高配当株ラボ