- ベストアンサー
エクセルVBAでのまとめ計算
初めまして、よろしくお願いします。 データーで A B C D E ・・・ 1 5 7 2 2 3 7 0 3 4 6 3 6 5 2 8 3 6 0 3 4 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ 100 3 4 5 という表がありますA列には(C列の値/(D列以降の平均値))をB列には(C列の値-(D列以降の平均値))を表示させたいと思います。たまに3行のような空白の行があります。関数式ではなく、VBAで解る方、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
わざわざVBAでやろうとしているので、VBAの勉強中と行った所でしょうか? コードを書く上で、どこが判らないのか書いて貰えると回答が付き易いと思います。 ポイントを幾つか…… C列で使用されている最終行は Range("C" & ActiveSheet.Rows.Count).End(xlUp).Row 平均は、ワークシート関数の平均(Application.WorksheetFunction.Average)で計算すると空白を除外して平均してくれるので便利 列の最大は ActiveSheet.Columns.Count サンプルとしてはこんな感じ Sub Sample() Dim i, nAve '1行目からC列の最終行までループ For i = 1 To Range("C" & ActiveSheet.Rows.Count).End(xlUp).Row 'C列が空白なら空白行と判断 If Range("C" & i) <> "" Then 'D列以降の平均値(ActiveSheet.Columns.Countが、Excelの最大列数) nAve = Application.WorksheetFunction.Average(Range(Cells(i, 4), Cells(i, ActiveSheet.Columns.Count))) 'A列 Cells(i, 1).Value = Cells(i, 3).Value / nAve 'B列 Cells(i, 2).Value = Cells(i, 3).Value - nAve End If Next i End Sub
その他の回答 (1)
- yone_sk
- ベストアンサー率34% (58/167)
Range("A1") Range("B1") を起点として Forで100回ループ (又は「SpecialCells(xlLastCell).row」で最終行を取得してループ) OffsetでA列とB列の行をインクリメントしながら 同じくOffsetでC列とD列の値を取得すればできると思います。 わからないところがあれば解説しますが、考えてみてください^^ (他にも簡単なやり方があるかもしれないので、参考程度に)
お礼
解答ありがとうございます。申し訳ありません、当方素人で全く解りません。とりあえず検索して考えてみます。
お礼
解答ありがとうございます。親切に説明まで付けて頂き、大変参考になりました。ありがとうございました。