Excel

ExcelのAVERAGE・AVERAGEIF関数|条件付き平均の求め方

しんたろ。

AVERAGE関数の基本から、条件付き平均のAVERAGEIF・AVERAGEIFS、さらにVBA自動化まで、この1記事で完全マスターできます!

この記事でわかること
  • AVERAGE関数の書式と基本的な平均値の求め方
  • AVERAGEIF関数で条件付き平均を求める方法(数値条件・文字列条件)
  • AVERAGEIFS関数で複数条件の平均を求める実践テクニック
  • 上位N件平均・外れ値除外・加重平均などの応用テクニック
  • #DIV/0!エラーなどのトラブル対処法
  • VBAで平均値計算を自動化する方法(3つのマクロ付き)
この操作、VBAで一瞬で自動化できます

まずは関数の使い方を解説し、最後にVBA自動化コードも紹介します

VBA自動化セクションへ ↓

AVERAGE関数とは?基本の使い方

AVERAGE関数は、指定した範囲の数値の算術平均(合計÷個数)を求める関数です。Excelで最もよく使われる関数の一つで、売上データの月別平均やテストの平均点など、幅広い業務で活躍します。

合計を求めるSUM関数と並んで、Excel業務の基本中の基本となる関数です。

AVERAGE関数の書式と引数

AVERAGE関数の書式は以下の通りです。

=AVERAGE(数値1, [数値2], ...)
引数必須/任意説明
数値1必須平均を求めたい数値、セル参照、またはセル範囲
数値2, …任意追加の数値やセル範囲(最大255個まで指定可能)

引数の指定方法は2つあります。

  • 範囲指定: =AVERAGE(B2:B10) のように連続するセル範囲を指定
  • カンマ区切り: =AVERAGE(B2, B5, B8) のように離れたセルを個別に指定

基本的な平均値の求め方

実際の業務データを使ってAVERAGE関数の使い方を見てみましょう。以下のような売上データから、月別の平均売上を求めます。

A(月)B(売上)
21月850,000
32月920,000
43月1,150,000
54月780,000
65月1,030,000
76月890,000
=AVERAGE(B2:B7)
→ 結果: 936,667

この数式は、B2からB7の6つの数値を合計し、6で割った平均値を返します。

{DIAGRAM_AVERAGE}
ショートカットで素早く入力

平均を求めたいセル範囲のすぐ下のセルを選択し、Alt + =(オートSUM)を押すとSUM関数が入力されます。そのまま「ホーム」タブの「オートSUM」ボタン横の▼をクリックし「平均」を選ぶと、AVERAGE関数に切り替わります。

空白セル・0・文字列の扱い

AVERAGE関数は、セルの内容によって計算に含めるかどうかが異なります。この挙動を正しく理解しておかないと、意図しない結果になることがあります。

セルの内容AVERAGE関数での扱い計算に含まれるか
数値(100, 0.5 など)そのまま計算対象含まれる
0(ゼロ)数値として計算対象含まれる
空白セル無視される含まれない
文字列(”休み” など)無視される含まれない
TRUE / FALSE無視される含まれない

「0」は計算に含まれるけど「空白」は無視される、という違いが重要です。欠席者のデータを0にするか空白にするかで、平均値が変わります!

例えば、テスト5人分のデータで1人が欠席の場合を比較してみましょう。

' 欠席者を「0」にした場合
B2:B6 = {80, 90, 0, 70, 85}
=AVERAGE(B2:B6) → 65(5人で割る)

' 欠席者を「空白」にした場合
B2:B6 = {80, 90, , 70, 85}
=AVERAGE(B2:B6) → 81.25(4人で割る)

文字列や論理値も計算に含めたい場合は、AVERAGEA関数を使います。AVERAGEA関数では、文字列を「0」、TRUEを「1」、FALSEを「0」として計算に含めます。

{EXCEL_DEMO}

AVERAGEIF関数で条件付き平均を求める

AVERAGEIF関数は、指定した条件に一致するデータだけの平均値を求める関数です。「営業部の売上平均」「80点以上の平均点」など、特定の条件でフィルタリングした平均を求めたい場面で活躍します。

