【ExcelVBA】モジュール・プロシージャとは?使い方も徹底解説!

こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。

皆さんは、VBAのプロシージャが何かわかりますか?VBAを初めて間もない方だと、プロシージャの意味や使い方がわからない方も多いのではないでしょうか。

そこで今回は、

  • VBAプロジェクトの構成とは
  • プロシージャとは

といった基礎的なことから、

  • Subプロシージャの作り方・実行方法
  • 合わせて覚えると便利なFunctionプロシージャとは

といった応用的な方法まで、徹底的に解説します!

VBAプロジェクトの構成とは?

まず、VBAプロジェクトの構成について簡単に解説します。VBAは以下のように、「プロジェクト→モジュール→プロシージャ→ステートメント」の構成でできています。

モジュールの中に複数のプロシージャがあり、プロシージャはステートメントでできています。これだけだとよくわからないと思うので、実際にVBEの画面で何がどれに該当するかわかるような画像を用意しました。

赤枠で囲っている部分がプロジェクトです。プロジェクト内にはモジュール(Module1)があります。Module1のコードが、右側に表示されているウィンドウの青枠部分です。

モジュール内には、Test1とTest2のプロシージャがあり、オレンジ色に下線を引いた1行ずつのコードがステートメントです。全ての言葉を覚える必要はありませんが、

  • VBAではモジュールにプログラムを作る
  • モジュールには複数のプロシージャを作れる

程度にまずはざっくりと覚えておけばOKです!

プロシージャとは

次に、プロシージャについて簡単に解説します。プロシージャは、VBAの処理をまとめた機能です。さきほど解説した通り、モジュール内に書くことで作ることができます。

プロシージャの作り方は次のとおりです。プロシージャの作り方:

Sub プロシージャ名()
  'ここにVBAの処理を書く
End Sub

また、引数を使えば、値を渡して処理を実行することもできます。引数を使った例:

Sub プロシージャ名(引数の変数名1 as 型名,引数の変数名2 as 型名)
  'ここにVBAの処理を書く
End Sub

たとえば、「数値Xと数値Yをかけた結果を計算する処理」などをプロシージャで作る場合です。数値Xと数値Yをかけた結果を表示するサンプル:

Sub Test2(X As Integer, Y As Integer)
  
  'XとYをかけた結果をメッセージで表示
  MsgBox X * Y

End Sub

このように、引数を使ってプロシージャを作ることもできます。

プロシージャの作り方

次に、プロシージャの作り方について解説します。

事前準備:標準モジュールの作成

先ほど伝えた通り、プロシージャはモジュールに内に書いていくため、最初に標準モジュールを追加します。以下のように、「右クリック→挿入→標準モジュール」の順で選択することで、追加できます。

追加すると右側にコードウィンドウが表示されます。

Subプロシージャの作成方法

次に、Subプロシージャの作り方について解説します。「Sub プロシージャ名」を入力してからエンターキーを押すことで、Subプロシージャを作ることができます。

プロシージャ名にTestを入力してエンターキーを押した場合は、次のようなコードができます。作ったコード:

Sub Test()

End Sub

この中に処理(ステートメント)を書くことで、VBAの処理を作っていけるわけですね。

簡単なコードを書く方法

次に、簡単なサンプルコードを書く方法について解説します。「Sub プロシージャ名() ~ End Sub」の中に処理を書いていきます。

サンプルコード:

Sub Test()
  Range("A1").Value = "侍エンジニア"
End Sub

今回は、セルに値を書き込むRangeメソッドを使ったサンプルを用意しています。「Range(セル位置).Value = 値」でセルに値を書き込むことができます。

Rangeメソッドの詳しい使い方については以下で解説しているので、気になる方は見てみてくださいね!

【VBA入門】Rangeでセルの範囲指定(Cellsとの使い分けも解説)
更新日 : 2019年9月26日

プロシージャを実行する方法

次に、作ったプロシージャを実行する方法を解説します。プロシージャ内にカーソルを置いて、実行ボタンをクリックすることで簡単に作ったプロシージャを実行することができます。

実行方法:

実行後のセルデータ:

このように、簡単に作ったプロシージャを実行することができます。

補足:他のプロシージャから呼び出すことも可能

ちなみに、プロシージャは別のプロシージャから実行することもできます。別のプロシージャから実行する場合は、Callステートメントを使って次のように書きます。

Callステートメントで別のプロシージャを呼び出す方法:

Call プロシージャ名

先ほど作ったサンプルを実行する場合は、次のようになります。

サンプルコード:

Sub Main()
  
  'Testプロシージャを実行
  Call Test

End Sub

Sub Test()
  Range("A1").Value = "侍エンジニア"
End Sub

実行結果:

複雑な処理を1つのプロシージャだけで書いてしまうと、コードが読みづらくなってしまいます。また、エラーの原因も見つけづらくなってしまうため、適度にプロシージャを分けてCallステートメントで呼び出して作るのがおすすめです!

覚えておくと便利なFunctionプロシージャとは

プロシージャにはSubプロシージャ以外にも、Functionプロシージャがあります。Subプロシージャとの大きな違いは、「戻り値で結果を返すことができること」です。

たとえば、最初に紹介した「数値Xと数値Yをかけた結果を表示するサンプル」を、Functionプロシージャで書き換えると次のようになります。

Functionプロシージャで書き換えたサンプル:

Sub Main()
  
  'Functionプロシージャ(Test2)を実行
  MsgBox Test2(10, 5)

End Sub

Function Test2(X As Integer, Y As Integer) As Integer
  
  'XとYをかけた結果を返す
  Test2 = X * Y

End Function

実行結果:

XとYをかけた結果を返すFunctionプロシージャをTest2の名前で作成し、MainでTest(10,5)のように書くことで、10(Xの値)と5(Yの値)をかけた結果を取得して、MsgBoxで結果をメッセージに表示しています。

SubをFunctionに書き換えて、戻り値に設定する型を「as Integer」でプロシージャ名の右に追加しています。

このように、「処理した結果を返すプロシージャ」を作ることができるので、Functionプロシージャはとても便利です。Funcitonプロシージャの詳しい使い方については以下で解説しているので、気になる方は見てみてくださいね!

【VBA入門】Functionの使い方(呼び出し、引数、戻り値)
更新日 : 2019年9月26日

まとめ

今回は、プロシージャの使い方について解説しました。まずは、Subプロシージャの作り方・Callで実行する方法をやってみてください。

作るのが慣れてきたら、Functionプロシージャに置き換える方法を試す流れがおすすめです。ぜひ、やってみてくださいね!

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。
Webアプリ、業務アプリ開発において、要件定義、設計、インフラ、製造、テスト、運用保守など、様々な経験あり。
また、侍ブログ編集部として、これまでに200記事以上の記事を執筆。
現在はフリーランスエンジニア兼テックライターとして活動中。