概要
前回は返り値のない関数について解説しました(前回の記事)。コードが整理できて見易くなることが体験できたかと思います。
今回はより実用的な返り値がある場合について解説していきます。今までの例題に5本缶コーヒーを買うと1本プレゼントという内容を追加します。ゲットした缶コーヒーの数は幾つでしょうか?
まずは返り値のない関数の場合をC言語で書いてみます!!
void buyCoffee() //自作関数
{
int coffee=120; //コーヒーの値段
int val=1000; //持ち金
int fare=200; //電車賃
int cnt=0; //カウンター
int bns=0; //おまけ
if(val>=coffee+fare)
{
for(int i=1;i<=(val-fare)/coffee;i++)
{
cnt++; //1本購入
if(cnt%5==0) //余りがゼロの時
bns++; //おまけ1本追加
}
printf("%d\n",cnt+bns); //総数
}
else
puts("諦めた");
}
int main()
{
buyCoffee(); //自作関数を読む
return 0;
}
このコードの場合、正しく動きますが、違う書き方もできます。もし、例題に10本以上購入した場合は10円値引きするなど沢山条件がついたら、buyCoffee関数のコードが膨大になっていきます。メイン関数は見易くなっても自作関数が見にくいコードになってしまっては本末転倒です!!どちらも見易いコードにするとメンテナンス性が格段に良くなります!!
そこで使う手段の一つが返り値です。
まずは頭の中のイメージを解説していきます。

基本的に返り値の無い関数と同じですが、手順書に返り値は何か指示しないといけません!!指示する返り値は数字、文字、変数など指定できます!! 手順書を読み終わると自作関数の箱の中に返り値が入っています。手順書が返り値に変身するイメージです!! 変身後の形をよーく見て下さい。見たことある形ですよね?? 返り値のある関数って変数なんです。手順書を読み終わった時に中身があるのが返り値がある関数で、対して空っぽなのが前回解説しました返り値のない関数です。
それでは実際のコードで書いてみます。
コード
int buyCoffee() //自作関数
{
int coffee=120; //コーヒーの値段
int val=1000; //持ち金
int fare=200; //電車賃
int cnt=0; //カウンター
int bns=0; //おまけ
if(val>=coffee+fare)
{
for(int i=1;i<=(val-fare)/coffee;i++)
{
cnt++; //1本購入
if(cnt%5==0) //余りがゼロの時
bns++; //おまけ1本追加
}
}
else
puts("諦めた");
return cnt+bns; //返り値
}
int main()
{
printf("%d\n",buyCoffee()); //自作関数を読む
return 0;
}
Sub main()
MsgBox buyCoffee '自作関数を読む
End Sub
Function buyCoffee() As Integer '自作関数
Dim coffee As Integer
Dim val As Integer
Dim fare As Integer
Dim cnt As Integer
Dim bns As Integer
Dim i As Integer
coffee = 120 'コーヒーの値段
val = 1000 '持ち金
fare = 200 '電車賃
cnt = 0 'カウンター
bns = 0 'おまけ
If (val >= coffee + fare) Then
For i = 1 To Int((val - fare) / coffee)
cnt = cnt + 1
If (cnt Mod 5 = 0) Then
bns = bns + 1
End If
Next i
Else
MsgBox "諦めた"
End If
buyCoffee = cnt + bns '返り値
End Function
いかがでしょうか?? C言語はreturnで、VBAは関数名に代入して返します。
補足になりますが、関数を宣言する時の文字についてC言語のvoidは空っぽという意味です。そしてあまり知られていませんが関数は返り値がある無しで呼び方が違います。返り値のある場合は関数(Function)、ない場合はサブルーチン(Subroutine)と呼びます。VBAの宣言に当てはめてみてください!!(関数とサブルーチンと分けて呼ぶ必要はありませんが)
今回は以上です。慣れるまでは自作関数は作れないと思います。まずは見にくくてもいいので動くプログラムを優先し、そのあと見直してみて同じループ、条件文が使われていたら自作関数を作るチャンスです。それが関数をマスターするコツだと思います。
次回は関数の引き数を解説する前に、変数の有効範囲について解説します。