• ベストアンサー

エクセル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で解る方、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.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

kei__2000
質問者

お礼

 解答ありがとうございます。親切に説明まで付けて頂き、大変参考になりました。ありがとうございました。

その他の回答 (1)

  • yone_sk
  • ベストアンサー率34% (58/167)
回答No.1

Range("A1") Range("B1") を起点として Forで100回ループ (又は「SpecialCells(xlLastCell).row」で最終行を取得してループ) OffsetでA列とB列の行をインクリメントしながら 同じくOffsetでC列とD列の値を取得すればできると思います。 わからないところがあれば解説しますが、考えてみてください^^ (他にも簡単なやり方があるかもしれないので、参考程度に)

kei__2000
質問者

お礼

解答ありがとうございます。申し訳ありません、当方素人で全く解りません。とりあえず検索して考えてみます。

関連するQ&A