横浜国立大学理工学部建築都市環境系学科卒
一級鉄筋技能士
VBAのプログラムには関数が非常に多く登場します。
関数は正式にはプロシージャと呼ばれており、FunctionとSubの形で1つのまとまりになっています。
この記事では、良く使われる「配列」と「繰り返し処理」を踏まえてプロシージャについて解説していきます。
目次
プロシージャについて
多くの方は何かしらのVBAの資格をとる必要がない限り、厳密な定義は覚える必要はありません。
プロシージャとは、「処理をまとめたもの」とイメージして実際にコードを動かすことを重要視していきましょう。
再利用がしやすい・可読性・バグを少なくするメリットがある
VBAのコードをまとめることで得られるメリットとして、大きく3つのメリットがあります。
1.再利用がしやすい、2.可読性が良くなる、3.バグを少なくする、の3つです。
具体的なメリットは実際にコードを書いて体験すると良いと思います。
プロシージャは関数と同義で2種類ある
プロシージャは、「処理をまとめたもの」なので「関数」とほぼ同義として説明されることもあります。
プロシージャにはFunctionとSubの2種類の形があります。
結果を返り値として返す場合はFunction
結果を返り値として返す場合はFunctionの形を取ります。
1 2 3 4 |
Function プロシージャ名(引数) As 型名 処理 関数名=返り値 End Function |
返り値を返さないものはSub
一方で、結果を返り値として返さない場合はSubの形を取ります。
1 2 3 |
Sub プロシージャ名(引数) 処理 End Sub |
例:BMIの計算をプロシージャを使って表示してみよう
例として、BMIの計算をSubとFunctionを使って表示してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Sub sub_test() ' 身長(cm)と体重(kg)を設定 height = 170 weight = 70 Dim result As Double result = calcBMI(170, 70) MsgBox result End Sub Function calcBMI(height As Double, weight As Double) As Double 'Dim変数名 As 型名で変数を宣言 Dim bmi As Double bmi = weight / ((height / 100) ^ 2) calcBMI = bmi End Function |
配列と繰り返し処理の組み合わせ
配列の書き方は以下のコードのようになります。
1 |
Dim 配列名(n) As 型名 |
配列(10)の場合は
0 1 2 3 4 5 6 7 8 9 10
と指定した数+1個の変数が入る箱が用意されるので
合計で11個のデータになる
大量のデータを処理する場合は配列と繰り返し処理を組み合わせる
データを扱う場合は数百行、数千行のデータを取り扱う場合があります。
そのような場合、このようにデータを1つずつ用意することは非常に非効率です。
1 2 3 4 5 6 7 8 9 10 |
Sub Array_test() Dim data1 As Integer Dim data2 As Integer Dim data3 As Integer Dim data4 As Integer .... Dim data1000 As Integer End Sub |
大量のデータを扱う際は、配列と繰り返し処理の組み合わせに慣れる必要があります。
プロシージャを利用しながら配列を使ってみます。
1 2 3 4 5 6 7 8 9 10 |
Sub Array_test() Dim datas(10) As Integer Dim i As Integer For i = 0 To 10 datas(i) = i * 2 Next i End Sub |
ウォッチ式の使い方はこちらを参考に
まとめ
この記事では、「配列」と「繰り返し処理」を踏まえてプロシージャについて解説しました。
慣れないと「Dimって何だっけ?」「ウォッチ式ってなんだっけ?」となって手間が増えがちですが、ポイントだけ抑えてゆっくり学習していきましょう。