• ベストアンサー

エクセル VBAにおける平均計算につきまして

エクセルにおけるVBAの平均計算に対するプログラミングについて教えてください。 内容としては、 ある列に対して(ここではA列とします)数値が入力されており、 その入力されている範囲は毎回入力する度、入力範囲がまちまちになっているとします。 その「まちまちな入力範囲に対して」平均値をVBAにて求めたい場合、 Averageにて範囲指定を入力する際に、どのようにプログラミングすればよろしいのでしょうか? ※具体的にはA列の「数値が入力されているアクティブなセル」を指定したいのですか、どうすればよいでしょうか? 回答をお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.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/17068)
回答No.2

固定して考える点と、場合によって、変動・変化する点を明確に質問に書くこと。 (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
  • ベストアンサー率65% (1614/2453)
回答No.1

A1から下にまちまちに入力されるとしてB1に結果を出したい場合 With Sheets("Sheet1") .Range("B1").Value = WorksheetFunction.Average(.Range(.Cells(1, "A"), .Cells(Rows.Count, "A").End(xlUp))) End With で試してみてください。

関連するQ&A

  • 各列の平均の求め方

    はじめまして。 よろしくおねがいします。 エクセル2003を使用しています。 4列目に項目が入力してあり、 5列目に平均、 7列目から下に数値が入力されています。 4列目の項目は今の時点で40ほど、 7列目以下の数値は100を越えています。 項目と数値は今後どんどん増えていく予定です。 前は範囲を多めに取って平均を求めていましたが、 数値の数が多くなってきていちいち範囲を変えるのが大変なので、 数値が入力されているセルまでを平均するようなVBAを組みたいです。 よろしくおねがいします。 丸投げで申し訳ございませんが どなたか助けてください。 おねがいします。

  • エクセル 平均値を求めたい

    エクセルでセルに入っている値から平均値を求めたい。 この時、平均値を求めるにあたって条件があるのですが分かる方いらっしゃいますか? <条件> 0の値は無視して平均値を求める。 <セル値>     A 1   3 2   0 3   7 5   5 A1=3,A2=0,A3=7から平均値を求める時、値が入っている箇所のみ反映され 計算される方法が知りたいです。 上記値を合計すると10になり平均値は5になるようにA5に計算式を入れたいと思います。 「AVERAGE」「MEDIAN」を使用すると合計の数は10でいいのですが 割る数が0の行も含み3となってしまいます。 できれば0と入力されている所は無視して10÷2になるようにしたいのですが どう式を組んだらよろしいでしょうか? ちなみに範囲(A1~A3)を狭くすることなく算出できればと思っています。 よろしくお願いします。

  • エクセルVBAで平均を求める

    こんにちわ。 エクセルVBA初心者です。 質問1 VBAで平均を求めているのですが、セルに関数が入ってしまいます。 これを入らずに計算できるようにするには、どのようにすればよい でしょうか。 質問2 また、現状10000行まで計算できるようにしておりますが、本当は、 エクセルの限界まで(確か6万・・・行だったと思いますが)したい のですが、どうすればよいでしょうか。 【補足】 P、Q列に夫々、F列の5つ平均(P)、25つ平均(25)を表示させるVBEで作成しています。 ただ、P,Q列を見ていただけるとAverage関数が入っています。 できれば、これを入らないようにしたいのです。 【対象となっているコード】 ※ Module2に記載しています。 Const AVHI1 As Integer = 5 '移動平均日数1 可変にしなければ Const AVHI2 As Integer = 25 '移動平均日数2 可変にしなければ Sub 移動平均() Dim endrh As Integer '最終セル Application.ScreenUpdating = False Worksheets("date").Select 'セル表示形式 Columns("P").Select Selection.NumberFormatLocal = "0.0_ " Columns("Q").Select Selection.NumberFormatLocal = "0.0_ " Range("G1").Select '最終セル Cells(10000, 1).End(xlUp).Select endrh = ActiveCell.Row Range("A2").Select 'データチェック If endrh - AVHI2 < 4 Then MsgBox "移動平均" & AVHI2 & "日分のデータ不足で計算できません" Exit Sub End If 'AVHI1(5日)の終値平均 ------------------------------------------ avhi = AVHI1 + 1 Range(Cells(2, 16), Cells(endrh - AVHI1, 16)).Formula = _ "=AVERAGE(F2:F" & avhi & ")" 'ここをVBAに調整 Range("G1").Select 'AVHI1(25日)の終値平均 ------------------------------------------ avhi = AVHI2 + 1 Range(Cells(2, 17), Cells(endrh - AVHI2, 17)).Formula = _ "=AVERAGE(F2:F" & avhi & ")" 'ここをVBAに調整 Range("G1").Select Cells(1, 16) = AVHI1 & "_SMA" Cells(1, 17) = AVHI2 & "_SMA" Range("G1").Select End Sub

  • プラスの値の平均値の求め方を教えてください

    エクセルで列の中のプラスの数値だけの平均値を求める方法を 教えてください。 例)A1セルからA3セルにそれぞれ1、-3、2と入力されている時、 1と2の平均値(1+2/2=1.5)を求めたいので、 =average(if(A1:A3>1,A1:A3)) という式を作ったのですが、エラー(#value!)になってしまいます。 どのようにすれば正しい答えが求められるのでしょうか? よろしくお願いします。

  • 各個体に対する平均値の自動計算(VBA-マクロ)

    各個体に対する平均値の自動計算(VBA-マクロ)  VBAマクロのほぼ初心者です。 言葉だけではうまく説明できないので、画像を添付しました(データ例.jpg)。 ある列に入力されている各個体(A列)に対応する数値(B列)の平均値を自動計算したいです。 各個体のB列1行目は空白になっていて、それぞれの計算結果をそこに入力されるようにしたいです。 *各個体はすでに昇順で並んでいる状態です。 Do~Loopなど利用して色々試したのですが、なかなかうまくいきません。。 よい方法がありましたら、教えていただきたいです。 どうぞよろしくお願いいたします。

  • ExcelのAVERAGE関数で、ゼロを含めない平均値の出し方

    いつも大変お世話になっております。 ExcelにAVERAGE関数がありますが、セル内に予め数式を入れておいて、その結果から平均値を出したい場合、数式の結果が出ているものだけ(つまりゼロでないものだけ)の数で平均値を出したいのですが、何か良い方法はありますか? 具体的には 4月 5月 6月 7月 8月 9月 上期 4  3  2  0  0  0  平均値を算出 上記のような表があり、数字はそれぞれ数式より算出しています。その数値をもとに、「上期」のセルにはAVERAGE関数より平均値を算出したいのですが、6月の時点では、まだ6月までの数値しかなく、7月・8月・9月は計算式だけ入っている状態なので「ゼロ」となります。 6月の時点で、4月~9月の平均値を算出すると(4+3+2+0+0+0)/6をしてしまい、平均値が実際の数値より低くなってしまいます。 そこで、実績のある月だけ(今回は4~6月だけ)の平均値を「上期」セルに出したいのですが、毎回計算式を更新などせず、どのような方法をとればできますか? よろしくお願い致します。

  • EXCELのマクロで・・・

    数値や文字列などが入力されてるセルを自動で範囲指定し、計算式が入っていないところだけを、クリアするにはどのようなVBAを書けばいいんですか? あれば、すごく便利なんですが。 どなたか、教えて下さい。

  • エクセルグラフで0が表示される

    いつものことですみません。 教えてください。 エクセルで折れ線グラフを描画しましたところ、一番最後の表示が0になってしまうのです。 A列に日付(時間)、B列に数値データがリアルタイムに入ってくるので最後の行を特定できません。適当に広い範囲を指定しています。 B列の数値データの平均値(複数)を計算してC列(3平均値)・D列(5平均値)・E列(9平均値)に置いています。 ちなみにセルC3は、=IF(B3="","",AVERAGE(B1:B3))です。 見た目には、なにも表示がなく、0は入っていないのですが・・・ お忙しいとは存じますが、なにとぞよろしくお願いいたします。

  • 関数で求めた2つのセル範囲内の、平均値を出したい。

    日の出から日の入までの範囲の平均温度を求めたいのですが、日の出時刻と日の入り時間はVLOOKUP関数によって求めています。 A列に時刻、B列に温度が並んでいます。 求めた時刻が例えば、日の出6:00(セル番号 A360)、日の入18:00(セル番号 A1080)となっている場合。 当然ながら、=AVERAGE(A360:A1080)と入力すれば可能ですが、 =AVERAGE(VLOOKUP関数数式:VLOOKUP関数数式)はエラーとなります。 =AVERAGE(VLOOKUP関数数式,VLOOKUP関数数式)は2点のみの平均温度となってしまいます。 どのような方法で解決できるでしょうか? あるようで見つからないのですが、指定した範囲内に一致する数値があった場合にそのセル番号を返すような数式はあるのでしょうか?

  • excel 数値と空白がランダムに並んだセルの移動平均

    エクセル2003でA列に適当な数値と空白セルが、上からの順番でランダムに並んでいて、それをもとにB列の各行それぞれに移動平均を出したいと思っています。 移動平均は数値が入力されたセルのみを対象にして空白のセルをとばし、さらに直近の異なる数値をさかのぼって4つ探し、計算対象としたいのですがどのようにしたらよいでしょうか? 宜しくお願い致します。

専門家に質問してみよう