条件付き合計を求めるSUMIF関数の平均版と考えるとわかりやすいでしょう。

AVERAGEIF関数の書式と引数

=AVERAGEIF(範囲, 条件, [平均対象範囲])
引数必須/任意説明
範囲必須条件を判定するセル範囲
条件必須平均を求める条件(数値、文字列、比較演算子など)
平均対象範囲任意実際に平均を計算するセル範囲(省略時は「範囲」と同じ)
{DIAGRAM_AVERAGEIF}

数値条件での平均(以上/以下/範囲)

AVERAGEIF関数では、比較演算子を使って数値条件を指定できます。条件はダブルクォーテーション(”)で囲むのがポイントです。

' 80点以上の平均
=AVERAGEIF(B2:B20, ">=80")

' 1000未満の平均
=AVERAGEIF(B2:B20, "<1000")

' 0以外の平均(0を除外)
=AVERAGEIF(B2:B20, "<>0")

' セル参照を条件にする場合
=AVERAGEIF(B2:B20, ">="&D1)
使える比較演算子一覧
演算子意味条件の書き方
=等しい“=100” または 100
<>等しくない“<>0”
>より大きい“>80”
>=以上“>=80”
<より小さい“<1000”
<=以下“<=1000”

文字列条件での平均(部署別など)

部署別の売上平均など、文字列で条件を指定する場合の使い方を解説します。

A(部署)B(氏名)C(売上)
2営業部田中1,200,000
3開発部佐藤800,000
4営業部鈴木1,500,000
5開発部高橋750,000
6営業部渡辺980,000
' 営業部の売上平均
=AVERAGEIF(A2:A6, "営業部", C2:C6)
→ 結果: 1,226,667

' 開発部の売上平均
=AVERAGEIF(A2:A6, "開発部", C2:C6)
→ 結果: 775,000

' ワイルドカード: 「営」で始まる部署の平均
=AVERAGEIF(A2:A6, "営*", C2:C6)

' ワイルドカード: 部署名が3文字の平均
=AVERAGEIF(A2:A6, "???", C2:C6)

ワイルドカードは*(任意の文字列)?(任意の1文字)が使えます。ただし、ワイルドカードが使えるのは文字列条件のみで、数値条件では使用できません。

筆者の実務Tips

Excel歴10年の筆者が最もよくやるミスは、AVERAGEIF関数の第3引数(平均対象範囲)を省略してしまうことです。条件範囲と平均対象範囲が異なる場合に省略すると、条件範囲のデータで平均を取ってしまい正しい結果になりません。例えば「部署別の売上平均」で条件範囲がA列(部署名)なのに第3引数を省略すると、文字列の平均を計算しようとして0が返ります。第3引数は「省略できる」ではなく「常に書く」と覚えたほうが安全です。

この操作でよくある疑問

Q: AVERAGEIFで「0を除外した平均」と「空白を除外した平均」の違いは何ですか?

A: AVERAGE関数は空白セルを自動的に無視しますが、0は計算に含めます。つまり空白セルがあっても平均値に影響しませんが、0が入っていると平均値が下がります。「未入力の欄は空白のまま、実績0は0と入力する」ルールを徹底するか、0を除外したい場合は =AVERAGEIF(B2:B20,”<>0″) を使いましょう。

AVERAGEIFS関数で複数条件の平均を求める

AVERAGEIFS関数は、複数の条件をすべて満たすデータの平均値を求める関数です。「営業部かつ売上100万以上」のように、2つ以上の条件を組み合わせたい場合に使います。

COUNTIFS関数と同じく、条件をAND(かつ)で組み合わせて絞り込みます。

AVERAGEIFS関数の書式

=AVERAGEIFS(平均対象範囲, 条件範囲1, 条件1, [条件範囲2, 条件2], ...)
AVERAGEIFとAVERAGEIFSの引数順序の違い

よくある間違いとして、引数の順序が異なる点に注意してください。

  • AVERAGEIF: =AVERAGEIF(条件範囲, 条件, 平均対象範囲)
  • AVERAGEIFS: =AVERAGEIFS(平均対象範囲, 条件範囲1, 条件1, …)

AVERAGEIFSでは平均対象範囲が最初に来ます。SUMIFとSUMIFSの関係と同じです。

