3回目:関数について
全6回で勉強するプログラミング、3回目です。今回はプログラムで使う関数について、使い方、作り方をざっくり学習します。
定義済み関数
定義済み関数とは
定義済み関数とは、あらかじめ用意されている関数です。エクセルならSum関数などが定義済み関数ですが、ワークシート関数とも呼ばれます。Sum関数を使うときはセルに”=Sum(引数)”と入力すると結果がセルに帰ってきました。この返ってくる値を戻り値と呼びます。
関数を使う前に
プログラムで関数を使う前に確認するのが次の2点です。
- 引数とそのデータ型
- 戻り値とそのデータ型
例えば絶対値を返すAbs関数の引数と戻り値は次のようになります。
- 引数とそのデータ型:引数は必須で、データ型は数値。
- 戻り値とそのデータ型:引数と同じデータ型を戻す。
関数の使い方
Abs関数を使ったプログラムを書いてみましょう。
Dim intA As Integer ‘引数用変数
Dim intRet As Integer ‘戻り値用変数
intA = -88
intRet = Abs(intA) ‘Abs関数に変数intAを渡して結果をintRetに代入する
MsgBox intRet
End Sub
プログラムを実行すると「88」が表示されるはずです。Abs関数は引数を一つしかとりませんが、2つ以上だったり、配列(今学習では紹介してません)だったりと、複雑な関数もあります。ただ、戻り値は必ず一つです。
ユーザー関数
ユーザー関数とは、もうお分かりかと思いますが、定義済み関数以外の独自に作る関数です。一番簡単な構文は次のようになります。
Function 関数名
End Function
関数はFunctionというキーワードから始まりますが、構文はSubにとても似てます。実はVBAのFunctionは引数も戻り値も必須ではありません。引数と戻り値を定義する場合の構文は次のようになります。
Function 関数名(引数) As データ型
End Function
戻り値を定義しているのがAs データ型という箇所です。尚、構文は異なりますが、Functionというキーワードは他の言語でもよく使われます。
さっそく次のような関数を作ってみたいと思います。
プログラムを書くと次のようになります。test9の中で呼ばれる「差分」という名前の関数を作りました。
Dim intA As Integer
Dim intB As Integer
Dim intRet As Integer
intA = 6
intB = 10
intRet = 差分(intA, intB) ‘関数呼び出し
MsgBox intRet
End Sub
Dim intRet As Integer
intRet = Abs(A – B) ‘AとBの差の絶対値を変数intRetに代入
差分 = intRet ‘戻り値を設定
End Function
関数は単独で実行することができず、上記のようなtest9というプログラムが必要になります。(専門的にはtest9をドライバと呼びます。)実行するにはtest9のどこかにカーソルを移動してF5を押下します。
ところで、test9の中の差分関数を呼び出す際の引数に注目してください。変数名は差分関数の引数と同じ名前でなくてもかまいません。しかし、データ型は同じでないといけません。
また、差分関数の戻り値のデータ型と、変数intRetのデータ型が同じことも注目点です。
ユーザー関数2
関数の使い方、ユーザー関数の作り方をポイントを絞って紹介してきました。次はもう少し実用的な関数を作ってみたいと思います。BMIという言葉を聞いたことがあるでしょうか?メタボを判断するために使われるもので、次の計算式で表されます。
BMI=体重÷身長の2乗
今回は上記の計算結果を返すBMI計算関数を作りたいと思います。引数と戻り値は次の通りです。
●引数1:体重・Double型
●引数2:身長・Double型(身長はセンチメートルではなくメートルです)
●戻り値はDouble型
仮に体重は57.5、身長は1.58を使います。
まずはご自身で考えて作ってみましょう。
BMI関数 回答例
Dim dbl体重 As Double
Dim dbl身長 As Double
Dim dblRet As Double
dbl体重 = 57.5
dbl身長 = 1.58
dblRet = BMI計算(dbl体重, dbl身長)
MsgBox dblRet
End Sub
Function BMI計算(dbl体重 As Double, dbl身長 As Double) As Double
Dim dblRet As Double
dblRet = dbl体重 / (dbl身長 * dbl身長)
BMI計算= dblRet
End Function
プログラムを実行して「23.0331677615767」が表示されるのを確認してください。
2回目問題の解答
問題1(基本)の回答例
Dim a As Integer
Dim b As Integer
Dim intC As Integer
a = 1
b = 4
intC = a * b
MsgBox intC
End Sub
問題2(難問)の回答例
Dim intA As Integer
Dim strA As String
intA = 100
strA = “intAの中身は”
MsgBox strA & intA ‘文字列と数値をつなげるときは&演算子を使う
End Sub
まだ、紹介していない事柄だったので、一番最後の命令が難関だったと思います。文字列と文字列、文字列と数値など、文字列をつなげるときは演算子の&(アンパサンド)を使用します。これはVB固有です。JAVAは+を文字列の連結として使ってます。PHPでは、.が使われます。
MsgBox strA + intA
と記述するとプログラムの実行時に「型が違います」というエラーが発生したと思います。
どのように記述するのかネットで検索するなら
「文字列 連結 VB」で回答が得られたかと思います。