
破産手続のために法律事務員が行わなければならない仕事のひとつに、配当表の作成がありますが、配当率の計算が面倒ですよね。
そこで、エクセルのマクロを使って配当率を計算する方法を紹介します。

確かに、配当額の総額と配当可能原資とを完全に一致させようと思うと、すごく時間がかかってしまうんです。

マクロを使えば、簡単に計算できるようになりますよ。

そんなこともできるんですか?
ぜひ、教えて下さい。
サンプルのダウンロード
インストール方法
操作マニュアル
仕様
プロジェクト仕様書:Excel VBA 配当率逆算ツール「VA配当率」
1. プロジェクト概要
目標とする「合計金額(配当総額)」に一致するように、指定されたセルの「配当率(小数点以下の数値)」を自動計算(逆算)するVBAツール。
Excelのゴールシーク機能に似ているが、小数点以下の桁数を指定して、下位桁へ向かって探索範囲を絞り込みながら計算することで、高精度かつ高速に解を求める点が特徴。
2. ファイル構成
プロジェクトは以下のモジュールで構成すること。
| モジュール名 | 種類 | 役割 |
| mdlDividendCalc | 標準モジュール | 計算コアロジック、フォーム表示、リボン連携 |
| frmDividendCalc | ユーザーフォーム | 目標値入力、セル選択、実行指示を行うUI |
| ThisWorkbook | ThisWorkbook | 更新履歴の保持およびブックのエントリポイント |
| Sheet1 | ドキュメント | 標準のワークシート(特段のコードなし) |
3. モジュール詳細仕様
(1) mdlDividendCalc(標準モジュール)
プロシージャ: ShowDividendCalcForm / OnRibbonBtnClick
- ユーザーフォーム
frmDividendCalcをモードレス(vbModeless)で表示する。これにより、ユーザーはフォームを開いたままシート操作が可能となる。
関数: CalcDivRate(rngTotal, rngRate, lngTarget, iMax) As Double
- 機能: 目標値になる配当率を探索計算する。
- 引数:
rngTotal: 合計値が表示されるセル(数式が入っている前提)。rngRate: 配当率を入力するセル(可変セル)。lngTarget: 目標とする合計値(Currency型)。iMax: 探索する小数点以下の最大桁数。
- アルゴリズム(高速化の肝):
- 単純な総当たり(0.00…01ずつ増やす)では時間がかかりすぎるため、**「桁ごとの絞り込み探索」**を行う。
- 変数
jLower(下値)とjUpper(上値)を用意し、初期値は 0 と 1 とする。 - 小数点以下
i桁目のループ(1 to iMax):- 前の桁の結果をベースに探索範囲を拡大:
jLower = jLower * 10,jUpper = jUpper * 10。 jをjLowerからjUpperまでループさせる。- 配当率セルに
j / (10 ^ i)を入力。 - 合計セル(
rngTotal)の値を読み取る。 - 判定ロジック:
- 合計 < 目標: まだ足りないため、下値
jLowerを現在のjに更新。 - 合計 > 目標: 超えてしまったため、上値
jUpperを現在のjに更新してループを抜ける(次の桁でこの間を探索するため)。 - 合計 = 目標: 解が見つかったので終了。
- 合計 < 目標: まだ足りないため、下値
- 前の桁の結果をベースに探索範囲を拡大:
- 戻り値: 見つかった配当率。見つからなければ 0。
(2) frmDividendCalc(ユーザーフォーム)
- コントロール構成:
- 合計値セル指定:
txtTotalCell(TextBox),btnSelectTotal(Button)。 - 配当率セル指定:
txtRateCell(TextBox),btnSelectRate(Button)。 - 目標値入力:
txtTarget(TextBox)。 - 最大桁数指定:
txtMaxDigits(TextBox),spnMaxDigits(SpinButton)。 - 実行:
btnCalc(CommandButton)。 - 閉じる:
btnCancel(CommandButton)。
- 合計値セル指定:
- イベント処理:
- セル選択ボタン (
btnSelectTotal_Click,btnSelectRate_Click):Application.InputBox(Type:=8)を使用して、マウスでセルを選択させる。- キャンセル時のエラーハンドリングを行い、選択されたアドレスをテキストボックスに格納する。
- 目標値フォーマット (
txtTarget_AfterUpdate):- 入力確定後、数値を3桁区切り(”#,##0″)に整形する。
- 計算実行 (
btnCalc_Click):- 入力バリデーション(空欄チェック、数値チェック)。
mdlDividendCalc.CalcDivRateを呼び出し、結果判定を行う。- 成功時は「正答が見つかりました」、失敗時は「見つかりませんでした」とMsgBoxを表示する。
- セル選択ボタン (
(3) ThisWorkbook
- メタデータ:
- ツール名:「VA配当率」
- URL:
https://vba-assets.net/automatically-calculate-the-dividend-rate/ - 著作権:2020-2025 VBA アセット
- 更新履歴:
- 2026/1/3: 配当率計算ブックから抽出して作成 (Ver100)
- 2026/1/23: リボン対応 (Ver110)
4. 機能要件詳細
- 探索ロジックの効率性:
CalcDivRate関数は、UDF(ユーザー定義関数)としてではなく、マクロからセル値を書き換える処理として実装すること。ScreenUpdating = Falseを使用して描画コストを抑えること。
- 型と精度:
- 金額計算には誤差の少ない
Currency型を使用すること。 - 配当率は
Double型を使用すること。
- 金額計算には誤差の少ない
- UIのユーザビリティ:
- フォームはモードレスで表示し、計算中もExcelシートが見えるようにすること。
- InputBoxでのセル選択時は、ユーザーがキャンセルしてもVBAエラー画面が出ないように
On Error Resume Nextで適切に処理すること。


コメント
リボンから起動できるように変更しました。(Ver110)