{DIAGRAM_COMPARISON}

複数条件の実践例

以下のような売上データから、複数条件で平均を求めてみましょう。

A(部署)B(四半期)C(売上)
2営業部Q11,200,000
3開発部Q1800,000
4営業部Q21,500,000
5開発部Q2750,000
6営業部Q1980,000
7開発部Q1850,000
' 営業部 かつ Q1 の売上平均
=AVERAGEIFS(C2:C7, A2:A7, "営業部", B2:B7, "Q1")
→ 結果: 1,090,000

' 開発部 かつ 売上80万以上の平均
=AVERAGEIFS(C2:C7, A2:A7, "開発部", C2:C7, ">=800000")
→ 結果: 825,000

' 日付範囲での条件指定
=AVERAGEIFS(D2:D100, C2:C100, ">="&DATE(2026,1,1), C2:C100, "<="&DATE(2026,3,31))

AVERAGEIFS関数は最大127組の条件範囲と条件を指定できます。すべての条件をAND(かつ)で判定するため、条件を増やすほど対象データは絞り込まれます。

期間限定でChatGPT✖︎Googleスプレットシートのコンテンツ配布中!

LINEでExcelを気軽に学べる

しんたろ。
しんたろ。
Excel歴10年以上 → アプリ開発者
Profile
大手メーカーに15年以上勤務。製造部門で海外拠点の立ち上げ支援や、現場責任者として採算管理・納期管理・設備オペレートを経験。 2023年にDX人材育成プログラム第1期生として活動後、現在は製造現場のスケジュール運用を支えるアプリの企画・開発をメインに活動中。工程表示表作成の内製化SaaSを構築し、年間1,300万円のコスト改善を実現。 Excelによる業務改善で年間240時間の残業削減を達成した経験を活かし、ブログやSNSでも情報発信しています。
プロフィールを読む

AVERAGE関数の応用テクニック

ここからは、基本のAVERAGE関数を他の関数と組み合わせた応用テクニックを紹介します。業務でよく使う「上位N件の平均」「外れ値を除いた平均」「加重平均」の3つを解説します。

上位/下位N件の平均(LARGE/SMALL連携)

売上トップ3の平均や、最低評価3件の平均など、上位・下位のN件だけの平均を求めたい場面があります。LARGE関数やSMALL関数と組み合わせると実現できます。

' 上位3件の平均(LARGE関数で上位3つの値を取得)
=AVERAGE(LARGE(B2:B20, {1,2,3}))

' 下位3件の平均(SMALL関数で下位3つの値を取得)
=AVERAGE(SMALL(B2:B20, {1,2,3}))

' 上位5件の平均(配列定数を拡張)
=AVERAGE(LARGE(B2:B20, {1,2,3,4,5}))

{1,2,3} は「1番目、2番目、3番目」を意味する配列定数です。LARGE関数は指定した範囲のN番目に大きい値を返すため、{1,2,3}を渡すと上位3つの値が配列で返され、AVERAGEがその平均を計算します。

外れ値を除いた平均(TRIMMEAN)

データに極端な値(外れ値)が含まれている場合、通常のAVERAGEでは平均が歪んでしまいます。TRIMMEAN関数を使うと、上下の極端な値を自動的に除外して平均を計算できます。

=TRIMMEAN(データ範囲, 除外する割合)

' 上下10%のデータを除外して平均を計算
=TRIMMEAN(B2:B100, 0.1)

' 上下20%のデータを除外
=TRIMMEAN(B2:B100, 0.2)

第2引数の「除外する割合」は、上下合計の割合です。0.1を指定すると、上位5%と下位5%のデータが除外されます。アンケート結果の分析や、異常値が混在するデータの処理に便利です。

加重平均の求め方(SUMPRODUCT活用)

AVERAGE関数は単純平均(すべてのデータを等しく扱う)しか計算できません。「数量に応じた加重平均単価」のように、重みを考慮した平均を求めるにはSUMPRODUCT関数を使います。

