- ベストアンサー
エクセルVBAで表の平均値を出す
- エクセルVBAを使用して表の平均値を求める方法を教えてください。
- 計算するセル範囲は(C5-C6),(C4-C5),(C3-C4),(C2-C3)と(D5-D6),(D4-D5),(D3-D4),(D2-D3)です。
- 途中に空白列がある場合でも、列IVまで計算する方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> (C5-C6),(C4-C5),(C3-C4),(C2-C3)の平均値 って、(C2-C6)/4と言う意味でよろしいですか?(例の場合、(7-3)/4=1 ) その程度ならVBAでは無く演算式で、Sheet1のC2に↓を入れて右方向にコピーしては? =IF(Sheet2!C2="","",(Sheet2!C2-Sheet2!C6)/4) 私が何か勘違いしているような気もしますが……。
その他の回答 (3)
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! 6行目以下にデータがあっても関係なく2行目~6行目で操作すればよいわけですよね? 一応そういうことだとして・・・ 尚、空白セルは「0」とみなしてしまいますが、 ごく簡単な一例です。 ↓のコードを標準モジュールにコピー&ペーストしてマクロを実行してみてください。 Sub test() 'この行から Dim i, j As Long Dim Val1, Val2 As Variant Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") Set ws2 = Worksheets("sheet2") For i = 3 To 256 For j = 2 To 5 Val1 = ws1.Cells(j, i) - ws1.Cells(j + 1, i) Val2 = Val2 + Val1 Next j ws2.Cells(3, i) = Val2 / 4 Val2 = 0 Next i End Sub 'この行まで 外していたらごめんなさいね。m(__)m
お礼
回答ありがとうございます。いい勉強をさせていただきました。ありがとうございます。
- merlionXX
- ベストアンサー率48% (1930/4007)
> (C5-C6),(C4-C5),(C3-C4),(C2-C3)の平均値 C5からC6を引いたもの+C4からC5を引いたもの+C3からC4を引いたもの+C2からC3を引いたものを4で割るってことですか? では一例です。 途中に空白があるとのことですが、特に指定が無いので空白は0とみなしました。 Sub test01() Dim myV, myW Dim i As Long, n As Long, j As Long myV = Sheets("Sheet2").Range("C2:IV6").Value ReDim myW(1 To UBound(myV, 2)) For j = 1 To UBound(myV, 2) n = 0 For i = 1 To UBound(myV) - 1 n = n + 1 myW(j) = myW(j) + myV(i, j) - myV(i + 1, j) Next i myW(j) = myW(j) / n Next j Sheets("Sheet1").Range("C2").Resize(, UBound(myV, 2)) = myW End Sub
お礼
回答ありがとうございます。いい勉強になりました。ありがとうございます。
- MackyNo1
- ベストアンサー率53% (1521/2850)
単純に、2行目から6行目までのセルで、上から4組の差の平均値を求めたいなら、マクロを使うより以下のような関数で求めるほうが簡単です。 =AVERAGE(INDEX(Sheet1!C2:C5-Sheet1!C3:C6,))
お礼
回答ありがとうございます。参考にさせていただきたいと思います。
お礼
回答ありがとうございます。回答内容を読み、なんと馬鹿な質問をしてしまったのかと自分の軽率さを恥ずかしく思います。