第7講 結果を報告しない社員
第2話 社員の種類

前話で、理論上はVBAは全員が社員からなる会社ですが、
実際上は
CommandButton1などが社長
であるという話をしました。
ところで、第7講の表題は結果を報告しない社員となっています。
これはどういう意味でしょうか。
実は、実際上の社長または社員の命令で動く社員は2種類いるのです。
1つは、命じられた仕事のみを遂行して結果を上司に報告しない社員と、
結果を社長などの上司に報告する社員です。
専門用語上は、に結果を報告しない社員とは、Subプロシージャですし、
結果を報告する社員とは、Functionプロシージャです。
社員Functionプロシージャに与えられる仕事は、
現状を分析して結果を報告することです。
社員Functionプロシージャは情報屋です。
それに対して、社員Subプロシージャは情報収集しての報告でなく、
仕事のみ遂行を求められます。
敵情を視察して情報を報告するのが社員Functionプロシージャの仕事ですし、
子分Subプロシージャは、『暗殺』などの仕事を実行するわけです。
普通なら、成功したかどうか報告するでしょうが、
VBAの社員Subプロシージャは、仕事の遂行のみが求められ、
結果の報告は求められないのです。
では、社員Functionプロシージャは誰に報告するのでしょうか。
社長や上司にです。つまり、部下が上司に報告するのです。
とっても、前に述べたとおりVBAの世界では社員は上下関係のない対等な関係ですから、
上司・部下というのは正確な表現ではありません。
正しくいうならば、仕事を依頼した人に報告するのです。



第7講は、仕事の遂行のみが求められ情報を返さないSubプロシージャを主題とします。

では、情報を返さない社員を作ってみましょう。
いくなり複雑なプログラミングでは、
混乱しますので、
次のような単純なマクロにしましょう。
Private Sub CommandButton1_Click()
  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

  
  w = 1
  For i = 1 To 10
    w = w * i
  Next
  Cells(7, 1) = "1から10までの積"
  Cells(7, 3) = w

    
End Sub
Private Sub CommandButton2_Click()
  Rows("6:200").Select
  Selection.ClearContents
  Cells(1, 1).Select
End Sub
入門
このプログラムには、2つの仕事があります。
そこで、その仕事を部下(子分)にやらせることにしましょう。
和を担当する方の子分の名前をwaとし、積を担当する子分の名前をsekiとすることにしましょう。
子分waを作るには、
初心者
赤い枠の外側で、
java
sub waと打ちエンターします。
すると自動的に、
c++
となります。
Sub wa()

End Sub
の部分が新たに作られた子分waです。
同様にして、子分sekiも作ります。
vc++

さらに、
  w = 0
  For i = 1 To 10
    w = w + i
  Next
  Cells(6, 1) = "1から10までの和"
  Cells(6, 3) = w

  
  w = 1
  For i = 1 To 10
    w = w * i
  Next
  Cells(7, 1) = "1から10までの積"
  Cells(7, 3) = w
の部分をカット&ペーストで移動して、次のようにします。
Private Sub CommandButton1_Click()
  Dim w As Long, i As Byte


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

次に、
Private Sub CommandButton1_Click()
  Dim w As Long, i As Byte


End Sub
の部分に
Private Sub CommandButton1_Click()
  Dim w As Long, i As Byte
  wa
  seki

End Sub
と打ち込みます。
基礎
これでエクセルに戻り、実行ボタンを押すと、
2013
成功?
確かに結果は出ました。

実は問題がある
(C++やJavaなど一般のプログラム言語では、同様なプログラムを書くとエラーします。)
のですが、一応は成功です。
つまり、部下(子分)に仕事を命じるには、部下の名前をコールすれば(呼べば)よいのです。
名前をコールするということで正式には、
Private Sub CommandButton1_Click()
  Dim w As Long, i As Byte
  wa
  seki
End Sub

Private Sub CommandButton1_Click()
  Dim w As Long, i As Byte
  Call wa
  Call seki
End Sub
ですが、Callは省略することができます。
部下の名前をいうだけで、部下は何も言わずに働いてくれるのです。
ところで、問題があると先に書きましたが、
何が問題なのでしょうか。



第1話へ 第3話へ

トップ

vc++講義へ

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