A(商品名)B(数量)C(単価)
2商品A100500
3商品B200300
4商品C50800
' 加重平均単価 = (数量×単価の合計) ÷ 数量の合計
=SUMPRODUCT(B2:B4, C2:C4) / SUM(B2:B4)
→ (100×500 + 200×300 + 50×800) ÷ (100+200+50)
→ 150,000 ÷ 350
→ 428.57

' 通常のAVERAGEだと...
=AVERAGE(C2:C4) → 533.33(数量を考慮していない)

加重平均は、仕入れ単価の平均計算や成績の科目別加重評価など、実務で頻繁に使います。SUMPRODUCT÷SUMのパターンを覚えておきましょう!

筆者の実務Tips

筆者が経理部門の月次報告書で実際に使っていたのがTRIMMEAN関数です。経費精算データには桁違いの金額(海外出張費や設備購入費)が混在するため、単純平均では日常経費の実態を正しく反映できませんでした。TRIMMEAN(範囲, 0.1)で上下5%を除外するだけで、「通常の経費水準」がひと目でわかるようになり、予算計画の精度が大幅に向上しました。外れ値が含まれるデータでは必ず検討してほしい関数です。

この操作でよくある疑問

Q: 加重平均をAVERAGE関数だけで計算できますか?

A: AVERAGE関数は各値を等しい重みで計算するため、直接的に加重平均を求めることはできません。加重平均には必ずSUMPRODUCT÷SUMの組み合わせが必要です。ただし、データを重み分だけ繰り返し入力すれば理論上はAVERAGEでも同じ結果になりますが、現実的ではないのでSUMPRODUCTを使いましょう。

よくあるエラーと対処法

AVERAGE関数やAVERAGEIF関数を使う際によく発生するエラーと、その原因・解決策を解説します。

#DIV/0!エラーの原因と解決策

#DIV/0!エラーは、AVERAGE関数で最もよく遭遇するエラーです。計算対象の数値データが1つもない場合(0で割ろうとした場合)に発生します。

' エラーが発生する例
=AVERAGE(A1:A5)  → A1:A5がすべて空白の場合、#DIV/0!

' AVERAGEIFでも同様
=AVERAGEIF(A1:A10, "営業部", B1:B10)
→ 「営業部」のデータが1件もない場合、#DIV/0!

対処法としては、以下の方法があります。

  • 事前にCOUNTA関数COUNTIF関数でデータ件数を確認する
  • IFERROR関数でエラー時の代替値を表示する(後述)
  • データの入力漏れがないか元データを確認する

結果が0になる原因

AVERAGE関数の結果が意図せず0になる場合、最も多い原因は数値が文字列として入力されているケースです。

  • CSVファイルからインポートしたデータが文字列型になっている
  • セルの書式が「文字列」に設定されている
  • 数値の前にアポストロフィ(’)が付いている
' 文字列を数値に変換する方法
=VALUE(A1)          ' 1つのセルを変換
=AVERAGE(VALUE(A1:A10))  ' ※配列数式として入力(Ctrl+Shift+Enter)

' 一括変換の裏技: 空のセルをコピーして「形式を選択して貼り付け」→「加算」

セルの左上に緑の三角マーク(エラーインジケータ)が表示されていたら、文字列として格納されている可能性があります。

IFERRORで安全に使う方法

IFERROR関数でAVERAGE関数を囲むと、エラー発生時に代替の値やメッセージを表示できます。業務で使う数式には必ずIFERRORを付けることをおすすめします。

' #DIV/0!エラーの代わりに「データなし」と表示
=IFERROR(AVERAGE(B2:B10), "データなし")

' AVERAGEIFにIFERRORを付ける
=IFERROR(AVERAGEIF(A2:A10, "営業部", B2:B10), 0)

' AVERAGEIFSにIFERRORを付ける
=IFERROR(AVERAGEIFS(C2:C10, A2:A10, "営業部", B2:B10, ">=100"), "-")
IFERRORの代替値の選び方
  • 0: 後続の計算に影響を与えたくない場合
  • “データなし”: 人に見せるレポートの場合
  • “”(空文字): セルを空白に見せたい場合
  • “-“(ハイフン): 該当なしを示したい場合

VBAで平均値計算を自動化する

ここからは、VBA(Visual Basic for Applications)を使って平均値計算を自動化する方法を解説します。大量のデータを処理する場合や、定期的なレポート作成に役立ちます。

