人に聞けない痔の悩み、これでスッキリ >>

sheet2指定セルデーターから平均
sheet1指定セルに取得したいのですがうまくいきません。

sheet1       sheet2
列A  列B 列C  列A  列B 列C
1  2 指定  1  2  3
1  2  3   1  2  3
1  2  3   1  2  3

sheet2・列C1~3の平均を、sheet1・指定セルに取得したいのですが

Sub test()
Dim r As Long, u As Long, ws1 As Object, ws2 As Object, y As Long

r = 10
u = 1

Set ws1 = Sheets(1)
Set ws2 = Sheets(2)

y = ws1.Range("A" & Rows.Count).End(xlUp).Row

Dim myAve As Long

myAve = Application.WorksheetFunction.Average(ws2.Range(Cells(3, u), Cells(7, u)))

ws1.Cells(r, 7).Value = "myAve"

r = r + 1

u = u + 1

End Sub

変数y r u を使いfor~nextでデーターを一括取得するつもりなのですが
この段階でうまくいきません。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>ws1.Cells(r, 7).Value = "myAve"


変数の使用方法が間違っています
ws1.Cells(r, 7).Value = myAve
>変数y r u を使いfor~nextでデーターを一括取得するつもりなのですが
う~ん、コードからは読み取れませんし、for~nextを使用するような内容でも無いと思います

質問のコードをなるべく使用すると
Sub test()
Dim r As Long, ws1 As Object, ws2 As Object, y As Long
r = 10
Set ws1 = Sheets(1)
Set ws2 = Sheets(2)
y = ws2.Range("C" & Rows.Count).End(xlUp).Row
ws1.Cells(r, 7).Value = Application.WorksheetFunction.Average(ws2.Range(ws2.Cells(1, 3), ws2.Cells(y, 3)))
End Sub
こんな感じ
    • good
    • 0
この回答へのお礼

どうもありがとうございました。
(ws2.Range(Cells(3, u), Cells(7, u)))
(ws2.Range(ws2.Cells(3, u), ws2.Cells(7, u)))
に直し
ws1.Cells(r, 7).Value = myAve
に、直した結果できました。
>う~ん、コードからは読み取れませんし、for~nextを使用するような内容でも無いと思います
このような感じにしたいと思いfor~nextかなと思ったのですが。
sheet2
http://www.geocities.jp/gimonyou01/ws4.jpg
sheet1
http://www.geocities.jp/gimonyou01/ws3.jpg
VB
http://www.geocities.jp/gimonyou01/ws2.jpg

お礼日時:2009/10/27 00:44

>このような感じにしたいと思いfor~nextかなと思ったのですが。


リンク先を見て分りました

'簡単な解説とチョッと修正

Sub test()
'Dim r As Long, u As Long, ws1 As Object, ws2 As Object, y As Long
'変数の宣言をまとめました
Dim ws1 As Worksheet, ws2 As Worksheet
Dim myAve As Long
Dim r As Long, u As Long
Dim i As Long, y As Long

'r = 10   'アへ
'u = 1    'イへ

Set ws1 = Sheets(1)
Set ws2 = Sheets(2)

y = ws1.Range("A" & Rows.Count).End(xlUp).Row

'Dim myAve As Long  ’変数の宣言は、まとめた方が良いです
'Dim i As Long

For i = 10 To y

r = i    'ア
u = r - 9  'イ

myAve = Application.WorksheetFunction.Average(ws2.Range(ws2.Cells(3, u), ws2.Cells(7, u)))

ws1.Cells(r, 7).Value = myAve

'r = r + 1  ’アとすることで不要になります

'u = u + 1  ’イとすることで不要になります

Next i

End Sub


'私ならこうするかな
'rとuの差が常に9なので
'r=i、u=i-9に、それぞれ置き換えることにより
'for~nextの部分がスッキリするかと思います

Sub test_2()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim i As Long

Set ws1 = Sheets(1)
Set ws2 = Sheets(2)

For i = 10 To ws1.Range("A" & Rows.Count).End(xlUp).Row
ws1.Cells(i, 7).Value = Application.WorksheetFunction.Average(ws2.Range(ws2.Cells(3, i - 9), ws2.Cells(7, i - 9)))
Next i
End Sub

以上、参考まで
    • good
    • 0
この回答へのお礼

どうもありがとうございました。
i= がある以上r.uは不要でしたね。

お礼日時:2009/11/01 19:18

このQ&Aに関連する人気のQ&A

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


人気Q&Aランキング