変数の有効範囲
前回は返り値のある関数について解説しました。今回も関数の続きを解説していきたい所ですが、その準備として変数の有効範囲についてやっていきます!!
まず変数には大きく分けてグローバル変数とローカル変数があります。簡単に言うと広い範囲がグローバル変数、狭い範囲がローカル変数です。まずは2つの変数のイメージを掴みましょう!!

グローバル変数は冒頭で宣言し、ローカル変数は関数の中で宣言します。つまりグローバル変数はどこでも使えることができ、ローカル変数は宣言された位置によって有効範囲が限られます。前回の「関数について徹底解説 vol.3」のコードをアレンジします。
コード
int val=1000; //持ち金 //グローバル変数
int buyCoffee() //自作関数
{
int coffee=120; //コーヒーの値段(ローカル変数)
int fare=200; //電車賃(ローカル変数)
int cnt=0; //カウンター(ローカル変数)
int bns=0; //おまけ(ローカル変数)
if(val>=coffee+fare)
{
for(int i=1;i<=(val-fare)/coffee;i++)//iはローカル変数
{
cnt++; //1本購入
if(cnt%5==0) //余りがゼロの時
bns++; //おまけ1本追加
}
}
else
puts("諦めた");
return cnt+bns; //返り値
}
int main()
{
printf("%d\n",buyCoffee()); //自作関数を読む
return 0;
}
Dim val As Integer 'グローバル変数
Sub main()
MsgBox buyCoffee '自作関数を読む
End Sub
Function buyCoffee() As Integer '自作関数
Dim coffee 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) 'iはローカル変数
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言語では{}の中で宣言され、宣言された{}内が有効範囲です。
では{{}}の様に括弧が2つある場合はどうでしょう??外側の括弧内で宣言された変数は内側の括弧内も有効範囲ですが、逆は有効範囲でなくなります!!また別の{}内であれば同じ変数も使うことができます。ローカル変数は使い捨て変数と考えることで僕は理解することができました。宣言された{}の外に出ると破棄されます。対してVBAは括弧がないので分かりにくいですが、End SubなどのEndが目印になります。考え方はC言語と同じです。ここは間違いやすいポイントなのでしっかり理解しましょう。
次回は再び関数に戻り、引数について解説していきます。