即効テクニック

日付・文字列操作・演算

関数の作成

( - )
複雑な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は、自分で作成した、関数名です。
こちらの方が遥かにシンプルで、見やすいと思います。

新しいユーザ定義関数の作成方法
  1. Accessのデーターベースが開いている状態で、[ツール(T)]メニューから[マクロ(M)]-[Visual Basic Editer(V)]よりVBEを起動します。
  2. [挿入(I)]-[プロシージャー(P)]よりプロシージャーの追加のダイアログボックスを表示させます。
  3. [名前(N)」欄に関数の内容が、良く分かる名前を入力します。この場合は、[tess]です。「種類」の部分で「Functionプロシージャ(F)」をオンにする。
  4. コードウィンドウにプロシージャが入力されますが、それを以下のように書き換えます。  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 (これは、一例で、他にも色々な書き方があります。)
  5. Accessのフォームまたは、クエリに戻って、計算式を入力すべきところに先ほど作成をした関数 tess([単価],[株数])と入力します。
●確認● 実際に、クエリまたは、フォームを実行して、計算どおり表示されているか確認をします。 ●書式● ユーザー定義関数の書式  Pubulic Function <関数名> (<引数1> as <データ型>,<引数2> as <データ型>,  ・・・・・) as <戻り値のデータ型>  ・・・・・・・・・・・・・・・  End Function 括弧の中には、計算に使用する引数を並べます。引数には、適当な名前をつけます。 引数のデータ型はAsの後に指定します。戻り値のデータ型は、括弧の後ろに[As<データ型>]で、指定します。 ifの書式  If [条件式] Then   [ステートメント]  [Else 別の条件式 Then]   [別のステートメント]  [Else   他のステートメント]  End If