【VBA】 1.2 プロシージャって何?

目次

プロシージャの概要

プロシージャとは、多少の語弊はあるかもしれませんが、簡単に言うとプログラムのことです。
Excelマクロの開発 = プロシージャの作成、と言っても過言ではないでしょう。

Excelマクロは、以下のような構成となっており、ユーザーよってExcelマクロが起動されると、プロシージャに記述されたステートメントが処理され、何らかの結果が出力されます。
なお、標準モジュールはプロシージャを格納するフォルダのような存在で、管理しやすいように分割することもできます。

  • Excelマクロ
    • 1つ以上の標準モジュール
      • 1つ以上のプロシージャ
        • 複数行で構成されるステートメント(ステートメントとは、処理を行う1行の命令文)

プロシージャの詳細

プロシージャは、以下のように分類されます。

  • プロシージャ全体
    • 標準モジュールで作成可能なプロシージャ(一般的に「プロシージャ」とはこのことを指し、以降の説明では「プロシージャ」と記述する。)
      • Subプロシージャ
      • Functionプロシージャ
    • イベントプロシージャ
      • ワークブックで作成可能なイベントプロシージャ
        • Openプロシージャ
        • Activateプロシージャ
        • etc…
      • ワークシートで作成可能なイベントプロシージャ
        • Changeプロシージャ
        • Activateプロシージャ
        • etc…

プロシージャイベントプロシージャの違いは、以下の通りです。

  • プロシージャ:ユーザーによってExcelマクロが起動された場合に実行される。
  • イベントプロシージャ:ユーザーがワークブック(Excelファイル)やワークシートに対して、特定の操作を行った場合に、実行される。

SubプロシージャFunctionプロシージャの違いは、以下の通りです。

  • Subプロシージャ:プロシージャの起動元に対して、戻り値を返さない。
  • Functionプロシージャ:プロシージャの起動元に対して、戻り値を返す。

プロシージャは、プロシージャ全体から一部を分割してサブプロシージャとし、メインプロシージャからサブプロシージャを呼び出すような親子構造とすることができます。サブプロシージャからサブプロシージャを呼び出すような作りも可能で、何段階でも親子構造を作成することが可能です。

プロシージャの親子関係で、子プロシージャが親プロシージャに処理結果である戻り値を戻すのがFunctionプロシージャ、戻さないのがSubプロシージャです。
一般的にプロシージャの大半がSubプロシージャで作成されます。(その理由は、戻り値を戻す必要がない場合が多いのと、処理結果を戻り値ではなく、引数(引数については、後ほど詳しく解説します)で渡す場合が多いためです。)

余談ですが、Functionを日本語に訳すと一般的には「機能」となりますが、数学の世界では「関数」となります。
数学の世界で、関数は、y=f(x)という公式で表現されますが、「f」はfunctionの略です。
数学の関数は、xで構成される数式にx=aの値を渡すと、関数という数式が計算を行い、yという結果が出る、というものです。
Functionプロシージャもこれと同様で、Functionプロシージャに何らかの値を渡すと、戻り値が返ってくる、というものです。
このように、Excelマクロでは戻り値を返すFunctionプロシージャを自分で作成することが可能ですし、ExcelシートやExcelVBAには、それぞれワークシート関数、VBA関数と呼ばれる、何らかの処理を行い戻り値を返す、使用頻度の高い機能が予め提供されています。

プロシージャを作成する際、プロシージャの分割は必須ではありませんが、一般的にプロシージャのステートメントの行数が多くなった場合は、プロシージャを分割した方がいいと言われています。
また、複数のExcelマクロで共通的に使用できるプロシージャは、その部分を取り出して1つのプロシージャとし、幅広く使用した方が効率的で品質の向上につながります。

プロシージャのコーディング方法

プロシージャのコードは、以下のように記述します。

'Subプロシージャの場合
Sub プロシージャ名()

End Sub

'Functionプロシージャの場合
Function プロシージャ名()

End Function
  • Subプロシージャ
    Sub ~ End Subで1つのSubプロシージャとなります。
    コーディングの際は、「Sub プロシージャ名」まで入力して改行すると、「Sub プロシージャ名」の後の「()」と「End Sub」は、VBEが自動で表示します。

  • Functionプロシージャ
    Function ~ End Functionで1つのFunctionプロシージャとなります。
    コーディングの際は、「Function プロシージャ名」まで入力して改行すると、「Function プロシージャ名」の後の「()」と「End Function 」は、VBEが自動で表示します。

イベントプロシージャは別途解説

イベントプロシージャについては、ExcelVBAを網羅的にマスターする上では必修ですが、ExcelVBAの習得の初期段階では不要と思われますので、別途解説することにさせていただきます。

この記事を書いた人

某IT企業に勤務。

2年間の休職を経て、一から独学でExcel VBAを習得し、半年でExcel VBA エキスパート資格のスタンダードに一発合格。

社内の非効率的な作業を効率化するExcelマクロの開発を、全行程まるっと一人で請け負い、これまでに約100個のExcelマクロを開発し、現在も増産中。

目次