引数
引数とはいわゆる注文的なものですかね。
例えばお店なんかでは何か注文しなければ品物もわからない。値段もわからない。ってな事態になりますよね?
この「何を注文するのか」を指定するのが引数だと思って下さい。
ExcelVBAのRangeを例えに出せば、Rangeって言われただけではどこのセルなのかわかりませんよね?
そこでRangeの引数としてセルの番地を教えているわけです。
そのルールとしてRangeさんはセルの番地を文字列で頂かなければ理解ができませんよ。とそういうわけです。
Cellsを例に出すと、Cellsさんは行番号・列番号をこの順番で数字として頂かなければ理解ができません。
と、言えば理解できるでしょうか?
この引数ってものは今までExcelを触ってきた方々なら意識せずとも使っていたんですよね?
例えばSUM関数ってありますよね?
このSUM関数って合計を出す関数ですが、引数としてどこの範囲を合計するのかを指定しなければそもそもエラーになりますよね?
簡単なSUM関数を作ってみましょう
SUM関数はそもそもWorkSheetFunctionというものを使えば簡単に使う事が出来るのですが今回はあえて合計するものを2個だけ引数として指定できるSUM関数を作ってみましょう。
使うのはFunctionプロシージャというものです。今まで使ってきたのはSubプロシージャですが今回は呼び出し元に値を戻すFunctionプロシージャというものを使用していきます。
Sub 引数を使って簡単な関数を作成() Dim sum1 As Integer Dim sum2 As Integer Dim result As Integer sum1 = 3 sum2 = 8 result = mySum(sum1, sum2) Debug.Print result End Sub Function mySum(sum1 As Integer, sum2 As Integer) As Integer mySum = sum1 + sum2 End Function
このFunctionプロシージャというのはいわゆる自作関数ですね。
Function mySum(sum1 As Integer, sum2 As Integer) As Integer
この意味はmySumという自作関数は引数1に整数(Integer型)、引数2にも整数(Integer型)を受け取らなければ正常に動きません。という宣言をしています。更にこのmySumという関数が呼び出し元に返す値も整数(Integer型)です。という宣言ですね。
そして自分自身に計算結果を入れる事により呼び出し元に値を返しているわけです。
他のVBAに元からある関数などは実際に記述はされていませんが、内部でこのような事が行われていると考えて頂ければ良いかと思います。
今回の処理はかなりシンプルなものにしましたが、実際はもっと複雑な処理をしてから呼び出し元に値を返しても大丈夫です。
単体では呼び出せない
Functionはそれ単体では呼び出せません。なのでFunctionだけをステップ実行する事は出来ませんので、イミディエイトウィンドウでどこかのセルに値を入れ込む為に呼び出すかSubプロシージャから呼び出すしかできません。
でもそれではちょっと面倒だ。という事で次回はstopステートメントとブレークポイントについてお話をしていきましょう。