VB
VBA 平均値計算デモ
Sub CalcAverage() Dim avg As Double avg = WorksheetFunction.Average( _ Range(“B2:B10”)) Debug.Print “平均値: ” & avg Debug.Print “四捨五入: ” & Round(avg, 1) End Sub
▶ 実行結果(売上データ B2:B10)
平均値: 78.3333…
四捨五入: 78.3
Sub CalcAverageIf() Dim avg As Double avg = WorksheetFunction.AverageIf( _ Range(“A2:A10”), “営業部”, _ Range(“B2:B10”)) Debug.Print “営業部の平均: ” & Round(avg, 1) End Sub
▶ 実行結果(部署別の平均点数)
営業部の平均: 82.5
💡 WorksheetFunction.AverageIf で条件付き平均
Sub MonthlyReport() Dim ws As Worksheet, i As Long Set ws = ActiveSheet Dim lastRow As Long lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To lastRow ws.Cells(i, 4).Value = _ WorksheetFunction.AverageIf( _ Range(“A2:A” & lastRow), _ ws.Cells(i, 1).Value, _ Range(“C2:C” & lastRow)) Next i MsgBox “レポート作成完了” End Sub
▶ 実行イメージ
📝 A列の部署名ごとにC列の平均を計算
📈 D列に部署別平均値を自動書き込み
月次レポートの定型処理を自動化

WorksheetFunction.Averageの使い方

VBAからAVERAGE関数を呼び出すには、WorksheetFunction.Averageメソッドを使います。

Sub CalcAverage()
    Dim ws As Worksheet
    Set ws = ActiveSheet

    ' セル範囲の平均を計算
    Dim avgValue As Double
    avgValue = WorksheetFunction.Average(ws.Range("B2:B20"))

    ' 結果を表示
    MsgBox "平均値: " & Format(avgValue, "#,##0.00")

    ' 結果をセルに出力
    ws.Range("D1").Value = "平均値"
    ws.Range("D2").Value = avgValue
End Sub

WorksheetFunction経由で呼び出すことで、Excelの関数と同じ計算ロジック(空白・文字列の無視など)が適用されます。

条件付き平均のVBA実装

AVERAGEIF関数に相当する処理もVBAで実装できます。WorksheetFunction.AverageIfを使う方法と、ループで手動実装する方法の2つを紹介します。

Sub CalcConditionalAverage()
    Dim ws As Worksheet
    Set ws = ActiveSheet

    ' --- 方法1: WorksheetFunction.AverageIf ---
    Dim avgSales As Double
    On Error Resume Next
    avgSales = WorksheetFunction.AverageIf( _
        ws.Range("A2:A100"), "営業部", ws.Range("C2:C100"))
    If Err.Number <> 0 Then
        avgSales = 0
        MsgBox "該当データがありません", vbExclamation
        Err.Clear
    End If
    On Error GoTo 0

    ws.Range("E2").Value = avgSales

    ' --- 方法2: For Eachループで手動実装 ---
    Dim cell As Range
    Dim total As Double
    Dim count As Long

    For Each cell In ws.Range("A2:A100")
        If cell.Value = "営業部" Then
            total = total + cell.Offset(0, 2).Value
            count = count + 1
        End If
    Next cell

    If count > 0 Then
        ws.Range("E3").Value = total / count
    Else
        ws.Range("E3").Value = "データなし"
    End If
End Sub

WorksheetFunction.AverageIfは該当データが0件だとエラーになるので、On Error Resume Nextでエラーハンドリングを入れましょう!

レポート自動生成VBA

部署別の平均売上レポートを自動生成するマクロです。実務でそのまま使えるコードになっています。

