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

第8話 プロシージャの独立性
皆さん、次のマクロを組んで下さい。
Private Sub CommandButton1_Click()

  Dim a As Integer 'aは整数を入れる整数
  a = 10      'aは整数を入れる整数
  Cells(4, 1) = a
  f
  Cells(5, 1) = a
  
End Sub
Sub f()
  a = 25
End Sub
Private Sub CommandButton2_Click()
  
  Rows("4:2000").Select
  Selection.ClearContents
  Cells(1, 1).Select
  
End Sub
実行ボタンを押すと、
f
fで
  a = 25
としたのにaの値が10から書き換わっていないことが分かります。
変数名が同じでもローカル変数ですから、
有効なのはCommandButton1_Click内のみなのです。
本当は、
Sub f()
  a = 25
End Sub

Sub f()
  Dim a As Integer
  a = 25
End Sub
としなければなりません。
エラーしなかったのはVBAだからです。
VBAの場合宣言しないと、
自動的にバリアント型の変数とVBAの方で宣言してしまうのです。
Sub f1()

  For i = 3 To 5
   Cells(5, i) = Int(101 * Rnd)
  Next
  For i = 3 To 5
    ・・・
の問題は、変数iの宣言をしていないことです。
そのために、iがもっとも大きなメモリを必要とする
万能型のバリアント型変数になってしまっています。
他の言語系なら、変数の宣言=定義を行っていないわけですから、
エラーしてしまいます。

さて、
Private Sub CommandButton1_Click()

  Dim a As Integer 'aは整数を入れる整数
  a = 10      'aは整数を入れる整数
  Cells(4, 1) = a
  f
  Cells(5, 1) = a
  
End Sub
Sub f()
  Dim a As Integer
  a = 25
End Sub
(ダウンロード添付ファイル
に戻りましょう。
b
CommandButton1_Clickのaは赤い括弧の範囲内のみで有効ですし、
fのaは青の括弧内のみで有効です。
ですから、変数名が同じでもCommandButton1_Clickのaが、
プロシージャfで書き換えられてしまう心配はないのです。
これが関数の独立性です。
他の関数から独立しているのです。
変数の値が書き換えられてしまう心配がないということは、
プログラマーは関数の使い方だけを知っていればよくて、
関数の中身=コード内容を一切知らないで済むということになります。
電卓の仕組みを理解していなくても電卓が使えるのと同じです。
中身を知らなくてプログラムできるので、
抽象化と呼ぶわけですが、
私は「ケースに覆われて中身が見えなくなった部品」といいたいと思います。
電卓もケースに覆われていて中身が見えないですね。
もっとも、コードですから見ようと思えば見ることが出来ますので、
あくまで比喩でいっているのです。
部品の使い方を知っていれば、
中身は見なくて済むのです。
いちいちプログラムコードを読まなくて済むのは大変ありがたいことです。
プログラムによっては、
何万行、何十万行もあるものもあります。
炊飯器に内蔵されているマイコンのプログラムでさえ、
ロール紙に書いていったら、
数キロのロール紙になってしまうでしょう。
中身を知らないで、組み込んでプログラミングすること
これが構造化プログラミングです。
中国や韓国などの電気産業が伸びてきたのは、
これと同じで部品の仕組みを知らなくても、
プラモデルのように単純に組み立てればよい・・・
ということが理由なのです。

さて、第4話のコード添付ファイル
の問題点が分かったはずです。
CommandButton1_Clickには、不要な1行
  Dim i As Integer, w As Integer
があるし、関数f2から関数f8までには必要な1行
  Dim i As Integer, w As Integer
がないということなのです。関数f1にも
  Dim i As Integer
は必要です。
では皆さん第4話のコード添付ファイルを開いて問題を解消して下さい。

さて、サブプロシージャについては、
まだ説明しなければならないことがあります。
それは引数についてです。


第7話へ 第9話へ

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言語入門 基礎から応用まで
本サイトトップへ