VBA関数とは

<< VBAの演算子とは :前の記事

前回は演算子について解説しました。色々な演算子がありますが、すべてを覚える必要はありません。プログラムミングで必要になった場合に内容を確認して適切な演算子を利用するようにしましょう。今回は、VBA関数について解説しています。

目次

Excelの関数

Excelの関数には、ワークシートで使用できる関数「ワークシート関数」とVBAで使用できる関数「VBA関数」があります。こちらでは「VBA関数」について解説していきます。

VBA関数とは

VBA関数は、設定した値を指示通り処理し、結果を吐き出す箱のようなものです。処理の材料となる値のことを引数と言い結果の値を戻り値といいます。こちらは、メソッドの引数・戻り値と同じような意味合いです。VBA関数を利用すると日付の取得や文字列の変換などを処理を実行する命令文を記述できます。

VBA関数の使い方

VBA関数を利用するには決まった書式に則って記述します。決まった書式とは、VBA関数名の後に「()」(かっこ)を記述しその中に引数を指定します。引数の種類や数はVBA関数ごとに異なりますので、その都度確認しましょう。

VBA関数名 引数の設定値
VBA関数名(引数の設定値)

VBA関数の引数

VBA関数の中には、引数を必要としないもの、引数の指定が必須のもの、引数が任意のオプションとなっているものがあります。

また、引数が複数ある場合は「,(カンマ)」で区切って並べて記述しますが、引数不要のVBA関数の場合は、「()」(かっこ)が不要で、VBA関数名のみ記述します。こちらではそれぞれについて解説していきます。

引数を必要としないVBA関数

引数を必要としないVBA関数の中でDate関数というものがあります。Date関数は現在の日付を返すVBA関数です。


Sub sample()

    Dim a As Date

    a = Date

    MsgBox a

End Sub
VBA関数「Date関数」の結果

まず、Dimステートメントを利用して変数a日付型(Date)で宣言します。続いて変数aにDate関数で取得した値を格納します。この際のDate関数は引数を必要としないのでそのまま記述します。最後にMsgBox関数の引数に変数aの値を設定してメッセージボックスを表示させます。

引数の指定が必須のVBA関数

引数の指定が必須のVBA関数の中でLen関数というものがあります。Len関数は指定した文字列または変数の文字数を返すVBA関数です。


Sub sample()

    Dim a As String

    a = "VBAのIE制御入門"

    MsgBox "文字数:" & Len(a)

End Sub
VBA関数「Len関数」の結果

まず、変数a文字列型(String)で宣言します。続いて変数aに文字列の「VBAのIE制御入門」を格納します。最後にMsgBox関数の引数にLen関数に変数aを設定した値を設定してメッセージボックスを表示させます。

引数がオプションのVBA関数

引数がオプションのVBA関数の中でMsgBox関数というものがあります。MsgBox関数はダイアログボックスにメッセージを表示するVBA関数です。MsgBox関数は一番目の引数のみ必須で残りの引数はオプションのため省略することができます。


Sub sample()

   MsgBox "今日は晴れですか?", vbYesNo, "天気のチェック"
    
End Sub
VBA関数「MsgBox関数」の結果1

こちらは、MsgBox関数で3番目まで引数を設定しています。1番目の引数にはメッセージボックスに表示させる文字列を、2番目の引数には表示されるボタンの種類組み込み定数を、3番目の引数はメッセージボックスのタイトルを設定しています。2番目と3番目の引数は省略しても問題なく表示されます。

省略できる引数の場合は、引数の設定を飛ばすこともできます。例えば、1番目と3番目だけを設定したい場合は2番目の設定を空白にして「,(カンマ)」だけを記述します。以下のように記述すると1番目と3番目の引数のみ設定できるようになります。


Sub sample()

   MsgBox "今日は晴れですか?", , "天気のチェック"
    
End Sub
VBA関数「MsgBox関数」の結果2

こちらは、MsgBox関数で1番目と3番目の引数のみを設定しています。先ほどは2番目の引数を設定していたので「はい」「いいえ」のボタンがありましたが、今回は省略したため、通常の「OK」ボタンが表示されています。

名前付き引数を使用する方法

