シミュレーションこそプログラミングの出番

『試算したいけど、やり方がよく分からない…』
『プログラミングって、難しいんでしょ』
『誰かにお願いしちゃった方が、楽だし…』

昨日、事務所ホームページで、以下の記事を公開しました。

ここで、小規模企業共済への加入をした場合のシミュレーションをしましたが、
やはりプログラミングは便利だなと。

上記のリンク先にはプログラミングした内容は記載していませんが、こちらのブログでその内容に触れたいと思います。

※シミュレーションしてみよう

目次

実際に見てみよう:シミュレーション動画

プログラミングを組んでおくと、こんな感じでシミュレーションができます。

  • 現在の役員報酬(月額):500,000円
  • 現在の年間所得額:5,000,000円

の箇所(オレンジ)は前提条件として手入力を行い、あとは『Simulation実行』を押すだけです。

パターンは少し簡略化していますが、

  • 月額掛け金:500~70,000円(140通り)
  • 役員報酬の同額増加:あり or なし(2通り)

で280パターンあります。

これを毎回手作業でシミュレーションするのは難しいため、ここでプログラミングが活躍します。

実際のプログラミング

ExcelのVBAを使っています。

基本的な事項は、以下の記事をご確認頂ければ。

触ったことがない人へ
『Excelマクロ』を触ったことがない人へ 『Excelマクロ』の存在を『知っている人』は多いと思います。 一方で、『触ったことがある人』、『自分でコードを書いて業務に活かしている人』 は多くはないのではない...

ざっとコードを記載します。

まずは、掛け金と同額の役員報酬を増やすパターンから。

Sub SimulationSame()
'掛け金と同額役員報酬を増やす
Sheets("Simulation").Range("D10").Value = "=D8"

Dim i As Long
For i = 1 To 140

 Sheets("Simulation").Range("D8").Value = i * 500 '掛け金と役員報酬を設定
  Application.Calculate ' ← 計算を強制実行
 Sheets("結果").Cells(2 + i, 3).Value = Sheets("Simulation").Range("D38").Value '結果シートにトータルの節税額を転記

Next i

End Sub

①役員報酬の増加の設定

Sheets("Simulation").Range("D10").Value = "=D8"

SimulationシートのD10セルに、=D8という数式を入れることを意味しています。

具体的には下表のような入力をしているのと同義です。

②繰り返し処理の設定

Dim i As Long
For i = 1 To 140



Next i

の部分ですが、

  • 変数 iをlong(整数)という型で設定
  • iを1から140まで繰り返す、とう条件をセット
  • i=1で ~ の処理をする
  • Next iで i=2として ~ の処理をする

といった意味合いになります。

③掛け金の設定、結果(節税額)の転記

Sheets("Simulation").Range("D8").Value = i * 500 '掛け金と役員報酬を設定

で掛け金の金額をセット。

例えば、1回目のシミュレーションであれば、500円がD8セルに入力されます。

2回目はi=2×500円=1,000円
3回目はI=3×500円=1,500円
4回目は…

と140回目まで繰り返して処理がされます。

Sheets("結果").Cells(2 + i, 3).Value = Sheets("Simulation").Range("D38").Value

ここでは、『右辺の値が左辺に代入される』という意味合いです。

例えば、1回目であれば、下記のようなイメージに。

これが140回目まで繰り返されると、『結果』シートのC3~C142までに節税額が転記されます。

役員報酬なしverも基本的な考えは同じで、SimulationシートのD10セルを0円と設定し、転記箇所を少し変えている形となります。

sub SimulationOnly()
'掛け金だけ設定し、役員報酬はそのまま
Sheets("Simulation").Range("D10").Value = 0

Dim i As Long

For i = 1 To 140

 Sheets("Simulation").Range("D8").Value = i * 500 '掛け金と役員報酬を設定
 Application.Calculate ' ← 計算を強制実行
 Sheets("結果").Cells(2 + i, 4).Value = Sheets("Simulation").Range("D38").Value '結果シートにトータルの節税額を転機

Next i

End Sub

最後にこの2つのプログラミングを呼び出して実行するコードを記載。

Sub go()

 Call SimulationSame
 Call SimulationOnly

End Sub

これでで、前述の動画のように実行されます。

なお、動画上は分かりやすいように数値が順番に更新されるようにしました。
しかし、動作が重くなるため、以下のコードを入れて数値更新の動作が出ないようにする方が軽くなります。
(シミュレーションぽさはなくなりますが)

Application.ScreenUpdating = False
'マクロ実行中に画面の再描画(表示更新)を止める(カタカタしないように)

1つ理解できると応用が利く

VBAを多少知っている方であれば、

シンプルなものしか使っていないな。

という印象を持たれるかもしれません。

そのとおりで、可能な限りシンプルな形で示した方がよいと思うのです。

  • 誰でも使いやすい
  • 応用しやすい
  • 読み解きやすい

といったメリットがありますので。

今回の考え方を使えば、相続税の2次相続シミュレーションやその他の節税策のシミュレーションなどもできるようになります。

ぜひ、お試し頂ければ。

では、また次回。

編集後記

◇日記
昨日は、早朝ラン&ブログ執筆から。
午前中は歯医者で定期健診。
小規模企業共済の加入に関する記事執筆やシミュレーション資料の作成等を中心に。

◇ブログネタ経緯
事務所HPの昨日の記事を踏まえて書こうと思い。

◇1日1新
小規模企業共済のシミュレーション作成

◇今日の一冊
最新版 オールカラー 個人事業の経理と節税

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

●1990年4月生まれ。東京都出身。
●『時間とお金』『家庭と仕事』『思考と行動』の悩みをサポート。
●IT、発信、営業、会計、税金に強みを持つ。
●公認会計士。
●3児(みんな男の子)の父。

目次