Sub GenerateAverageReport()
    Dim wsSrc As Worksheet, wsRpt As Worksheet
    Set wsSrc = ThisWorkbook.Sheets("売上データ")

    ' レポートシートの作成(既存なら削除して再作成)
    On Error Resume Next
    Application.DisplayAlerts = False
    ThisWorkbook.Sheets("平均レポート").Delete
    Application.DisplayAlerts = True
    On Error GoTo 0

    Set wsRpt = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.count))
    wsRpt.Name = "平均レポート"

    ' ヘッダー設定
    wsRpt.Range("A1").Value = "部署別平均売上レポート"
    wsRpt.Range("A1").Font.Size = 14
    wsRpt.Range("A1").Font.Bold = True
    wsRpt.Range("A3").Value = "部署名"
    wsRpt.Range("B3").Value = "データ件数"
    wsRpt.Range("C3").Value = "平均売上"
    wsRpt.Range("D3").Value = "最大値"
    wsRpt.Range("E3").Value = "最小値"
    wsRpt.Range("A3:E3").Font.Bold = True
    wsRpt.Range("A3:E3").Interior.Color = RGB(59, 130, 246)
    wsRpt.Range("A3:E3").Font.Color = RGB(255, 255, 255)

    ' 部署一覧を取得(重複排除)
    Dim lastRow As Long
    lastRow = wsSrc.Cells(wsSrc.Rows.count, "A").End(xlUp).Row

    Dim deptDict As Object
    Set deptDict = CreateObject("Scripting.Dictionary")
    Dim i As Long
    For i = 2 To lastRow
        Dim dept As String
        dept = wsSrc.Cells(i, 1).Value
        If dept <> "" And Not deptDict.Exists(dept) Then
            deptDict.Add dept, True
        End If
    Next i

    ' 部署ごとに集計
    Dim rptRow As Long
    rptRow = 4
    Dim key As Variant
    For Each key In deptDict.Keys
        wsRpt.Cells(rptRow, 1).Value = key

        On Error Resume Next
        wsRpt.Cells(rptRow, 2).Value = WorksheetFunction.CountIf( _
            wsSrc.Range("A2:A" & lastRow), key)
        wsRpt.Cells(rptRow, 3).Value = WorksheetFunction.AverageIf( _
            wsSrc.Range("A2:A" & lastRow), key, _
            wsSrc.Range("C2:C" & lastRow))
        wsRpt.Cells(rptRow, 4).Value = WorksheetFunction.MaxIfs( _
            wsSrc.Range("C2:C" & lastRow), _
            wsSrc.Range("A2:A" & lastRow), key)
        wsRpt.Cells(rptRow, 5).Value = WorksheetFunction.MinIfs( _
            wsSrc.Range("C2:C" & lastRow), _
            wsSrc.Range("A2:A" & lastRow), key)
        On Error GoTo 0

        ' 数値書式設定
        wsRpt.Cells(rptRow, 3).NumberFormat = "#,##0"
        wsRpt.Cells(rptRow, 4).NumberFormat = "#,##0"
        wsRpt.Cells(rptRow, 5).NumberFormat = "#,##0"

        rptRow = rptRow + 1
    Next key

    ' 列幅の自動調整
    wsRpt.Columns("A:E").AutoFit

    ' 作成日時を記入
    wsRpt.Cells(rptRow + 1, 1).Value = "作成日時: " & Format(Now, "yyyy/mm/dd hh:nn:ss")
    wsRpt.Cells(rptRow + 1, 1).Font.Color = RGB(128, 128, 128)

    MsgBox "レポートを作成しました!" & vbCrLf & _
           "部署数: " & deptDict.count & " 部署", vbInformation
End Sub

このマクロは「売上データ」シートのA列(部署名)とC列(売上)を読み取り、部署ごとの平均・最大・最小を「平均レポート」シートに出力します。毎月の集計作業を自動化できます。

{VBA_DEMO}

よくある質問(FAQ)

Q. AVERAGE関数で空白セルは計算に含まれますか?

いいえ、空白セルはAVERAGE関数の計算に含まれません。空白セルは無視されるため、分母(データの個数)にもカウントされません。例えば、5つのセルのうち2つが空白なら、残り3つのデータで平均が計算されます。0が入力されたセルは計算に含まれるため、「空白」と「0」では結果が異なる点に注意してください。

Q. AVERAGEIFとAVERAGEIFSの違いは何ですか?

