VBAで平均を計算するコード(AVERAGE関数)|横並びの数値を自動で集計する方法

Excel VBAで1行目の数値を自動で平均計算するコードです。

データ数が増減しても自動で最終列を取得し、平均値を計算できます。

売上平均や点数平均など、実務でもよく利用されるサンプルです。

VBA初心者の方でもコピペですぐに試せます。


このコードでできること

  • 1行目の最終列を自動取得
  • A1から最終列までの平均を計算
  • データ数が増減しても対応
  • AVERAGE関数をVBAで実行
  • 計算結果を指定セルへ出力
  • コピペですぐ利用可能

VBAコード

Sub CalculateAverageInRow1()
    Dim ws As Worksheet
    Dim lastCol As Long
    Dim rng As Range
    
    ' 対象のシートを指定(現在はアクティブシート)
    Set ws = ActiveSheet
    
    ' 1行目の最終列を取得
    lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
    
    ' 平均を求める範囲(1行目のA列から最終列まで)を定義
    Set rng = ws.Range(ws.Cells(1, 1), ws.Cells(1, lastCol))
    
    ' セルB2に平均値を算出・表示
    ' WorksheetFunction.Averageを使用して平均を計算します
    ws.Range("B2").Value = Application.WorksheetFunction.Average(rng)
End Sub

コードの解説

対象シートを設定

Set ws = ActiveSheet

現在開いているシートを対象にします。

別のシートを指定したい場合はシート名を指定することもできます。


最終列を取得

lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

1行目の右端から左方向へ検索し、データが入力されている最後の列番号を取得します。

データ件数が増減しても自動で対応できます。


平均計算範囲を設定

Set rng = ws.Range(ws.Cells(1, 1), ws.Cells(1, lastCol))

A1セルから最終列までを平均計算の対象範囲として設定しています。

例えば、

A1B1C1D1
10203040

の場合はA1:D1が対象になります。


AVERAGE関数で平均を計算

Application.WorksheetFunction.Average(rng)

ExcelのAVERAGE関数をVBAから実行しています。

数値のみを対象として平均値を計算します。


結果をB2へ出力

ws.Range("B2").Value = Application.WorksheetFunction.Average(rng)

計算した平均値をB2セルへ表示します。


カスタマイズ例

A列の縦計算でB3に結果を出す方法

変更箇所

lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Set rng = ws.Range("A1:A" & lastRow)

ws.Range("B3").Value = Application.WorksheetFunction.Average(rng)

A列の最終行までを対象に平均値を計算し、B3へ表示します。


1行目の横計算でB2に結果を出す方法

今回のサンプルコードそのままです。

ws.Range("B2").Value = Application.WorksheetFunction.Average(rng)

1行目のデータを平均し、B2へ表示します。


B3~L82の縦横計算で行平均はM列、列平均は83行目、総平均はM83へ表示する方法

行平均

Cells(i, "M").Value = Application.WorksheetFunction.Average(Range(Cells(i, "B"), Cells(i, "L")))

列平均

Cells(83, j).Value = Application.WorksheetFunction.Average(Range(Cells(3, j), Cells(82, j)))

総平均

Range("M83").Value = Application.WorksheetFunction.Average(Range("B3:L82"))

行ごとの平均、列ごとの平均、全体平均を一括で表示できます。

売上管理表や集計表でよく利用される方法です。


よくあるエラー

【症状】実行時エラー「1004」が表示される

確認ポイント

  • 平均対象範囲に数値が入力されているか
  • 範囲指定が正しいか
  • シートが保護されていないか

【症状】平均値が表示されない

確認ポイント

  • B2セルが結合セルになっていないか
  • マクロが有効になっているか
  • コードを標準モジュールへ登録しているか

【症状】結果が「#DIV/0!」になる

確認ポイント

  • 対象範囲に数値が存在するか
  • 空白セルだけになっていないか
  • 文字列のみになっていないか

サンプルファイル

このコードを実際に試せるサンプルファイルを配布しています。

サンプルファイルをダウンロード(ZIP)


関連記事

SUM関数不要!ボタン1つで合計を出す方法

VBAファイルの保存方法(.xlsm)

VBAコード集


コメント