ステートメントと関数の違いは書き方が違う

VBAでは記述の仕方でステートメントと呼ぶ場合と関数と呼ぶ場合に分かれるものがあります。

例えばFileCopyステートメントとFileCopy関数などです。

構文が以下のように異なります。

ステートメント
FileCopy Source, Destination

関数
Sub FileCopy(Source As String, Destination As String)

実際はどちらもファイルのコピーを行うという同じことをやっているので、どちらで書いても構いません。

ステートメントと関数の厳密な違い

上記の通り、ステートメントも関数もやってることは同じなので、好きな方を書けばOKなんですが、言葉の定義としての「ステートメント」と「関数」の違いはあります。

ステートメントとは

ステートメントとは処理の最小単位のことを指し、1行で記述する処理単位のことを言います。その1行で処理が完結している状態です。

1行が長くなりアンダーバーで改行している場合も1行の場合と同様に1つのステートメントとみなします。

ステートメントは関数と異なり、値を返すことはありません。「処理行」と言った方がイメージしやすいかもしれません。

以下のプロシージャ内の全ての行(2行目から6行目)はそれぞれが1つのステートメントになります。

5行目はFileCopyステートメントを使っています。

6行目はCallステートメントを使ってFileCopy関数を利用しています。

関数とは

関数とはなんらかの一連の処理を代わりに行ってくれる機能です。

Functionプロシージャの場合は値を返しますが、Subプロシージャの場合は値を返しません。

そのため関数の場合は2通りの書き方になります。戻り値をもらう場合とそうでない場合です。