第7講 結果を報告しない社員

第6話 全社員共有の箱

前話解答例
Dim w As Long, i As Byte
Private Sub CommandButton1_Click()
  wa
  seki
End Sub
Private Sub CommandButton2_Click()
  Rows("6:200").Select
  Selection.ClearContents
  Cells(1, 1).Select
End Sub
Sub wa()
  w = 0
  For i = 1 To 10
    w = w + i
  Next
  Cells(6, 1) = "1から10までの和"
  Cells(6, 3) = w
End Sub
Sub seki()
  w = 1
  For i = 1 To 10
    w = w * i
  Next
  Cells(7, 1) = "1から10までの積"
  Cells(7, 3) = w
End Sub
2013


グローバル変数を使っても課題を解決できました。
ですが、グローバル変数はなるべく使わないようにした方がよいのです。
理由は2つあります。
そのうちの1つは、皆さんもおわかりのはずです。
答えは、例によって30行下。

































答え
① せっかくVisual Basicになって構造化プログラムが組めるようになったのに、
  グローバル変数を使ったのでは、スパゲティプログラムになってしまう可能性がある。
② メモリー節約の観点からもグローバル変数はよろしくない。

メモリーの節約???
なにそれ???
ですよね。
後で『常にある箱(スタティック変数=静的変数)』と『そのときにしかない箱(動的変数)』を学習するときに、
もう一度説明しますが、
実は、ローカル変数は『そのときにしかない箱(動的変数)』です。
そのときにしかない???
これも謎ですね。
そのときというのは、社員が呼び出されて働いているときです。
実は、社員と呼んでいますが、社員は呼び出される(コールされる)まで
この世に存在していないのです。
社員waは

Dim w As Long, i As Byte
Private Sub CommandButton1_Click()
  
wa
  seki
End Sub
実際上の社長CommandButton1から呼び出されるまで、
この世にいないのです。
コールされてはじめてこの世に生まれて、
働き出します。
そして、仕事が終わってしまうとまたこの世から消滅してしまうのです。
それは実際上の社長CommandButton1も同じです。
実際上の社長CommandButton1は、いつ呼び出されるかと申しますと、
エクセルの実行ボタンを押された時点です。
実際上の社長CommandButton1も任務が終了すると、この世から消える運命にあります。
さて、比喩でこの世に生まれる、この世から消滅するといっていますが、
実際には『この世』とは何ですか。
それは、コンピュータのメモリーです。
各社員は、実際上の社長CommandButton1も含めて呼び出されたときだけ、
コンピュータのメモリー上に登場するのです。
コンピュータのメモリーに常駐しているソフト(ウィルス監視ソフトなど)もありますが、
一般的にソフトは、起動したときのみコンピュータのメモリー上に存在して活躍します。
メモリーはプログラムやソフトが働く場です。
メモリーは、データを記憶するだけでなく、プログラムが働く場を提供するのです。
プログラムやソフトは、メモリーという舞台がないと踊ることはできません。

さて、問題です。2つのプログラム
Private Sub CommandButton1_Click()
  wa
  seki
End Sub
Private Sub CommandButton2_Click()
  Rows("6:200").Select
  Selection.ClearContents
  Cells(1, 1).Select
End Sub
Sub wa()
  Dim w As Long, i As Byte
  w = 0
  For i = 1 To 10
    w = w + i
  Next
  Cells(6, 1) = "1から10までの和"
  Cells(6, 3) = w
End Sub
Sub seki()
  Dim w As Long, i As Byte
  w = 1
  For i = 1 To 10
    w = w * i
  Next
  Cells(7, 1) = "1から10までの積"
  Cells(7, 3) = w
End Sub

Dim w As Long, i As Byte
Private Sub CommandButton1_Click()
  wa
  seki
End Sub
Private Sub CommandButton2_Click()
  Rows("6:200").Select
  Selection.ClearContents
  Cells(1, 1).Select
End Sub
Sub wa()
  w = 0
  For i = 1 To 10
    w = w + i
  Next
  Cells(6, 1) = "1から10までの和"
  Cells(6, 3) = w
End Sub
Sub seki()
  w = 1
  For i = 1 To 10
    w = w * i
  Next
  Cells(7, 1) = "1から10までの積"
  Cells(7, 3) = w
End Sub
におけるそれぞれの箱の存在時間(メモリー上にある時間)を考えてみてください。



第5話へ 第7話へ

トップ

vc++講義へ

初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
vb講義へ
VB講義基礎へ
初心者のためのJava 入門 基礎から応用まで
数学研究室に戻る