昨日記事を書いた後、気になることがあったので朝一で調べた。
※ Trim 関数を VBE の中で使ったらどうなる?
Excel のVisual Basic Editor(VBE) を起動([Alt]+[F11])し、次の関数(所謂、ユーザー定義)を作成、動作を検証した。
Public Function myTrim(argString) myTrim = Trim(argString) End Function
※ Phonetic 関数を VBE の中で使ったらどうなる?
- コンパイルエラーになる。
※ 結論
- ワークシートの中で使った Trim() は、ワークシート関数。
- VBE の中で使った Trim() は、VBA の関数。
- Trim() は、関数名は同じであるが動作は異なる。
- ワークシート関数は、VBE では使えない‥‥こともないことがヘルプに書いてあった
Visual Basic でワークシート関数を使用する
関連項目アプリケーション情報Visual Basic ステートメントでは、ほとんどのワークシート関数を使用できます。使用できるワークシート関数の一覧を表示するには、ここをクリックしてください。
メモ 一部のワークシート関数は、Visual Basic ではあまり使いません。たとえば、Visual Basic では & 演算子を使って複数の文字列を結合できるので、Concatenate 関数は使わなくても済みます。Visual Basic からワークシート関数を呼び出す
Visual Basic では、WorksheetFunction オブジェクトを介して Excel ワークシート関数を使用できます。
次の Sub プロシージャは、Min ワークシート関数を使用してセル範囲の最小値を決定します。最初に、変数 myRange を Range オブジェクトとして宣言します。次に、この変数にシート 1 のセル範囲 A1:C10 を設定します。別の変数 answer には変数 myRange に Min 関数を適用した結果を割り当てます。最後に、変数 answer の値をメッセージ ボックスに表示します。Sub UseFunction() Dim myRange As Range Set myRange = Worksheets("Sheet1").Range("A1:C10") answer = Application.WorksheetFunction.Min(myRange) MsgBox answer End Sub
引数として範囲参照を必要とするワークシート関数を使用する場合、Range オブジェクトを指定する必要があります。たとえば、Match ワークシート関数を使用してセル範囲を検索できます。ワークシート セルには、=MATCH(9,A1:A10,0) などの数式を入力します。しかし、Visual Basic プロシージャでは、Range オブジェクトを指定することにより、同じ結果が得られます。
Sub FindFirst() myVar = Application.WorksheetFunction _ .Match(9, Worksheets(1).Range("A1:A10"), 0) MsgBox myVar End Subメモ Visual Basic 関数では WorksheetFunction オブジェクトの修飾子は使用しません。関数の名前が Excel 関数と同じこともありますが、機能は異なります。たとえば、Application.WorksheetFunction.Log と Log の値は異なります。