ExcelVBA技
全般
E13M004
E13M004 (Excel2000~2013)
VBAでExcelのワークシート関数(組込み関数)を使う
一例としてMIN,VLOOKUP,ROUND関数などのワークシート関数(組込み関数)をVBA で用いると「SubまたはFunctionが定義されていません」とエラーになります。
この原因は それらの関数がVBA関数として存在しないからです。
Visual BasicでExcelのワークシート関数を呼び出すにはApplicationオブジェクトを使います。
ワークシート関数を使うステートメントには ans = Application.Min(range) のように必ずApplication識別子を付けて用います。
また、Excel2000より WorksheetFunctionオブジェクトが用意されました。
Visual Basic から呼び出すことができる Excel ワークシート関数のコンテナーとして使用されます。
Sub example1_e13m004() Dim vv As Double On Error Resume Next vv = WorksheetFunction.Match(7, Worksheets(1).Range("A1:A10"), 0) On Error GoTo 0 MsgBox IIf(VarType(vv) = vbEmpty, "Error 検索値はありません", vv), , "E13M004" End Sub Sub example2_e13m004() Dim rg As Range, ans As Double Set rg = Worksheets("Sheet1").Range("A1:C10") ans = Application.Min(rg) MsgBox ans, , "E13M004" End Sub
ApplicationとWorksheetFunctionオブジェクトの違い
Application.XXX はExcelのワークシート関数そのものを使っているので関数のエラー値を返します。戻り値をIsError関数などで取得し処理することが出来ます。
一方、WorksheetFunction.XXX のエラー値はVBAのエラーですから On Errorステートメント によるエラー処理ルーチンで処理しなくてはいけません。なおこちらは 自動メンバー表示 が出来るのは便利です。