まりふのひと

ExcelのTrim関数(続き)

昨日記事を書いた後、気になることがあったので朝一で調べた。

※ Trim 関数を VBE の中で使ったらどうなる?

ExcelVisual Basic Editor(VBE) を起動([Alt]+[F11])し、次の関数(所謂、ユーザー定義)を作成、動作を検証した。

Public Function myTrim(argString)
    myTrim = Trim(argString)
End Function
  1. ワークシートで使った Trim 関数とは動作が異なり、Access の Trim 関数と同じ動作。
  2. Excel/VBE から “trim” のヘルプを見たら、内容は Access と全く同じ。
※ Phonetic 関数を VBE の中で使ったらどうなる?
※ 結論
  1. ワークシートの中で使った Trim() は、ワークシート関数
  2. VBE の中で使った Trim() は、VBA の関数。
  3. Trim() は、関数名は同じであるが動作は異なる。
  4. ワークシート関数は、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 の値は異なります。