アプリ版:「スタンプのみでお礼する」機能のリリースについて

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分毎のデータに変換する良い方法があったらそちらも加えて教えてください!!

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/12/11 09:24

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2008/12/11 09:04

試してみましたが Sumでも Averageでも大丈夫でした。


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

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

お礼日時:2008/12/11 09:03

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

このQ&Aを見た人はこんなQ&Aも見ています