6

特定の括弧内の所得税を計算する関数を Visual Basic で定義したいと思います。入力は、所得、限界税率、下位ブラケット境界、およびオプションで上位ブラケット境界である必要があります。(上部ブラケットの場合、上限はありません)。

これが私がそれについて行った方法です。まず、「ランプ」関数を次のように定義します。

Public Function ramp(x)
    ramp = (x + Abs(x)) / 2
End Function

これは基本的に IF(x<0,0,x) と同じです。次に、税金の関数 (オランダ語) を次のように定義します。

Public Function schijfbelasting(inkomen, ondergrens, bovengrens, tarief)
    schijfbelasting = ramp(tarief * (inkomen - ondergrens)) - ramp(tarief * (inkomen - bovengrens))
End Function

ここで、"inkomen" = 収入、"ondergrens" = 下限ブラケット境界、"bovengrens" = 上限ブラケット境界、"tarief" = 限界税率、および出力 "schijfbelasting" = 指定されたブラケット内の税。

これはすべて正常に機能しますが、次を使用して「bovengrens」(上部ブラケット境界) をオプションにしたい場合を除きます。

Optional bovengrens

Matlab では、「nargin」(引数の数) 関数を使用して、次のようなことを行います。

Public Function schijfbelasting(inkomen, ondergrens, Optional bovengrens, tarief)
If nargin==4
    schijfbelasting = ramp(tarief * (inkomen - ondergrens)) - ramp(tarief * (inkomen - bovengrens))
Elseif nargin==3
schijfbelasting = ramp(tarief*(inkomen-ondergrens))
End If
End Function

しかし、Visual Basic の「nargin」に似た関数は知りません。「引数「bovengrens」が定義されている場合」のようなものでもかまいません。この問題にアプローチする方法を知っている人はいますか? 前もって感謝します。

PS私は、一番上のブラケットのブラケット「境界」に非常に大きな数を入力することでコードを「機能させる」ことができることを認識していますが、このエレガントなコーディングは考慮していません。

4

2 に答える 2

7

VBA のIsMissing関数を使用して、オプションのパラメーターをテストできます。次に例を示します。

Public Sub OptionalArg(arg1, Optional arg2)
Debug.Print arg1; IIf(IsMissing(arg2), "missing", arg2)
End Sub

次のようにテストします。

Sub Test()
OptionalArg 1
OptionalArg 1, 2
End Sub
于 2013-06-27T19:16:12.527 に答える
1

IsMissing関数を使用して引数をテストするだけです。

If IsMissing(bovengrens) Then ...
于 2013-06-27T19:16:06.447 に答える