オーロラさんの勉強帳

33歳、未経験からIT業界へ。SESのロースキル客先常駐勤務。データベース、Excel、Excel VBA、ネットワーク、LinuxなどIT関連のことを主に書いていきます。

VBA再入門 3 プロシージャ

 

プロシージャの種類

プロシージャには次の3種類があります。

  • Subプロシージャ:値(結果)を返さないプロシージャ
  • Functionプロシージャ: 値(結果)を返すプロシージャ
  • Propertyプロシージャ:クラスモジュールで使用されるプロシージャ。ここでの解説は省きます。 

ここで重要なのは、Subプロシージャが値を返さない、Functionプロシージャが値を返すプロシージャであることです。
Functionプロシージャには、処理につかう値を引数として渡すことができます。

 

Functionプロシージャの例

Sub toilet()
 Dim gender As String
 gender = InputBox("あなたの性別を「男性」か「女性」で入力してください", "性別の入力", "男性")

 If gender = "男性" Or gender = "女性" Then
  MsgBox トイレの案内(gender)
 Else
  MsgBox "男性か女性で入力してください"
  Exit Sub
 End If
End Sub

 

Function トイレの案内(gender As String)

 If gender = "男性" Then
 トイレの案内 = "男性用トイレは2F、4Fの階段の横にございます。"
  Else
 トイレの案内 = "女性用トイレは1F、3F、4Fの階の段横にございます。"
 End If

End Function

 

処理としては、

1.Subプロシージャ:画面で男性もしくは女性を入力させて、変数genderに代入させる

2.Subプロシージャ:男性もしくは女性を入力した場合は、変数genderを引数としてFunctionプロシージャ「トイレの案内」に渡す

 男性・女性以外を入力された場合は、Exit Subで処理を抜ける

3.Functionプロシージャ:genderの値が男性か女性かによって、トイレの案内が返す文字列を決める

4.Subプロシージャ:Functionプロシージャから返ってきた文字列をMsgBoxで表示する

 

Callステートメント:別のSubプロシージャの呼び出し

別のSubプロシージャを呼び出すためには、Call プロシージャ名で指定します。

 

Sub tax()

 Call dataInput
 Dim num As Long
 num = 1
 Do While Cells(num, 1) <> ""
  Cells(num, 2) = Cells(num, 1) * 1.1
  num = num + 1
 Loop
End Sub

 

Sub dataInput()
 Dim i As Long
 For i = 1 To 10
  Cells(i, 1) = i
 Next i

End Sub

 

Sub taxプロシージャを実行すると、最初にCallによってdataInputプロシージャを呼び出されます。

 

Callステートメントを使わずに、Subプロシージャ名のdataInputのみを記述しても呼び出しはできますが、Subプロシージャを呼び出していることを明示的にするためにもCallステートメントを使います。

 

Subプロシージャを呼び出すときは、Callステートメントを使う。

※Callを使わなくても呼び出しはできるが、明示的にSubプロシージャを呼び出していることを分かりやすくするために、Callステートメントを記述する。