AVERAGEIFは1つの条件で平均を求める関数、AVERAGEIFSは複数の条件(AND条件)で平均を求める関数です。また、引数の順序が異なります。AVERAGEIFは「条件範囲, 条件, 平均対象範囲」の順ですが、AVERAGEIFSは「平均対象範囲, 条件範囲1, 条件1, …」の順で、平均対象範囲が最初に来ます。条件が1つだけならAVERAGEIF、2つ以上ならAVERAGEIFSを使いましょう。

Q. AVERAGE関数で#DIV/0!エラーが出る原因は?

#DIV/0!エラーは、計算対象の数値データが1つもない場合に発生します。セル範囲がすべて空白、すべて文字列、またはAVERAGEIF/AVERAGEIFSで条件に一致するデータが0件のときに起こります。IFERROR関数で囲めばエラーの代わりに任意のメッセージを表示できます。=IFERROR(AVERAGE(B2:B10), “データなし”) のように書きます。

Q. 加重平均をExcelで求めるにはどうすればいいですか?

AVERAGE関数は単純平均しか計算できないため、加重平均にはSUMPRODUCT関数とSUM関数を組み合わせます。=SUMPRODUCT(数量範囲, 単価範囲) / SUM(数量範囲) と書くことで、数量を重みとした加重平均単価が求まります。例えば、商品ごとに販売数と単価が異なる場合の平均単価を正しく計算できます。

Q. AVERAGE関数の結果を四捨五入するには?

ROUND関数でAVERAGE関数を囲みます。=ROUND(AVERAGE(B2:B10), 0) で小数点以下を四捨五入、=ROUND(AVERAGE(B2:B10), 2) で小数第3位を四捨五入して第2位まで表示します。切り捨てにはROUNDDOWN、切り上げにはROUNDUP関数を使います。表示だけ変えたい場合は、セルの書式設定で小数点以下の桁数を指定する方法もあります。

まとめ

この記事では、ExcelのAVERAGE関数・AVERAGEIF関数・AVERAGEIFS関数の使い方を基本から応用、VBA自動化まで解説しました。

AVERAGE関数ファミリーのポイントまとめ
  • AVERAGE関数: =AVERAGE(範囲) で数値の単純平均を計算。空白・文字列は無視される
  • AVERAGEIF関数: 1つの条件で絞り込んだ平均を計算。比較演算子やワイルドカードが使える
  • AVERAGEIFS関数: 複数条件(AND)で絞り込んだ平均を計算。引数の順序に注意
  • 応用テクニック: LARGE/SMALLで上位N件平均、TRIMMEANで外れ値除外、SUMPRODUCTで加重平均
  • エラー対策: IFERRORで#DIV/0!に対処。文字列データはVALUE関数で変換
  • VBA自動化: WorksheetFunction.Average/AverageIfで関数をVBAから呼び出し可能

AVERAGE関数は基本中の基本ですが、AVERAGEIF・AVERAGEIFSと組み合わせることで強力なデータ分析ツールになります。VBA自動化も活用して、日々の業務を効率化していきましょう。


Excelスキルを活かしてSNS運用も自動化しませんか?

Excelの関数をマスターしたあなたなら、Googleスプレッドシート×GAS(Google Apps Script)を使ったSNS自動化ツールもすぐに使いこなせます。X(Twitter)やThreadsの予約投稿を、月額0円で自動化する方法をまとめています。

SNS予約投稿ツール完全ガイド|無料&買い切りツールを徹底比較

Excel業務の自動化
その手作業、自動化しませんか?

VBA開発・GAS連携・Webアプリ化まで、
業務に合わせた最適な自動化をご提案します。

1,600部ツール販売実績
15年製造業の業務経験
無料で相談する →
初回相談無料・お見積りだけでもOK

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT ME
しんたろ。
しんたろ。
Excel歴10年以上 → アプリ開発者
大手メーカーに15年以上勤務。製造部門で海外拠点の立ち上げ支援や、現場責任者として採算管理・納期管理・設備オペレートを経験。 2023年にDX人材育成プログラム第1期生として活動後、現在は製造現場のスケジュール運用を支えるアプリの企画・開発をメインに活動中。工程表示表作成の内製化SaaSを構築し、年間1,300万円のコスト改善を実現。 Excelによる業務改善で年間240時間の残業削減を達成した経験を活かし、ブログやSNSでも情報発信しています。
記事URLをコピーしました