スポンサードリンク

Excel VBA プログラムはいろんな書き方ができます。正解は一つではありません。

ExcelVBAに限らず、プログラミングはプログラマーによって、いろんな書き方ができます。

したがってプログラムの正解は一つではありません。いくつもあります。

でも効率的な書き方や、メンテナンスしやすい書き方というものはあります。

また、ユーザー定義関数の中で、さらに別のユーザー定義関数を呼び出すことで、前に作成したプログラムを有効に活用することもできます。

そこで今回は、同じ結果を出すプログラムでも、いろんな書き方ができることを学んでください。

オリジナルのユーザー定義関数を、さらに改良してみましょう。

(1)まず、これまでの基本となる calcGankin() というユーザー定義関数があります。

・calcGankin()
excel-vba-66.gif

このユーザー定義関数は、欲しい利息と利率(年率)から、必要な元金を逆算するためのものです。

・使用例

=calcGankin(1000,0.5)



(2)次に calcGankin() を改良して、calcGankinF()というユーザー定義関数を作成しました。

・calcGankinF()
excel-vba-67.gif

関数の使い方は同じです。

・使用例

=calcGankinF(1000,0.5)


このユーザー定義関数は、計算結果を「桁区切り」する書式を加えたり、円表示を加えています。

ここでのポイントは、元金の計算式をそのまま残していることです。

つまり同じ計算式が、calcGankin() と calcGankinF() の両方にあります。

それぞれに計算式があるメリットは、異なる式に変えやすいことです。

逆に言うと、計算式を変えたい場合や、式が間違っていた場合には、両方修正しなければならないデメリットがあります。


(3)そこで calcGankin() の計算式を利用しつつ、元金の書式を加えた、calcGankinF2()というユーザー定義関数を作成しましょう。

これまでのユーザー定義関数の下に新しく作成して、動作確認してみてください。

・calcGankinF2()
excel-vba-65.gif


Public Function calcGankinF2(risoku As Long, kinri As Single) As String
  Dim gankin As Currency
  
  gankin = calcGankin(risoku, kinri)
  calcGankinF2 = Format(gankin, "##,##0") & "円"
  
End Function


計算結果は calcGankinF() とまったく同じになるはずです。

・使用例

=calcGankinF2(1000,0.5)


でも calcGankinF2() には、計算式がありませんよね。計算式の変わりに、別のユーザー定義関数を呼び出して使っています。


gankin = calcGankin(risoku, kinri)


このようにユーザー定義関数の中では、別のユーザー定義関数を呼び出して使うことができます。もちろん既存の関数も使えます。

別のユーザー定義関数を呼び出すことで、プログラムの処理を分割したり、プログラムの再活用が可能になります。

もし計算式が変更になった時でも、calcGankin() 側の修正だけで済みます。

また、calcGankinF2()が呼び出された時に受け取った引数を、そのままcalcGankin()を呼び出す時の引数として使っている点にも注目してください。

excel-vba-70.gif

このような書き方はよく使われるので、覚えておくと便利です。


(4)もっとシンプルにしたのが、calcGankinF3() です。これも作成して、動作確認してみてください。

・calcGankinF3()
excel-vba-68.gif


Public Function calcGankinF3(risoku As Long, kinri As Single) As String
  
  calcGankinF3 = Format(calcGankin(risoku, kinri), "##,##0") & "円"
  
End Function


・使用例

=calcGankinF3(1000,0.5)


出力結果は同じですが、プログラムがたった1行になりました。

でも関数が入れ子の状態なので、少しわかり難いですよね。そんな時は「置き換え」で考えます。

*入れ子 ここでは関数の中に関数がある状態

calcGankinF3 = Format(calcGankin(risoku, kinri), "##,##0") & "円"

calcGankinF3 = Format(calcGankin(1000, 0.5), "##,##0") & "円"

calcGankinF3 = Format(250000, "##,##0") & "円"

calcGankinF3 = "250,000" & "円"

calcGankinF3 = "250,000円"

このように引数の値や、関数の戻り値を、実際の値に置き換えてイメージすると、わかりやすいです。これがプログラムを読む時のコツです。


【解説】
今回はユーザー定義関数の応用編として、少し変わった書き方を学びました。

同じ結果を得るプログラムでも「いろんな書き方ができるんだなぁ」という感じを掴んでいただけたら幸いです。

プログラミングの正解は一つではないことが、何となくわかったのではないでしょうか。

また、今回ぜひ押さえおいて欲しいポイントは、以下の3つです。

・ユーザー定義関数の中で、さらに別のユーザー定義関数が呼び出せる。
・別のユーザー定義関数を呼び出すことで、プログラムを分割したり、処理を再活用できる。
・受け取った値を、さらに別の関数を呼び出す時の引数にできる。

プログラミングとは、既存の関数やオリジナルのユーザー定義関数を組み合わせて、実現したい処理を組み立てていく作業なのです。

ちなみにJava言語などのオブジェクト指向型言語では、「継承」という便利な仕組みがあるので、プログラムの再利用が、もっと効率的にできます。

スポンサードリンク






Excel VBA 初心者入門講座 TOPへ