第9講 プロシージャの学習
第1話 プロシージャとは?


このプロシージャの学習もとても大切な基礎事項です。
実は、基礎の中で最も重要かも知れませんので、
第3講あたりに持ってくることも検討したほどです。
実際に、今まで行ってきた各種のプログラミングにおいて、
一番最初に持ってきたものもあります。
初心者 のための VC++による C言語 入門 C++ 入門 サイト 基礎から応用まで
がその例です。
もっとも、VBやVBAのプロシージャに当たるものは、
C言語やC++では、関数といいます。
厳密に言うと違うのですが、
Javaでは、概ねプロシージャに相当するものはクラスと考えて良いでしょう。

プロシージャ、関数等とは何でしょうか。
関数というと顔をしかめる人もいらっしゃるかも知れませんが、
実は、内容はとても簡単です。
プロシージャやC言語の関数は、
プログラムの単位すなわち細胞です。
あるいは、プログラムのパーツ・部品です。
皆さんが一番最初に組んだプログラム
Private Sub CommandButton1_Click()
   Range("A6") = "VBAのプログラミング体験"
End Sub
Private Sub CommandButton2_Click()
   Range("A6") .Select
   Selection.ClearContents
   Range("A1").Select
End Sub
を例に挙げれば、
Private Sub CommandButton1_Click()
   Range("A6") = "VBAのプログラミング体験"
End Sub

Private Sub CommandButton2_Click()
   Range("A6") .Select
   Selection.ClearContents
   Range("A1").Select
End Sub
が、プロシージャです。
プログラム
Private Sub CommandButton1_Click()
   Range("A6") = "VBAのプログラミング体験"
End Sub
Private Sub CommandButton2_Click()
   Range("A6") .Select
   Selection.ClearContents
   Range("A1").Select
End Sub
は2つの細胞・単位から構成されていた訳です。
あるいは言い換えれば、2つのパーツ・部品から構成されていた訳です。

実は、ビル・ゲイツが開発したBASICには大きな欠陥がありました。
BASICにもサブルーチン(サブプログラム)という考え方がありましたが、
C言語の関数(細胞または部品)や
今のVBまたはVBAのプロシージャ(細胞または部品)とは、
決定的な違いがあります。
それは何かと申しますと、各サブルーチン(サブプログラム)が独立していなかったのです。
独立していないというのは、変数名が同じであると、
他のサブルーチン(サブプログラム)において値が書き換えられてしまうのです。

それに対して、VBやVBAのプロシージャにおいては、
変数名が同じでも書き換えられてしまう心配はないのです。
次の参考ファイルを開いてみてください。
参考ファイル
Private Sub CommandButton1_Click()
  Dim a As Byte
  a = 15
  Cells(5, 6) = "a="
  Cells(5, 7) = a
  CommandButton2_Click
  Cells(6, 1) = "Private Sub CommandButton2_Click()においてaに20を代入してからの再表示"
  Cells(7, 6) = "a="
  Cells(7, 7) = a
End Sub
Private Sub CommandButton2_Click()
  Dim a As Byte
  a = 20
End Sub
Private Sub CommandButton3_Click()
  Rows("5:200").Select
  Selection.ClearContents
  Range("A1").Select
End Sub
実行ボタンを押すと、
数独
このプログラムは、最初プロシージャPrivate Sub CommandButton1_Click()
においてaに15が代入されています。
次に、
  Cells(5, 6) = "a="
  Cells(5, 7) = a
によって値がG5に表示されます。
そして、CommandButton2_Clickによって、
Private Sub CommandButton1_Click()が、
Private Sub CommandButton2_Click()に業務を遂行するように命令しました。
Private Sub CommandButton2_Click()の業務はaに20を入れ直すことです。
Private Sub CommandButton2_Click()の業務遂行後、再び
  Cells(7, 6) = "a="
  Cells(7, 7) = a
によって、セルにaの値を表示させました。
ところが、aの値は20でなくて15です。
VBAの場合例え変数名が同じであっても、
他の部品・単位であるプロシージャによって値を書き換えられる心配がないのです。
これがプロシージャが独立しているという意味です。
つまり、各変数は
ナンプレ
それぞれのプロシージャ内でしか有効でないのです。
有効範囲がプロシージャに限定されていることが、独立の意味です。

では、独立であることにどんなメリットがあるのでしょうか。
また、独立でないとどんな不都合があるのでしょうか。








第8講第10話へ 第2話


トップ

初心者のためのc++ vc++ c言語 入門 基礎から応用までへ
初心者のための excel 2007 2010 2013 vba マクロ 入門 基礎から応用まで
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
vb講義トップへ
VB講義基礎へ
専門用語なしのC++入門へ
専門用語なしのJava入門へ
専門用語なしのVBA入門

数独のページ
魔方陣のページ
数学研究室に戻る
本サイトトップへ