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セルから最終列までを平均計算の対象範囲として設定しています。
例えば、
| A1 | B1 | C1 | D1 |
|---|---|---|---|
| 10 | 20 | 30 | 40 |
の場合は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!」になる
確認ポイント
- 対象範囲に数値が存在するか
- 空白セルだけになっていないか
- 文字列のみになっていないか
サンプルファイル
このコードを実際に試せるサンプルファイルを配布しています。
関連記事
▶ VBAコード集

コメント