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

第10話 引数の名称
Private Sub CommandButton1_Click()

  Dim a As Integer, b As Byte 'aは整数を入れる整数 bはByte型の変数
  a = 10      'aは整数を入れる整数
  b = 5
  Cells(4, 1) = a
  Cells(4, 2) = b
  Private Sub CommandButton1_Click()

  Dim a As Integer, b As Byte 'aは整数を入れる整数 bはByte型の変数
  a = 10      'aは整数を入れる整数
  b = 5
  Cells(4, 1) = a
  Cells(4, 2) = b
  
Call f(a, b)
    
End Sub
Sub f(a As Integer, b As Byte)
  Cells(5, 1) = a
  Cells(5, 2) = b
End Sub
Private Sub CommandButton2_Click()
  
  Rows("4:2000").Select
  Selection.ClearContents
  Cells(1, 1).Select
  
End Sub
のコードを次のように変更したら、
Private Sub CommandButton1_Click()

  Dim a As Integer, b As Byte 'aは整数を入れる整数 bはByte型の変数
  a = 10      'aは整数を入れる整数
  b = 5
  Cells(4, 1) = a
  Cells(4, 2) = b
  
Call f(a, b)
    
End Sub
Sub f(
x As Integer, y As Byte)
  Cells(5, 1) = x
  Cells(5, 2) = y
End Sub
どうなるでしょうか。
なんと、実行結果は同じです。
poi

また、
Private Sub CommandButton1_Click()

  Dim a As Integer, b As Byte 'aは整数を入れる整数 bはByte型の変数
  a = 10      'aは整数を入れる整数
  b = 5
  Cells(4, 1) = a
  Cells(4, 2) = b
  
Call f(a, b)
    
End Sub
Sub f(
x As Integer, y As Byte)
  Cells(5, 1) = a
  Cells(5, 2) = b
End Sub
と変更すると、
実行画面は、
mnb
となってしまいます。
これはどういうわけなのでしょうか。

後者の方は、お分かりですね。
VBAですから、aとbは自動的にバリアント型の変数として定義されてしまいます。
ですが、その変数aとbについては、何もしてません。
ですから、箱は用意されましたが、
箱に何も入れていませんから、中は空っぽなのです。
ですから、
  Cells(5, 1) = a
  Cells(5, 2) = b
によって、何も表示されなかったのです。

前者は
v
ということなのです。

さらに、次のように変更しましょう。
Private Sub CommandButton1_Click()

  Dim a As Integer, b As Byte 'aは整数を入れる整数 bはByte型の変数
  a = 10      'aは整数を入れる整数
  b = 5
  Cells(4, 1) = a
  Cells(4, 2) = b
  f a, b
  Cells(5, 1) = a
  Cells(5, 2) = b
    
End Sub
Sub f(x As Integer, y As Byte)
  x = 8
  y = 2
End Sub
実行画面
x
これから分かることは、
aという箱とbという箱をプロシージャfに渡しましたが、
fでは、その箱の名前をxとyとして扱っていただけだということです。
fの中ではxとyの名前の箱ですが、
実体はaという箱であり、bという箱です。
そして、aという箱とbという箱の中身を取り替えたわけです。
同じものが、場所によって呼び方が違うのは普通のことです。
家では「お父さん」と呼ばれても会社では「部長」だったりしますよね。
私の場合は家では「お父さん」ですが、学校では「先生」です。



尚、箱を渡したという言い方はあくまで比喩的な言い方で、
変数aのアドレスを渡したが正確な言い方です。
変数aを用意するとは、a用のメモリを割り当てるということです。
そして、メモリにはアドレス=住所(番地)があるのです。
aの値を収納しているメモリの場所を
CommandButton1_Clickがfに教えて、
そのメモリに入っている内容をfが書き換えたわけです。
箱の住所=在処をプロシージャfに教えて、
fが箱の中身を取り替えたということです。

引数についてはまだ説明しなければならないことがあるのですが、
次講で説明する機会があると思いますので、
以上で第5講サブプロシージャは終わりにします。
第6講ではもうひとつのプロシージャであるファンクションプロシージャをテーマとします。
第6講を読むと、
C言語などでは、部品=パーツのことをどうして関数と呼ぶのかが分かります。
今まで数学の関数とは違うと説明してきましたが、
実は関係があるのです。
そして、関数が苦手だった方もファンクションプロシージャを学習することによって、
苦手意識を克服できると思います。
関数がとても面白いものであることが分かるからです。
関数はとてもとても興味深いものなんですよ。
現代哲学の主流の1つである分析哲学は、
数学の関数の考え方から強く影響を受けているのです。
関数の考え方が、分析哲学の中核であると言ってもよいほどなのです。

第9話へ 第6講第1話へ

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