前回、定額法による減価償却費の計算を無駄にマクロで作ってみましたが、今回は定率法による減価償却費の計算を無駄にマクロで作ってみました。
定率法にしかない特殊な計算方法をマクロのコードに反映させる必要があり、結果として前回より手数が増えます。
前回の記事はこちら。
今回の記事は「定率法」のみの計算をしています。平成24年4月1日以降取得のいわゆる200%定率法です。
また、法人税の論点におけるいわゆる「設立事業年度が1年未満の場合」における償却率の調整計算には対応していません。
償却額の計算における1円未満の端数処理(法人税は1円未満切り捨て、所得税は1円未満切り上げ)については考慮していません。
Excelマクロで定率法による減価償却費の計算を行う。
マクロを実行すると下記のように動作します。
今回のマクロのコードは下記のようなものになります。改定償却に対応するようにコードを記述する必要があるので、前回の定額法による計算よりもコードが少し長くなっています。
もっとシンプルに、かつ、可読性が高く記述できそうな気がものすごくするんですが。。。
(前回の記事でも同じこと書いたような気が、、、)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | Option Explicit Sub 定率法による償却額計算() '■定率法による計算 '■変数宣言 Dim i As Long Dim j As Long Dim lastyear As Long Dim kaiteisyutoku As Range lastyear = Range( "c6" ).Value '耐用年数 '■前回の計算結果のクリア With Range( "b13" ).CurrentRegion.Offset(1, 0) .ClearContents .ClearFormats End With '■処理実行部分 '■エラー処理(取得価額か耐用年数がブランクの場合) If Range( "c5" ).Value = "" Or Range( "c6" ).Value = "" Then MsgBox "計算に必要なデータが入力されていません。" & vbCrLf & _ "取得価額と耐用年数を入力してください。" , vbExclamation Exit Sub End If '■年数の記載 For i = 1 To lastyear + 1 Cells(i + 13, 2).Value = i Next i '■初年度の償却額計算実行 Range( "c14" ).Value = Range( "c5" ).Value Range( "d14" ).Value = Range( "c5" ) * Range( "c7" ) * Range( "c8" ) / 12 Range( "e14" ).Value = Range( "c14" ) - Range( "d14" ) '■2年目以降の償却額計算実行 For i = 1 To lastyear If Cells(i + 13, 5).Value * Range( "c7" ).Value >= Range( "c11" ).Value Then '■通常の償却の場合 Cells(i + 14, 3).Value = Cells(i + 13, 5).Value Cells(i + 14, 4).Value = Cells(i + 13, 5).Value * Range( "c7" ).Value Cells(i + 14, 5).Value = Cells(i + 14, 3).Value - Cells(i + 14, 4).Value Else '■改訂償却に該当する場合 Cells(i + 14, 3).Value = Cells(i + 13, 5).Value j = j + 1 Set kaiteisyutoku = Cells(i + 14, 3).Offset(-j, 2) '改訂取得価額の変数格納 Cells(i + 14, 4).Value = Application.WorksheetFunction. _ Min(Cells(i + 14, 4).Offset(-1, 1) - 1, kaiteisyutoku.Value * Range( "c9" ).Value) Cells(i + 14, 5).Value = Cells(i + 14, 3).Value - Cells(i + 14, 4).Value End If Next i '■計算結果を桁区切りして罫線作成 With Range( "b13" ).CurrentRegion .NumberFormatLocal = "#,##0" .Borders.LineStyle = xlContinuous End With End Sub |
定率法による減価償却の計算のやりかた方とその特徴
国税庁のHPによると定率法の計算方法は下記のようになっています。

定率法による減価償却費の計算の特徴の1つとして、調整前償却額(厳密には違いますが、定率法で普通に償却額を計算するイメージで大体OKです。つまり期首帳簿価額×償却率。)が償却保証額を下回った場合には計算方法がガラりと変わるという点があります。
調整前償却額が償却保証額より大きい場合は「期首帳簿価額×償却率」で償却額を計算し(パターン①)、そうじゃない場合には改定取得価額に改定償却率をかけて減価償却費を計算する(パターン②)ことになります。これは定額法の計算にはなかった定率法独特の計算方法になります。
イメージとしてこんな感じでしょうか?
・調整前償却額が償却保証額より大きい場合(パターン①)

