第5講 サブプロシージャを理解しよう

第6話 ローカル変数とグローバル変数
Private Sub CommandButton1_Click()
  
Dim i As Integer, w As Integer
  CommandButton2_Click '画面をクリア
  f1 'データ作成
  f2 '出席番号1の生徒の処理と表示
  f3 '出席番号2の生徒の処理と表示
  f4 '出席番号3の生徒の処理と表示
  f5 '出席番号4の生徒の処理と表示
  f6 '出席番号5の生徒の処理と表示
  f7 '出席番号6の生徒の処理と表示
  f8 '出席番号7の生徒の処理と表示
  f9 '出席番号8の生徒の処理と表示
  Cells(1, 1).Select
End Sub
Sub f1()

  For i = 3 To 5
   Cells(5, i) = Int(101 * Rnd)
  Next
  For i = 3 To 5
   Cells(6, i) = Int(101 * Rnd)
  Next
  For i = 3 To 5
   Cells(7, i) = Int(101 * Rnd)
  Next
  For i = 3 To 5
   Cells(8, i) = Int(101 * Rnd)
  Next
  For i = 3 To 5
   Cells(9, i) = Int(101 * Rnd)
  Next
    For i = 3 To 5
   Cells(10, i) = Int(101 * Rnd)
  Next
  For i = 3 To 5
   Cells(11, i) = Int(101 * Rnd)
  Next
  For i = 3 To 5
   Cells(12, i) = Int(101 * Rnd)
  Next

End Sub
    ・・・・
CommandButton1_Click側の問題点は、
無駄な1行があることであり、
社員側のf1等の問題は・・・深刻な問題です。
私の知っている範囲では、他言語なら必ずエラーします。
VBAまたはVBだから動いたのです。
他の言語なら、プログラムを実行しようとしたときに、
f1などでは、
  
'i' : 定義されていない識別子です。(C言語やC++の場合)
などと指摘されて、エラーします。
皆さんは疑問に思います。
CommandButton1_Clickの1行目
  Dim i As Integer, w As Integer
において定義されているではないかと。
実は、変数の有効な範囲(これをスコープといいます。)は、
その関数(VBAの場合には、プロシージャ)内に限定されているのです。

関数内に有効な範囲が限定されている変数を、
ローカル変数といいます。
そして、関数内で宣言した変数は、
すべてローカル変数となるのです。
Dim i As Integer, w As Integer
Private Sub CommandButton1_Click()  
  CommandButton2_Click '画面をクリア
  f1 'データ作成
     ・・・
のように冒頭で宣言すると、
グローバル変数といわれるものになり、
プログラム全体で有効な変数になり、
問題点は、解消されるのですが、
プログラミングにおいては、
基本は、関数内でしか有効でないローカル変数を用いるべきなのです。
理由は、2つあります。
@ 使用メモリの節約
A 関数(VBAの場合プロシージャ)の独立性の確保
の2つです。
@は、グローバル変数を使用してしまうと、
プログラムが実行されている間、
グローバル変数によって、
メモリが常に使われている状態になります。
もっと正確な言い方をしますと、
メモリがグローバル変数のために割り当てられていることになります。
しばらく、変数を使っていなかったとしても、
無駄にグローバル変数のために、メモリが割り当てられているのです。
それに対して、
ローカル変数は、関数の役割が終了すると共に、消滅します。
正確に言いますと、メモリが解放されます。
解放されたメモリは、他の変数などのメモリに使用することが出来ます。
グローバル変数は、プログラムが作動している間ずっとメモリを占有し続けます。
ローカル変数が1時的にメモリを借りているだけなのに対して、
グローバル変数はメモリを使い続けるのです。
ローカル変数は、必要なときだけ舞台に上がり、
役割を果たしたら、舞台から降ります。
それに対して、
演技のない時間帯も常に舞台に居続けるのがグローバル変数なのです。
グローバル変数は、1時的に舞台を借りるだけなのに、
グローバル変数は、ずっと舞台を使い続けるのです。
役目がなくても舞台の1カ所を使い続けるわけです。
ローカル変数は、舞台に上がったり降りたりします。
つまり、1時的にメモリ上に現れたり、消えたりします。
ローカル変数は、絶えず生成と消滅を繰り返しているのです。
生成消滅を繰り返す変数を動的変数といいます。
ローカル変数は、動的変数です。
消滅するということは、舞台から降りたときには、
前の記憶がなくなるということです。
ですから、前に舞台に上がったときに、
c = 5 等の代入をしたとしても、
次ぎに舞台に上がったときには、そのデータは消滅しているのです。
いよいよ話題はAに関連する話に進んできました。



第5話へ 第7話へ

004

eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
vc++講義へ
excel 2013 2010 2007 vba入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門へ第2部へ
小学生からエンジニアまでのRuby入門へ
小学生からエンジニアまでのC言語入門 基礎から応用まで
本サイトトップへ