• ベストアンサー

■VBA■ SUMとAVERAGEの違い

A列に5分毎のデータが並んでいて、このデータの30分毎の平均や合計をB列に出力したいとします。 このとき、以下のマクロを実行すると 「WorksheetFunctionクラスのAverageプロパティを取得できません。」 というエラーが出てしまいます。 Dim i As Integer For i = 1 To 1000 Cells(7 + i, 2).FormulaR1C1 = Application.WorksheetFunction.Average(Range(Cells(1 + 6 * i, 1), Cells(6 + 6 * i, 1))) Next しかし、Averageの部分をSumにすると実行できるのです。。。 なぜでしょうか????? それから、5分毎のデータを30分毎のデータに変換する良い方法があったらそちらも加えて教えてください!!

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 もともと、VBAの元の基本的なプロパティの書き方がヘンだと思いますが、それは置いておいて、 質問の元が、どういう状態で、どのようになるか書かれていませんから、それは、こちらの想像の範囲として、コードをみると、1007行目まで入れるようになっています。しかし、データ自体はそこまで(6000行)なさそうです。少なくとも、WorksheetFunction の場合は、「0を0で割る(#DIV/0)」エラーが問題です。 行間を空けずにまとめてしまうというなら、 Sub Test1() Dim i As Long Dim j As Long Dim EndRow As Long EndRow = Cells(Rows.Count, 1).End(xlUp).Row If EndRow Mod 6 Then j = 0 Else j = 1 End If For i = 1 To Int(EndRow / 6) - j Cells(7 + i, 2).Value = Application.WorksheetFunction.Average(Range(Cells(1 + 6 * i, 1), Cells(6 + 6 * i, 1))) Next End Sub

pingodoce
質問者

お礼

ありがとうございます! 他の方の回答も参考に書き直してみたらスマートなマクロが書けました! これで作業も捗りそうです!!

その他の回答 (2)

回答No.2

Average を Sum に変えると実行可能ということは、Average だとエラーになるような数式ってことじゃないでしょうか? 例えば要素数が0とか。

pingodoce
質問者

お礼

その通りでした! ご指摘ありがとうございます!

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

試してみましたが Sumでも Averageでも大丈夫でした。 「WorksheetFunctionクラスのAverageプロパティを取得できません。」 Range(Cells(1 + 6 * i, 1), Cells(6 + 6 * i, 1))で指定している範囲が 全て空白であるとかではないでしょうか。 空白の合計は 0 でも、空白の平均はエラーだと思います。

pingodoce
質問者

お礼

その通りでした! ありがとうございます! そして初歩的なミスですみませんでした。。。

関連するQ&A