- ベストアンサー
エクセル VBAにおける平均計算につきまして
エクセルにおけるVBAの平均計算に対するプログラミングについて教えてください。 内容としては、 ある列に対して(ここではA列とします)数値が入力されており、 その入力されている範囲は毎回入力する度、入力範囲がまちまちになっているとします。 その「まちまちな入力範囲に対して」平均値をVBAにて求めたい場合、 Averageにて範囲指定を入力する際に、どのようにプログラミングすればよろしいのでしょうか? ※具体的にはA列の「数値が入力されているアクティブなセル」を指定したいのですか、どうすればよいでしょうか? 回答をお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
VBAにAverageという名の関数、AVGという名の平均を求める関数はありません。 エクセルワークシート関数のAverageを普通は使います。ただし https://www.moug.net/tech/exopr/0090041.html を参考にし、注意してください。 ーーー 参考 除きたいもの(とえば0)の条件を加えるなら、 下記 If cl <> "" And IsNumeric(cl) Thenのところへ加えます。 If Cl <> "" And IsNumeric(Cl) And Cl <> 0 Then 別途ワークシート関数にもAverageIfがあり、それを使うのも手ですが。 ーーー Sub test01() t = 0: k = 0 For Each cl In Range("a2:A1000") If cl <> "" And IsNumeric(cl) Then t = t + cl.Value: k = k + 1 Else End If Next MsgBox "合計" & t & "件数" & k & "平均 " & Round(t / k, 1) End Sub ーー ご存じでしょうが、シート画面の、(下部に出る)ステータスバー部には、平均の値が出ています。 ーーー 参考 https://q.hatena.ne.jp/1244442466 VBAのマクロに関する質問です。 average("A2:A5") に相当する平均値の計算をしたいのです。average(cells(なんどか),cells(なんどか))というように、cells で平均値の計算をする範囲を指定したいのですが、どうするといいのでしょうか? ーー ワークシート関数を使うには、WorksheetFunctionオブジェクトを使います。 myAve = Application.WorksheetFunction.Average(Cells(Y1, X1), Cells(Y2, X2))
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
固定して考える点と、場合によって、変動・変化する点を明確に質問に書くこと。 (1)A列というのは固定して考えてよいのか。 (2)最初のデータ行は2(第1行は項目見出し)としてよいのか。 (3)データ数は都度変動し、それを対象に考えるのだろう。 するとデータのA列での最終行を求めるVBAが必要になるか、#1のご回答の 方法や、CurrentRegionを使う方法やxlDownを使う方法などがある。 (4)対象セルに数値以外も入力されていることを備えるのか。 一応対象範囲の全セルに対し、IsNumericでチェックするか? (5)「まちまちな入力範囲に対して」は、まさかA列内の「飛び飛び」のセル範囲は考えていないのだろうね。 (6)「アクティブなセル」は表現がおかしいのでは?どういうことを言おうとしているのか? CTRLキーを押しつつ、複数キーをクリックして、下記を実行しても1つのセルしか返って来ないが? Sub test01() MsgBox ActiveCell.Address End Sub まだまだ勉強が必要で、単純な例から考えるべきと思うが、どういうのが単純な例か(どういうケースが複雑=プログラム的に難しい・手数がかかる)の判別力を磨くことが大切だと思う。
- kkkkkm
- ベストアンサー率66% (1719/2589)
A1から下にまちまちに入力されるとしてB1に結果を出したい場合 With Sheets("Sheet1") .Range("B1").Value = WorksheetFunction.Average(.Range(.Cells(1, "A"), .Cells(Rows.Count, "A").End(xlUp))) End With で試してみてください。