サイトについて      連絡先   検索

VBA 関数

はじめに

Excel VBA の関数の作成・呼び出しの方法を紹介します。

Sub 関数と Function 関数の 2 種類あります。作成した関数は VBA やマクロとして実行することも、他の関数から呼び出すこともできます。

関数は処理をまとめ、使いまわすことができます。コードの可読性にもつながります。

関数の作成

VBE のプロジェクト ウィンドウから関数を作成したいワークシートまたは標準モジュールをダブルクリックします。

Sheet1 を操作したいなら Sheet1 を、すべてのワークシートに対して操作したいなら標準モジュールをダブルクリックします。
2

関数には実行するだけのものと、結果を戻り値として返すものの二種類があります。

Sub 関数:戻り値を返さない

Sub 関数名()と書きます。自動で End Sub が追加されます。

Sub 関数()
    ' ここに処理を記載
End Sub

Function 関数:戻り値を返す

Function 関数名() As 型名と書きます。型名がこの関数の戻り値の型です。自動で End Function が追加されます。

Function 関数() As String
    ' ここに処理を記載
    関数 = "これが戻り値"
End Function

基本的に VBA で最初に実行されるコードが Sub 関数です。Sub 関数の中で別の Sub 関数を呼び出したり Function 関数を呼び出したりします。

関数の呼び出し

Sub 関数を呼び出すには関数名を書くか、関数名の前に Call を付けます。

' 最初に実行される
Sub 実行()
    ' Sub 関数を 2 回呼び出します。
    サブ
    Call サブ
End Sub

' Sub 関数を作成します。
Sub サブ()
    Debug.Print ("サブ関数を呼び出しました")
End Sub

Function 関数を呼び出すには、値を指定する場所に関数名を書きます。

' 最初に実行される
Sub 実行()
    ' Function 関数を呼び出します。
    Dim ret As String
    ret = ファンクション ' ret に "戻り値" が設定されます。
End Sub

' Function 関数を作成します。
Function ファンクション() As String
    ファンクション = "戻り値"
End Function

別のファイルの関数の呼び出し

Sheet1 から標準モジュールや、標準モジュールから Sheet1 など、別のファイルの関数を呼び出す方法を紹介します。

別の標準モジュールの関数の呼び出しは、関数名だけで呼び出せます。

別のシートの関数を呼び出すときはファイル名.関数名のように関数の前にファイル名を記載する必要があります。

Sheet1 のコード

Sub 実行サブ()
    ' 標準モジュール1 の関数を呼び出し
    Module1.モジュール
    モジュール         ' 標準モジュールだけは関数名だけでも呼び出せる
End Sub

Sub サブ()
    Debug.Print ("Sheet1 の関数を呼び出しました")
End Sub

標準モジュール1 のコード

Sub 実行モジュール()
    ' Sheet1 の関数を呼び出し
    Sheet1.サブ ' Sheet1 を指定する必要あり
End Sub

Sub モジュール()
    Debug.Print ("標準モジュール1の関数を呼び出しました")
End Sub

別のファイルの関数を呼び出すにはスコープが Public になっている必要があります。

ワークシートと標準モジュールの違い

シートと標準モジュールのどちらに関数を作成したらいいのか迷ったら次の方法で分けられます。

なぜ関数を作成するのか

理由の 1 つは VBA を実行するためです。Sub 関数がなければ VBA を実行できません。

もう 1 つの理由は、同じ処理をまとめるためです。次のコードのように 実行1 関数と実行2 関数で同じようにセル「A1」に設定する必要があるとします。

Sub 実行1()
    Range("A1").Value = "Tipsfound"
    Range("A1").Font.Color = RGB(255, 0, 0)
    Range("A1").Interior.Color = RGB(255, 255, 0)
    ' 他の処理
End Sub

Sub 実行2()
    Range("A1").Value = "Tipsfound"
    Range("A1").Font.Color = RGB(255, 0, 0)
    Range("A1").Interior.Color = RGB(255, 255, 0)
    ' 他の処理
End Sub

これを関数にまとめると次のように書けます。

Sub 実行1()
    セルの設定
    ' 他の処理
End Sub

Sub 実行2()
    セルの設定
    ' 他の処理
End Sub

Sub セルの設定()
    Range("A1").Value = "Tipsfound"
    Range("A1").Font.Color = RGB(255, 0, 0)
    Range("A1").Interior.Color = RGB(255, 255, 0)
End Sub

セルの設定という関数にセル「A1」に設定する処理をまとめます。あとはこの関数を呼び出すだけです。こうすると入力ミスで間違えることもなくなり、可読性も良くなり保守しやすくなります。また関数名という処理に名前を付けられるので、何をしているのかわかりやすくなります。

関数に引数を渡す

関数は呼び出すだけでなく値を渡して、その値によって処理を変えることができます。

関連ページ