忍者ブログ
バイオインフォマティックス技術者試験、情報処理試験など、IT系の試験を基礎から勉強します。また、Javaなどプログラミングを勉強します。

【VBAスタンダード対策】WorksheetFunction オブジェクトによるワークシート関数の呼び出しを攻略!

Excelに標準で用意されている便利な関数(VLOOKUPSUMCOUNTIF など)をVBAコード内から呼び出して使う際に必須となるのが WorksheetFunction オブジェクト です。正確な呼び出し構文と、VBA組み込み関数との違いをマスターしましょう。

1. 問題:WorksheetFunction オブジェクトを用いたVLOOKUP関数の実行

【 問題 】 下記のコードは、セル A1 の値を検索キーとして、Sheet1 のセル範囲 A1:B10 から対応するデータをVLOOKUP関数で検索し、変数 result に格納しようとしています。空欄 ( A ) に入る正しい記述はどれでしょうか?

Sub CallWorksheetFunctionTest()
    Dim result As Variant
    Dim key As String
    key = Range("A1").Value

    result = ( A )(key, Worksheets("Sheet1").Range("A1:B10"), 2, False)

    MsgBox result
End Sub

① Application.VLookup
② Application.WorksheetFunction.VLookup
③ Excel.VLookup
④ Worksheet.VLookup

2. 正解:WorksheetFunction 呼び出し構文の正解

正解: ② Application.WorksheetFunction.VLookup

3. 解説:WorksheetFunction オブジェクトの構造とエラー処理の罠

VBAからExcelのワークシート関数を呼び出す基本的な構文は Application.WorksheetFunction.関数名(...) です。

[ WorksheetFunction の構造とひっかけポイント ]

1. 階層構造の基本:
Application オブジェクトの下位にある WorksheetFunction プロパティ を介して各ワークシート関数を呼び出します。
・VBAエディタ(VBE)では、Application.WorksheetFunction. まで入力すると、利用可能なワークシート関数が自動メンバー表示(補完機能)されます。

2. 誤り(③, ④)の理由:
・③(Excel.VLookup)や ④(Worksheet.VLookup)といったオブジェクト構成はVBAの文法上に存在しないためコンパイルエラーとなります。

★ ここが試験に出る!(① Application.VLookup との違い)
Application.WorksheetFunction.VLookup
  検索値が見つからない場合、VBAの実行時エラー1004が発生しマクロが停止します(On Error GoTo 等でのエラートラップが必要)。
Application.VLookup(WorksheetFunctionを省略)
  検索値が見つからない場合、エラーで停止せず変数にエラー値(IsError で判定可能)を返します
※スタンダード試験では、基本構文である Application.WorksheetFunction.関数名 を問う問題が最も基本として出題されます。

ここが試験に出る!: スタンダード試験では、WorksheetFunction 経由で呼び出す際、セル範囲の引数には文字列ではなく Range("A1:B10") のように Range オブジェクトを渡す必要がある 点も併せて狙われます。


4. まとめ

「ワークシート関数を呼び出す標準記述は Application.WorksheetFunction.関数名(...) 」。この構文を押さえておけば、VBAのループ処理を使わずに SUMIFCOUNTIFVLOOKUP などを活用して大量データを一括集計・検索する高速なマクロを構築できるようになります。


PR