ここまで引数の設定では「,(カンマ)」を区切って複数の引数を設定しましたが、名前付き引数を利用して設定することもできます。名前付き引数とは、名前が定義されている引数のことです。今回も事例で利用したMsgBox関数の引数を3番目まで紹介しましたが、実際には以下のように引数が設定されています。「prompt」「buttons」「title」「helpfile」「context」が名前付き引数となります。

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

名前付き引数を利用する場合は、引数名に「:=(コロンとイコール)」を記述し、その後に引数の設定値を記述します。こちらも複数の引数を設置する場合は、「,(カンマ)」で区切ります。

VBA関数名 引数名1:=設定値, 引数名2:=設定値
VBA関数名(引数名1:=設定値, 引数名2:=設定値)

こちらはさきほどの事例と同じ処理になります。引数名に「:=(コロンとイコール)」を付けた形で記述しています。 名前付き引数で記述した場合でも同じ結果になります。

Sub sample()

    MsgBox prompt:="今日は晴れですか?", Title:="天気のチェック"

End Sub
VBA関数「MsgBox関数」の結果2

名前付き引数で記述した場合の特徴は引数を記述する順番を気にする必要がないということです。ですので、以下のように引数の順番を変えても同じように処理します。


Sub sample()

    MsgBox Title:="天気のチェック", prompt:="今日は晴れですか?"

End Sub
VBA関数「MsgBox関数」の結果2

VBA関数の戻り値

VBA関数の中には、実行後に実行結果の値を返す「戻り値」を取得できるものがあります。VBA関数の戻り値は「=(イコール)」の代入演算子を利用して変数プロパティに代入することも可能です。また、戻り値を取得する場合は、関数の引数は「()」(カッコ)で括る必要があります。

変数 = VBA関数名(設定値1, 設定値2・・・)
変数 = VBA関数名(引数名1:=設定値, 引数名2:=設定値・・・)

さきほどから利用しているMsgBox関数ですが、メッセージを表示させるだけでなく、どのボタンがクリックされたのかを示す値を返すVBA関数でもあります。
以下は単に代入演算子で変数に格納した形ですが、引数を「()」(カッコ)で括っていないため、コンパイルエラーで「コンパイルエラー:構文エラー」と表示されます。


Sub sample()

    Dim i As Integer

    i = MsgBox "今日は晴れですか?", vbYesNo, "天気のチェック"

    MsgBox "「はい」をクリックした場合の戻り値:" & i

End Sub
コンパイルエラー:構文エラー

こちらは引数を「()」(カッコ)で括った形になります。これにより「はい」をクリックすると「6」が戻り値として取得できます。ちなみにMsgBox関数の戻り値は以下のようになりますので、処理に併せて利用しましょう。


Sub sample()

    Dim i As Integer

    i = MsgBox("今日は晴れですか?", vbYesNo, "天気のチェック")

    MsgBox "「はい」をクリックした場合の戻り値:" & i

End Sub
VBA関数「MsgBox関数」の結果3
定数説明
vbOK1[OK]
vbCancel2[キャンセル]
vbAbort3[中止]
vbRetry4[再試行]
vbIgnore5[無視]
vbYes6[はい]
vbNo7[いいえ]

まとめ

今回は、VBA関数について解説しました。VBA関数はすべて覚える必要はありませんので、利用する場合は引数に何があるのか、どのような戻り値をとるのかなどをしっかり理解した上で利用するようにしましょう。次回はプロシージャについて解説します。

次の記事: プロシージャとは >>

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

  • このエントリーをはてなブックマークに追加
ExcelのVBAについてのQ&A掲示板

↑ExcelのVBA全般について分からない事があればこちらの掲示板よりご質問ください^^

VBAのInternetExplorer操作入門

↑ExcelのVBAをマスターできたら、エクセルVBAのIE(InternetExplorer)操作にも挑戦してみてください^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

エクセルVBAのステートメント

こちらでは、エクセルVBAの事例で利用したステートメントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのオブジェクト

こちらでは、エクセルVBAの事例で利用したオブジェクトをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのプロパティ

こちらでは、エクセルVBAの事例で利用したオブジェクトのプロパティをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのメソッド

こちらでは、エクセルVBAの事例で利用したオブジェクトのメソッドをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのイベント

こちらでは、エクセルVBAの事例で利用したオブジェクトのイベントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。