アプリ版:「スタンプのみでお礼する」機能のリリースについて

 はじめまして、よろしくお願いします。
シート2に
   A  B  C  D  ・  ・  ・  ・  IV
1       赤  青  ・  ・  ・  ・  ・ 
2       7  14  ・  ・  ・  ・  ・
3       6  12  ・  ・  ・  ・  ・
4       5  10  ・  ・  ・  ・  ・
5       4  8   ・  ・  ・  ・  ・
6       3  6   ・  ・  ・  ・  ・
7       2  4   ・  ・  ・  ・  ・
8       1  2   ・  ・  ・  ・  ・

 という表があります。その表の(C5-C6),(C4-C5),(C3-C4),(C2-C3)の平均値をシート1のC2へ、同じく(D5-D6),(D4-D5),(D3-D4),(D2-D3)の平均値をシート1のD2へ、列IVまで計算するVBAの仕方を教えていただきたいと思います。実際のシートでは計算行数はかなり多くなります。列では途中空白列があります。できる方、よろしくお願いします。

A 回答 (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)

私が何か勘違いしているような気もしますが……。
    • good
    • 0
この回答へのお礼

 回答ありがとうございます。回答内容を読み、なんと馬鹿な質問をしてしまったのかと自分の軽率さを恥ずかしく思います。

お礼日時:2011/01/27 16:08

こんにちは!


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
    • good
    • 0
この回答へのお礼

 回答ありがとうございます。いい勉強をさせていただきました。ありがとうございます。

お礼日時:2011/01/27 16:13

> (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
    • good
    • 0
この回答へのお礼

 回答ありがとうございます。いい勉強になりました。ありがとうございます。

お礼日時:2011/01/27 16:12

単純に、2行目から6行目までのセルで、上から4組の差の平均値を求めたいなら、マクロを使うより以下のような関数で求めるほうが簡単です。



=AVERAGE(INDEX(Sheet1!C2:C5-Sheet1!C3:C6,))
    • good
    • 0
この回答へのお礼

 回答ありがとうございます。参考にさせていただきたいと思います。

お礼日時:2011/01/27 16:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!