教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

ExcelVBAのWorksheetFunctionオブジェクトで使用するAverageIf関数の使い方

構文

構文は以下の通りです。

WorksheetFunction.AverageIf(範囲, 条件, [平均範囲])

解説

WorksheetFunctionは、ExcelVBAの組み込みオブジェクトで、Excelのワークシート関数をVBAから呼び出す際に使用します。AverageIf関数は、指定した条件に一致するセルに基づいて平均を計算する関数です。範囲は、平均を計算するために評価するセル範囲です。この範囲の中で、条件に合ったセルが見つかれば、そのセルに対応するデータを基に平均を計算します。条件は、平均を計算する際の条件を指定します。数値や文字列、比較演算子を使って条件を設定できます。平均範囲(オプション)は、条件が一致したときに、平均を計算する別のセル範囲を指定できます。もし指定しない場合は、最初の範囲で平均が計算されます。

プログラミング例

具体的なプログラミング例を紹介します。

(例1)特定の点数以上の平均を求める

Sub 平均計算()
    Dim 点数範囲 As Range
    Dim 平均値 As Double
    ' 点数範囲を設定
    Set 点数範囲 = Range("A1:A10")
    ' 点数が70以上の平均を計算
    平均値 = WorksheetFunction.AverageIf(点数範囲, ">=70")
    ' 結果を表示
    MsgBox "70点以上の平均点は " & 平均値 & " 点です。"
End Sub

上記のプログラムは、セル範囲「A1:A10」の中で「70点以上」の点数の平均を求めます。WorksheetFunction.AverageIf関数に「>=70」という条件を指定することで、70点以上のセルの平均値を計算しています。

(例2)異なる範囲での平均を計算

Sub 別の範囲で平均計算()
    Dim 点数範囲 As Range
    Dim 名前範囲 As Range
    Dim 平均値 As Double
    ' 点数範囲と名前範囲を設定
    Set 点数範囲 = Range("B1:B10")
    Set 名前範囲 = Range("A1:A10")
    ' 名前が「田中」の人の点数の平均を計算
    平均値 = WorksheetFunction.AverageIf(名前範囲, "田中", 点数範囲)
    ' 結果を表示
    MsgBox "田中さんの平均点は " & 平均値 & " 点です。"
End Sub

上記のプログラムは、セル範囲「A1:A10」の中で名前の範囲に「田中」という名前が含まれている場合、その行に対応するセル範囲「B1:B10」の点数を基に平均を計算します。AverageIf関数は、異なるセル範囲を使用して条件を評価し、別の範囲から平均を取得できることを示しています。

まとめ

AverageIf関数は、指定した条件に一致するセルに基づいて平均を計算する関数です。第1引数は条件をチェックする範囲で、第2引数に条件を指定します。第3引数(オプション)は、条件に一致するセルが見つかった場合の平均を計算する範囲です。