【技術記事】最短最速で学ぶ!Excel VBA入門 – 第5回:関数とプロシージャ –

皆さん、こんにちは
みむすたーです。

今日も昨日に引き続き、Excel VBAについて説明していきます。
今日は、VBAの関数とプロシージャについてです。

もくじ

関数とプロシージャとは

関数とプロシージャと2つに分けましたが、その意味合いはほとんど同じです。
違いについては、後述する関数とプロシージャの違いの欄でお話しします。

プログラミングでいう関数とは、ひとことで言うと処理のかたまりのことです。
また、プログラマーは処理のかたまりを関数として定義し、処理の名前をつけることができます。

例えば、カップラーメンの作り方を関数で例えてみましょう。
一般的にカップラーメンは、以下のように作ります。
 1. カップラーメンの蓋を開ける
 2. かやくを入れる
 3. お湯を入れる
 4. 3分間待つ
 5. 蓋を開ける
と言うような感じでしょうか。

これを毎回、二度、三度と毎回コードに書くのは面倒です。
そのため、効率的にプログラムを書くために、この1〜5の一連の処理を関数として定義してしまい、
関数を使ってこの5つの処理を1ステップで、書くことを考えます。

次の関数の定義、プロシージャの定義で書きます。

関数の定義

関数はVBAでは以下のように書きます。

[text]Function 関数名(引数) As 戻り値の型名、もしくは、オブジェクト名 ‘処理のかたまり 関数名 = 戻り値 End Function[/text]

例えば、先ほどのカップラーメンの作り方の例のようにプログラムを書くとすると、
以下のようになります。

Function カップラーメンを作る()
 ’1. カップラーメンの蓋を開ける
 ’2. かやくを入れる
 ’3. お湯を入れる
 ’4. 3分間待つ
 ’5. 蓋を開ける
End Function

ここで、一つもう少しこの関数を便利にできないかと考えます。

例えば、先ほどのカップラーメンの作り方ではお湯を入れた後、3分待つとしていましたが、
カップラーメンによっては、5分まつ必要があったりと、商品によってばらつきがあります。

そんな時、引数を使います。
先ほどのFunction カップラーメンを作る()の関数を変更してみましょう。

Function カップラーメンを作る(X As Integer)
 ’1. カップラーメンの蓋を開ける
 ’2. かやくを入れる
 ’3. お湯を入れる
 ’4. X分間待つ
 ’5. 蓋を開ける
End Function

こうすることでカップラーメンを作る関数の中の何分待つかと言う処理のところで、
毎回関数を定義し直す必要がなくなります。

また、カップラーメンを作ることに成功したか、失敗したかと言う結果を表すこともできます。
カップラーメンの例でいうと、以下の通りです。

Function カップラーメンを作る(X As Integer) As Boolean
 ’1. カップラーメンの蓋を開ける
 ’2. かやくを入れる
 ’3. お湯を入れる
 ’4. X分間待つ
 ’5. 蓋を開ける
カップラーメンを作る = 戻り値
End Function

ここで少し注意が必要なのが、関数名 = 戻り値の部分です。
他のプログラミング言語を学んだことがある人は、混乱すると思います。
VBAの場合は、return文ではなく、関数名 = で return文の代わりをしています。

定義した関数の使い方

以下のようにして、関数を使います。

[text]Dim value As 戻り値の型名 value = 関数名(引数)[/text]

このように関数を使用することで、valueには関数が返した戻り値を取得することができます。

プロシージャの定義

プロシージャはVBAでは、以下のように書きます。

[text]Sub 関数名(引数) ‘処理のかたまり End Sub[/text]

定義したプロシージャの使い方

以下のようにして、関数を使います。

[text]関数名(引数) ‘もしくは、 Call 関数名 引数[/text]

関数とプロシージャの違い

他の言語を学んだことがある人には、少し違和感がありそうですが、
VBAの場合は、2種類の処理のまとめ方が存在します。
それが関数とプロシージャです。

ここまでの説明で、お気づきかもしれませんが、
異なる点は二つあります。

①戻り値が設定できる、できないの違い
 →関数は設定できる。プロシージャは、設定できない。

②使い方が異なる
 →関数は、関数名(引数)という形のみで、
  プロシージャは、Callという文を使い、Call 関数名 引数 と書く場合がある。

まとめ

最後にまとめておくと、
 ①関数は同じプログラムを二度三度書くときに、手間を減らすために、
  再利用可能にするための仕組みのことである。
 ②VBAの場合は、他のプログラミング言語とは違い、
  Sub と Function の2種類の処理のまとめ方がある。

コメント