- ベストアンサー
VBAでSheet2のデータを取得し、Sheet1に平均値をコピーする方法
- VBAを使用して、Sheet2の指定セルのデータの平均値をSheet1の指定セルにコピーする方法がうまくいきません。
- 具体的な例として、Sheet1とSheet2にそれぞれデータがあり、Sheet2の列Cの1行目から3行目までの平均値をSheet1の指定セルに取得したいと考えています。
- しかし、現在のコードではうまく動作しません。forループと変数を使用してデータを一括で取得しようとしていますが、それがうまくいきません。
- みんなの回答 (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 こんな感じ
その他の回答 (1)
- hige_082
- ベストアンサー率50% (379/747)
>このような感じにしたいと思い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 以上、参考まで
お礼
どうもありがとうございました。 i= がある以上r.uは不要でしたね。
お礼
どうもありがとうございました。 (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