教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA 基本操作】プロシージャ(Sub・Function)の使い方を教えて!

f:id:m_kbou:20200418101528p:plain

プロシージャとは、VBAの命令文を1つにまとめたものです。VBAコードは1行ごとに命令文を記述して実行しますが、通常のマクロでは複数の命令文を記述して纒めて実行します。その様に纏められた命令文がプロシージャとなります。プロシージャには、SubプロシージャとFunctionプロシージャの2種類があります。それらのプロシージャの使い方について紹介します。

 

 

構文

記述方法は以下の通りとなります。

(1)Subプロシージャの記述方法

Sub [プロシージャ名]()
  [処理内容]
End Sub

[説明]:

記述方法は「Sub()」で始まり「End Sub」で終わる様に記述します。[プロシージャ名]にはプロシージャの名前を記述します。名前はローマ字以外にも漢字や数字、記号等を使用する事ができます。また、[処理内容]には実際に実行するプログラムを記述します。

[記述例]:

Sub サンプル()
  MsgBox "はじめまして。", 64, "メッセージ"
End Sub

(2)Functionプロシージャの記述方法

Function [プロシージャ名]([引数])
  [処理内容]
End Function

[説明]:

記述方法は「Function()」で始まり「End Function」で終わる様に記述します。[プロシージャ名]にはプロシージャの名前を記述します。名前はローマ字以外にも漢字や数字、記号等を使用する事ができます。[処理内容]には実際に実行するプログラムを記述します。また、[引数]には変数を指定し、この変数値を使用して[処理内容]の処理を実行します。[引数]は複数指定する事ができ、複数指定する場合は引数と引数の間を「,」(カンマ)で区切ります。Subプロシージャとの大きな違いは、Functionプロシージャは自分で作成した関数と理解して下さい。具体的な使い方は以下で説明しますが、Subプロシージャから呼び出して使用する関数との理解で十分です。

[記述例]:

Function 計算結果(数値1, 数値2)
  計算結果 = 数値1 * 数値2
End Function

 

使い方

使い方について具体的に説明していきます。

Subプロシージャの使い方

Subプロシージャの使い方について説明します。

[プログラミング例]:

Sub サンプル()
  MsgBox "おはようございます。",64,"メッセージ"
End Sub

内容は、サンプルと言う名前のSubプロシージャで、「”おはようございます。”をMsgBoxで表示して下さい。」との内容になります。

f:id:m_kbou:20210208083715p:plain

※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。

[実行例]:

①<実行>ボタンには上記のプログラミング例のプログラムが登録されています。この<実行>ボタンをクリックします。(※ボタンにプログラムを割り当てるにはこちらを参考にして下さい。)

f:id:m_kbou:20210224160059p:plain

②結果は以下の様に表示されます。MsgBoxで「おはようございます。」が表示されます。

f:id:m_kbou:20190531081601p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

Subプロシージャの使い方についての説明は以上です。

 

Functionプロシージャの使い方

Functionプロシージャの使い方について説明します。

[プログラミング例]:

'*------------------------*
'* Subプロシージャ
'*------------------------*
Sub サンプル()
  MsgBox 計算結果(1, 2)
End Sub

'*------------------------*
'* Functionプロシージャ
'*------------------------*
Function 計算結果(数値1, 数値2)
  計算結果 = 数値1 * 数値2
End Function

今回はサンプルと言う名前のSubプロシージャを実行する事を前提に説明します。サンプルプロシージャを実行すると、計算結果と言う名前のFunctionプロシージャを呼び出します。その際、値を2つ渡します。1つ目は「1」、2つ目は「2」の値を渡します。計算結果プロシージャではそれぞれの値を「数値1」及び「数値2」で引数として受け取り、処理を実行します。処理内容は「数値1 * 数値2」となるため、計算は「1 * 2」となります。その結果が「計算結果」に返されるため、計算結果プロシージャの戻り値は「2」となります。この「2」をサンプルプロシージャに戻す事で「2」がMsgBoxで表示されます。

f:id:m_kbou:20210208083903p:plain

※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。

[実行例]:

①<実行>ボタンには上記のプログラミング例のプログラムが登録されています。この<実行>ボタンをクリックします。(※ボタンにプログラムを割り当てるにはこちらを参考にして下さい。)

f:id:m_kbou:20210224160548p:plain

②結果は以下の様に表示されます。MsgBoxで「2」が表示されます。

f:id:m_kbou:20190531081614p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

Functionプロシージャの使い方についての説明は以上です。

 

おわりに

VBAのプログラミングでは、プロシージャ内にプログラム記述をするため、2つのプロシージャの使い分けを理解する事が必須となります。また、プロシージャが無いと記述したプログラムも実行する事ができません。まずは、SubプロシージャとFunctionプロシージャの違いを十分に理解し、適切な使い方ができるようにして下さい。