・そうじゃない場合(パターン②)

定率法の計算に必要な「改訂償却率」「償却保証率」「償却保証額」の準備をする(別シートのデータベースからVLOOKUP関数で連動する)
今回のExcelブックを見てもらうと前回の定額法の計算時にはなかったセルとして新しく改定償却率(B9セル)、償却保証率(B10セル)、償却保証額(B11セル )と言う3つのセルを追加しています。

こちらの3つのセルのうち、「C9セル」と「C10セル」については「C6セル」に入力された耐用年数に該当する各種の率を別シートに記載した定率法の償却率のデーターベースからVlookup関数で連動させています。

これによって、定率法の計算に必要な「改訂償却率」、「償却保証率」、「償却保証額」の準備ができます。
コードの解説
今回は前回の定額法のコードの時よりも変数を追加しています。追加した変数は2つ。
変数「j」と改訂取得価額を格納するための変数「kaiteisyutoku」です。

で、次は上で説明した定率法の独特の計算のやり方をマクロのコードに記述していきます。
具体的には2年目以降の減価償却費の計算の時に毎回毎回、調整前償却額と償却保証額の判定を行い、償却保証額を下回っているかどうかをマクロで判断させています。(1年目の減価償却の計算でいきなりパターン②の計算方法をすることは多分ないので。)
その結果、下回っていない場合には通常の減価償却費の計算を行い。
もし下回っている場合には改定取得価額と改定償却率を用いて計算するようにします。
で、下記の箇所が調整前償却額と償却保証額の判定を行っている部分になります。

判定の結果、下回っていない場合には通常の減価償却費の計算を行いますが、その部分がこちら。

一方、判定の結果、下回っている場合には改定取得価額と改定償却率を用いて計算しますが、その部分がこちら。

ポイントは変数「kaiteisyutoku」に「改定取得価額」を格納する点でしょうか。
今回のやり方としてはoffset関数と変数「j」を使用して、改訂取得価額を「毎回」変数「kaiteisyutoku」に格納しなおしています。格納する値自体は変わらないですが。
For~Nextステートメントの中に改訂償却を行う場合のコードが記載されているため、この方法でないと自分のスキルでは「改訂取得価額」を変数に格納することができませんでした。
結果として可読性が低く見にくい、かつ醜いコードになってしまったように感じます。
それ以外のコードの部分については定額法のコードと変わりないと思いますので説明は割愛します。
まとめ
前回の定額法による減価償却費の計算で作成したマクロをベースにして定額法と定率法の計算方法の違いによる部分を反映させて今回マクロを作ってみました。
別にマクロを使用して計算する必要は一切ない。のでExcel関数やネットで検索した減価償却サイトを利用して計算しても全然問題ないです。
どうしてもマクロで計算したいこだわりがあるニッチな方の参考になれば幸いです。
【本日の近況報告】
先日から椅子から立ち上がる際に左の膝が痛みます。右の膝は全然痛みはなく、左だけ痛いです。
どこかでぶつけた記憶もないですし、見た感じアザなどもないので、なんでだろうと思っていたんですが。
自分の行動を思い返してみて気づきました。多分これだと。
子供と2日連続で扇町公園に行った際に滑り台の階段を何往復もしたからだと。
コロナウイルスの影響で運動不足になり、確実に体が劣化しているんでしょう。
湿布貼って様子見ます。
【本日の1曲】
Maritime / Guns of Navarone
アメリカのインディーロックバンド、マリタイムの一曲。この曲はポップな感じの中にエモが混ざっているような、そんな一曲。
久しぶりに思い出してYoutubeでPV見てみたらボーカルの人がハゲてることを知るという。。
weezerとかget up kidsとかファウンテインズオブウェインが好きな人とか気にいると思うんですが、いかがでしょうか?