【連載】#03-01 VBA のSubプロシージャとは? 関数(Functionプロシージャ)とは?

【連載】#03-01 VBA のSubプロシージャとは? 関数(Functionプロシージャ)とは?
【連載】#02 はじめの一歩 Access を起動して VBA プログラムを動かしてみよう

この記事では Microsoft Access VBA の中に登場する Subプロシージャ関数(Functionプロシージャ)VBE(Visual Basic が使うエディタ)について詳しく紹介します。

【連載】#03-01 VBA のSubプロシージャとは? 関数(Functionプロシージャ)とは?
しらかば堂

いつも記事を読んで頂きありがとうございます~
今日の調子はいかがですか?

Subプロシージャのこと

まず前回の記事でサンプルとして紹介した次のプログラム


Sub access_vba_sample_02_01()

MsgBox "早く家に帰りたい!"

End Sub

について簡単に説明します。

このように「Sub」と「End Sub」で囲まれた領域を Sub プロシージャ といいます。 VBA のプログラムを意味のある実行単位ごとにひと固まりにまとめて記述したものです。


Sub プロシージャ名()
 
...
 
End Sub

また
MsgBox “早く家に帰りたい!”

に出てくる MsgBox は ダイアログボックス という小さな画面を表示して MsgBox の次の第一パラメータを表示する VBA 組み込み関数 です。
(関数が何かについては後ほど説明します)

この場合 “早く家に帰りたい!” という文字列が第一パラメータなのでダイアログボックス にその文字が表示されるんですね。

またこのサンプルのように MsgBox の第一パラメータ以降が省略されている場合、表示されたダイアログボックスの、パラメータ表示のあとにOK ボタンが表示され、マウスでこれをクリックすると ダイアログボックス画面が閉じます。

関数のこと

また前回の記事では紹介していませんでしたが、実は Access には次のように 関数(Function プロシージャ) というものもあるんです。

この記事全体の目標は

  • 今の状況から抜け出してもっと前向きな仕事に取り組みたい
  • さっさと仕事を切り上げて充実したアフターファイブを過ごしたい

でしたよね。

この目標達成のためにはこの関数を覚えることががとても重要なのでこれもあわせて紹介しておきます。

関数は次のように「Function」と「End Function」で囲んで定義します。


Function 関数名() As Integer

...

関数名 = 0

End Function

何か Subプロシージャ 関数と似てるけど何が違うの?

そう思いませんか?

それでは2つの Sub プロシージャと1つの 関数からなる以下のサンプルを題材にして実際に遊んでみましょう。


Sub access_vba_sample_03_01()

MsgBox "早く家に帰りたい!"

End Sub


Sub access_vba_sample_03_02()

MsgBox "早くコロナが収束してほしい!"

End Sub


Function Access_VBA_Sample() As Integer

MsgBox "友達とお茶したい!"

Call access_vba_sample_03_02()

Access_VBA_Sample = 0

End Function

ここでの確認のポイントは

  • Access Visual Basic Editor (略称VBE: Visual Basic が使うエディタ)でマウスのカーソル( 縦棒)を2つの  Subプロシージャ 関数 のそれぞれの位置において 実行 ボタンをクリックしたときに何が起きるか

です。つまり VBE の中で以下のそれぞれのポイントにマウスのカーソル( 縦棒)をおいた状態で 実行 ボタンをクリックしたとき VBE およびこのプログラムがどういう動きをするかに注目してくださいね。

【連載】#03-01 VBA のSubプロシージャとは? 関数(Functionプロシージャ)とは?

文章だけではわかりにくいので動画で繰り返し確認しましょう。
見づらいときは画面をフルスクリーンにすることをお勧めします。

自分のPCに Access が入っている人はこのサンプルプログラムを実際に自分のPCの Access にコピペして自分でいろいろ遊んでみてくださいね。

この動画はすでにデスクトップに作成済の 02_01.accdb に本記事のプログラムをコピぺするところから始めます。

【連載】#03-01 VBA のSubプロシージャとは? 関数(Functionプロシージャ)とは?
しらかば堂

どうですか?
違いがわかりましたか?

【連載】#03-01 VBA のSubプロシージャとは? 関数(Functionプロシージャ)とは?
みなみ

ん~
わかんないっ!

【連載】#03-01 VBA のSubプロシージャとは? 関数(Functionプロシージャ)とは?
しらかば堂

こらこら(笑)

あなたがみた感じでは

【連載】#03-01 VBA のSubプロシージャとは? 関数(Functionプロシージャ)とは?
  • カーソルが①の先頭にあるときは 実行 ボタンを押すと上のマクロ 画面が出てきて
    access_vba_sample_03_01
    access_vba_sample_03_02
    という Sub プロシージャを選ばされた!
    それからそれぞれを選んだら、それぞれの Sub プロシージャ
    動いた気がする~
  • でもそのマクロ 画面には
    Access_VBA_Sample
    っていう  関数(Function) は出てこなかったよ~
  • カーソルが②にあるときは 実行 ボタンを押すとすぐに
    access_vba_sample_03_01
    という Sub プロシージャが動いた気がする~
  • カーソルが③にあるときは 実行 ボタンを押すとすぐに
    access_vba_sample_03_02
    という Sub プロシージャが動いた気がする~
  • カーソルが④にあるときは 実行 ボタンを押すと
    Access_VBA_Sample
    っていう  関数(Function) が動いた気がする~
  • そんでもってついでに
    access_vba_sample_03_02
    という Sub プロシージャ も動いた気がする~

という感じだったのではないでしょうか。

そうなんです。VBE では

  • カーソルが先頭行にある時はプログラムに含まれる Sub プロシージャ
    マクロ 画面でユーザに選択させ、選択されたものを実行する。
    ここには Function(関数) は含まれない
  • カーソルがそれぞれの Sub プロシージャFunction(関数) 内にあって
    それを指定しているときはその Sub プロシージャFunction(関数)を実行する

という決まりがあるんです。そしてもっと言うと

  • Sub プロシージャ は VBE のマクロ画面から呼び出せる
  • Function(関数) は VBE のマクロ画面から呼び出せない

ということになっています。

【連載】#03-01 VBA のSubプロシージャとは? 関数(Functionプロシージャ)とは?
みなみ

はい?
呼び出せないってどうゆこと?

じゃあ何のために Function(関数) があるのさっ!

さっき 重要 とか言ってたじゃん(泣)!
わたしをもてあそんだの?

【連載】#03-01 VBA のSubプロシージャとは? 関数(Functionプロシージャ)とは?
しらかば堂

いやいやそういう訳では…(汗)

まとめ

いかがでしたか?謎が謎を呼びますね。

引き続き

【連載】#03-02 VBA のSubプロシージャと関数(Functionプロシージャ)の違いとは?

Access VBA の次の扉を開けましょう。

さらに違う世界が見えてくるはずです。


Microsoft Access 関連教材は次のリンクからどうぞ。

Access VBA 関連教材の紹介