プロシージャ

概要

プロシージャとは特定の機能を実現するための命令群のことです。
命令とは「MsgBox Cells(1,1).Value」のような一文を指します。
このような命令文が集まって1つの機能が実装されます。
vba_0008

プロシージャはマクロとして使用することも、この後説明する
「Sub」や「Function」から別のプロシージャを呼び出すことが可能です。
※他の言語を知っている方は「プロシージャ = 関数」と
 考えていただくと分かりやすいと思います。
vba_0009

Sub

Subプロシージャは呼び出し側に情報を返さないプロシージャです。
このプロシージャのみで処理を完結させたい時はSubを使用します。

Subの書式
書式例 具体例
Sub プロシージャ名(引数)

End Sub
Sub Test()

End Sub

呼び出し方法

他のプロシージャから呼び出す場合、プロシージャ名のみで呼び出す方法Callステートメントを使用して呼び出す方法があります。
以下はプロシージャのみで呼び出している例です。

具体例

Sub Test()
	' プロシージャ呼び出し
	Test2
	MsgBox Cells(1,1).Value
End Sub

Sub Test2()
	Cells(1, 1).Value = 100
End Sub

実行結果
100と書かれたメッセージボックスが表示される

Callステートメント

Callステートメントはプロシージャの前に指定することで意味を有効となります。

具体例

Sub Test()
	' Callによるプロシージャ呼び出し
	Call Test2
	MsgBox Cells(1,1).Value
End Sub

Sub Test2()
	Cells(1, 1).Value = 100
End Sub
実行結果
100と書かれたメッセージボックスが表示される

Callステートメント使用理由

プロシージャ名のみでも呼び出しが可能なのに
Callステートメントを使用する理由は「コードの可読性向上」です。
引数無しのプロシージャ呼び出しは()が必要ないので、
変数としての見分けがつきません。
VBAのコードに慣れている人はすぐに分かりますが、
慣れてない人は混乱するかもしれません。
「Call プロシージャ名」を使用することで
誰でもプロシージャを呼び出していることが分かるようにしています。
ステートメント
ステートメントとは「」や「命令文」という意味
Callステートメントとは「Call文」ということ

Function

FunctionプロシージャはSubプロシージャとは異なり、
呼び出し側に実行結果を返すことができます。
FunctionプロシージャはExcelから起動する際、
マクロの一覧に表示されないので注意して下さい。
※Functionプロシージャ名を指定したら起動可能です。

Functionの書式
書式例 具体例
Function プロシージャ名(引数) As 戻り値のデータ型
    プロシージャ名 = 実行結果
End Function
Function GetMyName() As String
    GetMyName = "山田太郎"
End Sub

呼び出し方法

呼び出し方法はSubと同じで使用したい場所でFunction名を書きます。
SubではCallを付けることができましたが、Functionではつけません。
Functionが実行されるとFunctionの結果が返ってくるので、
その情報を保持したい場合は変数に代入します。

Sub Test()
	' Function呼び出し
	Cells(1,1).Value = GetMyName
	MsgBox Cells(1, 1).Value
End Sub

Function GetMyName() As String
	' 戻り値の指定
	GetMyName = "山田太郎"
End Function

実行結果
山田太郎と書かれたメッセージボックスが表示される

実行結果(戻り値)について

Function~End Functionの間に必要な命令を書きます。
実行結果はプロシージャ名が結果を格納するための変数として扱われるので
プロシージャ名にFunctionの結果を代入します。

Function GetMyName() As String
	' 戻り値の指定
	GetMyName = "山田太郎"
End Function