複雑なIIf関数の条件はユーザー定義関数を使うとすっきり出来ます。
金額に応じて手数料を計算する場合、金額応じた条件分岐が必要になります。
Accessには、IIfという関数がありますが、条件が多くなるときわめて長い計算式になります。その計算部分を関数にしてすっきりさせましょう。
●手順●
約定金額に応じて、以下の手数料を表示するテキストボックスを作る場合、IIf関数を使用すると以下のような式になります。
------------------------------------------------------
手数料の速算表
約定代金 手数料
1〜 1,000,000 約定代金×0.0115
1,000,001〜 2,000,000 約定代金×0.0085 +3,000
2,000,001〜 3,000,000 約定代金×0.00825+3,500
3,000,001〜 4,000,000 約定代金×0.00815+3,800
4,000,001〜 5,000,000 約定代金×0.008 +4,400
5,000,001〜10,000,000 約定代金×0.0066 +11,400
10,000,001〜30,000,000 約定代金×0.0054 +23,400
------------------------------------------------------
[単価]、[株数]は、項目名で、属性は、数字
=IIf([単価]*[株数]>10000000,Int(([単価]*[株数]*0.0054+23400)*1.05), _
IIf([単価]*[株数]>5000000,Int(([単価]*[株数]*0.0066+11400)*1.05), _
IIf([単価]*[株数]>4000000,Int(([単価]*[株数]*0.008+4400)*1.05), _
IIf([単価]*[株数]>3000000,Int(([単価]*[株数]*0.00815+3800)*1.05), _
IIf([単価]*[株数]>2000000,Int(([単価]*[株数]*0.00825+3500)*1.05), _
IIf([単価]*[株数]>1000000,Int(([単価]*[株数]*0.0085+3000)*1.05), _
Int(([単価]*[株数]*0.0115+3000)*1.05))))))
本当に長い式になります
しかし、条件分岐とそれに応じた計算を行うユーザ定義関数を作成すると次の計算式になります。
=tess([単価],[株数])
tessは、自分で作成した、関数名です。
こちらの方が遥かにシンプルで、見やすいと思います。
新しいユーザ定義関数の作成方法
- Accessのデーターベースが開いている状態で、[ツール(T)]メニューから[マクロ(M)]-[Visual Basic Editer(V)]よりVBEを起動します。
- [挿入(I)]-[プロシージャー(P)]よりプロシージャーの追加のダイアログボックスを表示させます。
- [名前(N)」欄に関数の内容が、良く分かる名前を入力します。この場合は、[tess]です。「種類」の部分で「Functionプロシージャ(F)」をオンにする。
- コードウィンドウにプロシージャが入力されますが、それを以下のように書き換えます。
Function tesuuryou(kakaku As Long, suuryou As Long) As Long
If (kakaku * suuryou) > 10000000 Then
tesuuryou = Int((kakaku * suuryou * 0.0054 + 23400) * 1.05)
Else
If (kakaku * suuryou) > 5000000 Then
tesuuryou = Int((kakaku * suuryou * 0.0066 + 11400) * 1.05)
Else
If (kakaku * suuryou) > 4000000 Then
tesuuryou = Int((kakaku * suuryou * 0.008+4400) * 1.05)
Else
If (kakaku * suuryou) > 3000000 Then
tesuuryou = Int((kakaku * suuryou * 0.00815+3800) * 1.05)
else
If (kakaku * suuryou) > 2000000 Then
tesuuryou = Int((kakaku * suuryou * 0.00825+3500) * 1.05)
else
If (kakaku * suuryou) > 1000000 Then
tesuuryou = Int((kakaku * suuryou * 0.0085+3000) * 1.05)
else
tesuuryou = Int((kakaku * suuryou * 0.0115) * 1.05)
End If
End If
End If
End If
End If
End If
End Function
(これは、一例で、他にも色々な書き方があります。)
- Accessのフォームまたは、クエリに戻って、計算式を入力すべきところに先ほど作成をした関数 tess([単価],[株数])と入力します。
●確認●
実際に、クエリまたは、フォームを実行して、計算どおり表示されているか確認をします。
●書式●
ユーザー定義関数の書式
Pubulic Function <関数名> (<引数1> as <データ型>,<引数2> as <データ型>,
・・・・・) as <戻り値のデータ型>
・・・・・・・・・・・・・・・
End Function
括弧の中には、計算に使用する引数を並べます。引数には、適当な名前をつけます。
引数のデータ型はAsの後に指定します。戻り値のデータ型は、括弧の後ろに[As<データ型>]で、指定します。
ifの書式
If [条件式] Then
[ステートメント]
[Else 別の条件式 Then]
[別のステートメント]
[Else
他のステートメント]
End If