マクロでサブルーチンを使用できることはすでにご存知でしょう。 VBAでは、マクロで使用できる関数を定義することもできます。関数とサブルーチンの違いは、関数は値を返すことができるのに対し、サブルーチンはできないことです。次のマクロについて考えてみます。

Sub Macro1()

TooMany = TestFunc     If TooMany Then MsgBox "Too many columns selected"

End Sub
Function TestFunc()

TestFunc = False     If Selection.Columns.Count > 10 Then        TestFunc = True     End If End Function

マクロ(Macro1)はTestFunc関数を呼び出します。この関数は、実行するテストに応じて、値FalseまたはTrueのいずれかを返します。次に、Macro1は返された値に基づいて動作します。関数名は等号の右側に表示できることに注意してください。これにより、関数は非常に強力になり、プログラムの重要な部分になります。関数内で、結果は関数自体の名前であるTestFuncに割り当てられます。これは、関数によって返される値です。

サブルーチンと同様に、関数にパラメーターを渡すこともできます。

これは、次のマクロで示されています。

Sub Macro1()

A = 12.3456     MsgBox A & vbCrLf & RoundIt(A)

End Sub
Function RoundIt(X) As Integer     RoundIt = Int(X + 0.5)

End Function

この単純なマクロ(Macro1)は数値を定義し、メッセージボックスを使用して数値と、その数値をRoundIt関数に渡した結果を表示します。出力は12.3456および12です。パラメーターは括弧内で関数に渡す必要があることに注意してください。また、関数は渡されたものと同じ変数名を使用しないことに注意してください。これは、VBAがXの値(関数に必要なもの)を再割り当てして、Aの値(プログラムが関数に渡すもの)と一致させるためです。

関数にパラメーターを渡す際に覚えておくべき重要なことは、プログラムは関数が期待するのと同じ数のパラメーターを渡す必要があり、パラメーターは一致するタイプで適切な順序である必要があるということです。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(2259)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。

link:/ excelribbon-Understanding_Functions_in_Macros [マクロの関数を理解する]