【Excel-VBA】Public SubとPublic Functionの違いとは

2020年3月4日

Execel VBAのプログラミングで利用するPublic SubとPublic Function。

ユーザー
ユーザー
Public SubとPublic Functionって何が違うんだろう?

 

今回は、そんな悩みについて、わかりやすく解説していきましょう。

Public Subとは

Public Subは、エクセルマクロの画面に表示されるものが、このPublic Subであり、これは、「Sub」という記載のものと同じものを表します。

Public Sub = Sub

 

つまり、「Sub」は、Publicが省略されたものだったのですね。

下記図をご覧ください。

 

①が、Public Subの記述をしたサブルーチンになっており、

②が、Public Functionの記述をしたサブルーチンです。

 

 

Public Functionとは

Public Functionは、このサブルーチン自体に値をもつことができる(変数にできる)という特徴をもっています。

 

Public Function = Function

 

と記載しても同じ意味を表します。どちらで使用しても間違えではありません。

つまり、「Function」というのは、Publicが省略されたものだったのですね。

下記図をご覧ください。

 

Functionの場合、後ろにInteger型が宣言されていることがわかりますか?

このTestMoveという名称にInteger型の変数が宣言されています。この名称にも数値を返すことができるという意味です。

 

Sub とFunctionの違いとは

それでは、まSubとFunctionの違いについて解説していきましょう。

 

<SubとFunctionの違い>

  • Sub :値が返せない
  • Function:値が返せるもの。

 

ユーザー
ユーザー
なんのこっちゃ???

 

ですよね。

 

Functionで指定しているサブルーチンは、その登録名称自体に値を返すことができるというメリットをもっています。

値を返すことができるので、その分メモリも消費することは覚えておいてくださいね。

 

Public Sub と Public function の使い方について

それでは、実際の使い方を画面を見ながら解説していきましょう。

Sub Mainを実行していきましょう。すると複数のCall文がでてきますので、一つずつ処理を追っていきましょう。

まずは下記の流れの手順で処理をデバッグしていきます。

 

<実行手順>

  • 1.「Sub Main」を実行していきましょう。
  • 2.Call文は、そのサブルーチンにジャンプします。
  • 3.Move_Callへ移ります。
  • 4.Test_Moveへ移ります。

 

【実際の処理の一例】

 

【Subの場合】

「Move_Call」というCall文が、Sub Mainの中に記載されているため、処理は行われ、Move_Callのサブルーチンにジャンプします。

ここの処理を通過しますが、Functionではないので、値をSub Mainに引き渡すことはありません。

 

【Functionの場合】

しかし、Functionの場合、Test_MoveにInteger型を宣言しています。

 

①このTestMoveのCall文(サブルーチン)に入ると、intCode変数に値が6が計算されます。

②そして赤枠では、TestMoveというサブルーチン名がInteger型の変数となって、intCodeの6が、最後の行でTestMoveに引き渡されています。

 

このサブルーチンが終わると、またSub Mainの続きに戻るわけですが、この6という数値が、「→」のようにSub Mainの中の「intValue」に値が入っていきます。

こうしてデータの引き渡しが行わていきます。

 

まとめ

このように、Public Sub とPublic Functionは、どこのModuleからも呼び出すことができるサブルーチンの一つですが、そのサブルーチンから呼び出す際にも、

 

・「値を返すことができないのが =Sub」

・「値を返すことができるのが   =Function」

 

 

です。使い方をしっかり理解して、上手にCall文として、呼び出せるコーディングができるようになるとよいですね。