第6講 サブプロシージャの学習
第8話 グローバル変数
基本的にはグローバル変数は使わない方がよいのですが、
ゲームプログラミングではコードを複雑にしすぎないよういに、
グローバル変数もしばしば使いますし、
後に数独自動生成ソフトにおいても出来るだけコードを簡単にするために、
グローバル変数はいくつも使用します。
もちろん、引数として送ればグローバル変数はすべて不要になりますが、
いきなり引数として送ると、
初心者どころかある程度プログラミングに慣れている人でさえ、
混乱します。
グローバル変数の使用例を挙げて、
第6講を終了して、
次は結果を報告する社員=Funtionプロシージャについて勉強します。

グローバル変数の事例
Dim a As Integer 'グローバル変数を用意
Private Sub CommandButton1_Click()
  CommandButton2_Click '社員CommandButton2_Clickに仕事を依頼
  a = 1 '箱aに1を代入
  Cells(3, 2) = "a=" 'B3にa=と表示
  Cells(3, 3) = a '箱の中身を表示
  f '社員fに仕事を依頼
  Cells(4, 2) = "a=" 'B4にa=と表示
  Cells(4, 3) = a '箱の中身を表示
End Sub
Sub f()
  a = 2 '箱aに2を代入
End Sub
Private Sub CommandButton2_Click()
  Rows("3:2000").Select
  Selection.ClearContents
  Cells(1, 1).Select
End Sub
参考ダウンロード添付ファイル
実行結果
001

もちろん、こんな簡単なプログラムなら、
グローバル変数は使わないコードは簡単に書けます。
aを引数として送ればよいのです。
ただし、変数そのものを送る方法がないので、
変数の住所を教えて、
変数の中身を入れ替えてもらいます。
変数の住所を教えるには、
配列の学習が必要です。
Private Sub CommandButton1_Click()
  CommandButton2_Click '社員CommandButton2_Clickに仕事を依頼
  
Dim a(0) As Integer 'ローカル配列を用意したが、要素数が1個なので変数を用意したのと実質は同じ
  
a(0) = 1 '箱a(0)に1を代入
  Cells(3, 2) = "a(0)=" 'B3にa(0)=と表示
  Cells(3, 3) = a(0) '箱の中身を表示
  Call f(a) '社員fに仕事を依頼 引数で送っているのはa(0)の中身の1ではなく、金庫aの隠し場所の住所
  Cells(4, 2) = "a(0)=" 'B4にa(0)=と表示
  Cells(4, 3) = a(0) '箱の中身を表示
End Sub
Sub f(x(0) As Integer)
  x(0) = 2 '箱x(0)に2を代入
End Sub
Private Sub CommandButton2_Click()
  Rows("3:2000").Select
  Selection.ClearContents
  Cells(1, 1).Select
End Sub
参考ダウンロード添付ファイル

実行結果
002
第8講で配列を学びますが、
配列とは添え字番号付きの変数のことです。
  Dim a(0) As Integer 'ローカル配列を用意したが、要素数が1個なので変数を用意したのと実質は同じ
今回としているので、
用意された変数はa(0)のみですが、
  Dim a(9) As Integer
とすると、変数は
a(0),a(1),a(2),a(3),a(4),a(5),a(6),a(7),a(8),a(9)
の10個が用意されます。
注意はDim a(9) As Integerと宣言した場合、
用意される変数は10個ということです。
なぜなら、a(0)がありますので、0をカウントしなければならないからです。
添え字とは()内の数字のことです。
そして、要素数とは用意された変数の個数でこの場合には10個が要素数ということになります。

配列を使うと、1万個の変数も簡単に用意できます。
  Dim a(9999) As Integer
用意された変数は、
a(0),a(1),a(2),a(3),a(4),a(5),・・・,a(9998),a(9999)
です。
添え字付きの変数である配列は大変便利ですね。
数独自動生成ソフト開発においては、
  Dim s(8, 8) As Integer
という2次元配列を用意します。
この要素数は(8+1)×(8+1)で81個です。
0をカウントするのでしたね。
用意される変数は、
s(0,0),s(0,1),s(0,2),s(0,3),s(0,4),s(0,5),s(0,6),s(0,7),s(0,8),
s(1,0),s(1,1),s(1,2),s(1,3),s(1,4),s(1,5),s(1,6),s(1,7),s(1,8),
s(2,0),s(2,1),s(2,2),s(2,3),s(2,4),s(2,5),s(2,6),s(2,7),s(2,8),
                 ・
                 ・
                 ・
s(8,0),s(8,1),s(8,2),s(8,3),s(8,4),s(8,5),s(8,6),s(8,7),s(8,8)
です。
第6講で学んだサブプロシージャは、仕事を命じられて仕事を遂行するだけで、
仕事を命じた社員に報告は一切しませんでしたが、
結果を報告するものが次に学ぶファンクションプロシージャです。


第7話へ 第7講第1話へ

トップへ