今回はVBAでAVERAGEIFS関数を使う方法をざっくり説明します。前回の内容(AVERAGEIF関数)と似ていますので、あわせてご覧いただければと思います。
筆者のPCはMacなので、読者の皆様の環境とは、若干の違いがあるかとは思います。
ご了承ください。
はじめに
Excelシートの状態は下のような状態です。A列に学年(Grade)、B列にグループ(Gr.)、C列に点数(Point)とします。

今回は学年とグループを入力すると、その学年とグループのみの平均値が表示されるマクロを作ります。つまり、2つの条件に該当する値だけ抜き取って平均値を出すということですね。
コードと実行結果
コードは下のようになります。AVERAGEIFS関数の()内は以下のように書きます。
.AverageIfs(平均する範囲, 条件1の範囲, 条件1, 条件2の範囲, 条件2, ・・・)
AVERAGEIF関数とは若干順番が違うので注意が必要ですね。
Sub aveifs()
Dim grade As Integer
Dim group As String
Dim pointAve As Double
grade = InputBox(" Select Grade ")
group = InputBox(" Select Group ")
pointAve = Application.WorksheetFunction.AverageIfs(Range("C2:C13"), Range("A2:A13"), grade, Range("B2:B13"), group)
MsgBox " " & grade & " " & group & " Average : " & pointAve & " "
End Sub
上のコードを書いた状態で下の画像の赤丸部分を押します。

すると、メッセージボックスが出てきますので、最初に学年1、2、3から選び、OKを押します。筆者の環境では半角でも全角でも動作しましたが、全角を入力すると思わぬエラーが出そうなので避けた方が無難でしょうか。もちろん必要になる場合はあると思いますので、その場合は注意した方がよさそうですね。

再度メッセージボックスが出てくるので、グループA、Bから選んで入力してOKを押します。なお、大文字と小文字の区別はありませんが、Excelシートに書いてあるグループ以外を入力すると、エラーが出ますのでご注意ください。

OKを押すと、下の画像のようにグループBのみの平均値が表示されます。

OKを押せば、表示が消えます。
最後に
今回はVBAでAVERAGEIFS関数を使う方法を紹介しました。今回は2条件しか用意しませんでしたが、実際にはもっと多かったりすると思います。その場合は、適宜条件を増やせばいいということですね。
なお、MacでVBAを記述していると、うまく入力ができない場合や日本語を記述するとエラーが出る場合があります。解決方法はわからなかったので、今回は半角英数で記述しました。
以上、VBAでAVERAGEIFS関数を使う方法でした。
他記事のご紹介
当ブログではさまざまな記事を投稿しています。最近は初心者向けのIoT開発に関する記事がジリジリと人気が出ています。
コメント