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ステートメント によるエラー処理ルーチンで処理しなくてはいけません。なおこちらは 自動メンバー表示 が出来るのは便利です。