条件により分岐する関数を作ろう
では、前回からちょっとレベルを上げて今回は与えられた引数により処理内容を分岐させる関数を作っていきましょう。
今回のテーマ
- 与えられた文字列により足し算・引き算・掛け算・割り算と処理を分岐させる
- 与えられる引数は3つ。
- どの計算をするかの文字列
- 計算したい数字1
- 計算したい数字2
こんな感じですかね。
ルールとして
- 足し算の場合は「+」
- 引き算の場合は「-」
- 掛け算の場合は「*」
- 割り算の場合は「/」
を第1引数として与える事にしましょう。
実際に作ってみましょう
関数名はCalculation(計算)からとって「calc」という名前にしました。
割り算もするので戻り値は小数点がある可能性があるので関数の型は「Double」にしました。
プログラム的に「0の除算(割り算)は出来ない」というのが当たり前のルールなのですがこの場合は引数2か引数3に0が入ってきても0を返してくれますのでエラーの処理は必要なさそうです。
計算結果をセルに出力しよう
では今回はセルに計算したい数値が2つあるとしてそこから値を取得しつつ自作関数を呼び出してセルに出力しましょう。
Sub test() Dim types As String '計算方法、一旦セルからユーザーからわかりやすい形で受け取る Dim arg_one As Long '引数1 Dim arg_two As Long '引数2 types = Cells(2, 3).Value arg_one = Cells(3, 3).Value arg_two = Cells(4, 3).Value 'typesは一旦ユーザーがわかりやすい形で受け取った後に '処理しやすい形で書き換える Select Case types Case "足し算" types = "+" Case "引き算" types = "-" Case "掛け算" types = "*" Case "割り算" types = "/" End Select Cells(5, 3).Value = calc(types, arg_one, arg_two) End Sub ' typesには何の計算をするかの文字列が入ってくるので ' その文字列を見て処理を分岐させる Function calc(types As String, num1 As Long, num2 As Long) As Double Select Case types Case "+" calc = num1 + num2 Case "-" calc = num1 - num2 Case "*" calc = num1 * num2 Case "/" calc = num1 / num2 End Select End Function
どうでしょう?間にSelect Caseが入っているのでちょっと複雑に見えるかも知れませんが構造は至ってシンプルですね。
Select Caseがちょっと曖昧だぞって方は
Select Case
この回をご覧になって下さい。
解説
最初のSubプロシージャで見ているのはユーザー目線(誰でもわかる形)の文字列「足し算」「引き算」「掛け算」「割り算」という文字列。
そこからSelect CaseでExcel的な文字列「+」「-」「*」「/」に変換しています。
いや、このままでいいぞって方は特別変換はしなくてもいいと思います。
諸情報の登録が終わったら出力したいセル範囲(Cells)にイコール(=)でそのままFunctionプロシージャ「calc」で計算した結果をセルに出力しています。
まとめ
Functionプロシージャは与えられる引数により、如何なる処理の分岐も可能である。