• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBA 平均を可変で求めたい)

エクセルVBA 平均を可変で求めたい

このQ&Aのポイント
  • エクセルVBA初心者が可変で平均を計算する方法を教えてください。
  • 為替の5日移動平均線を求めたいが、コードがうまく可変で平均を計算してくれません。
  • 現在のコードでは1日目の平均をずっと継承してしまいます。どのようにすれば可変になるでしょうか?

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

  • ベストアンサー
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.4

平均取得範囲が誤っています。 Range(Cells(2, 16), Cells(endrh - AVHI1, 16)) = WorksheetFunction.Average(Range("F2:F " & avhi & "")) この場合"F2"から"F6"で5セル分の平均となっていますが Range("P" & i) = WorksheetFunction.Average(Range("F" & i & ":F" & i + AVHI1)) この場合はiが2なら"F2"から"F7"(i+AVHI1)までの6セル分の平均となってしまっています。 avhi = AVHI1 - 1 For i = 2 To endrh - AVHI1 Range("P" & i) = WorksheetFunction.Average(Range("F" & i & ":F" & i + avhi)) Next i とすればOKです。 また小数点3位を四捨五入ならRound(値,2)とすればできます。

melon00
質問者

お礼

o_chi_chiさん うまくいきました! ありがとうございます!

その他の回答 (3)

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.3

ワークシート関数を範囲指定したセルへ設定すると自動でセルの位置を変えて設定してくれますが、 ワークシート関数を利用して計算結果だけをセルへ設定しているので同じ値が入るのは当然です。 For~Next等で繰り返す必要があります。 --- For i = 2 To endrh - AVHI1 Range("P" & i) = WorksheetFunction.Average(Range("F" & i & ":F" & i + avhi)) Next i

melon00
質問者

補足

o_chi_chiさん ありがとうございます。 ほぼ希望通りのものができました。 ただ、一点困っているのは、5日(当日を含む)の平均を求めているのですが、どうも数値が違うようなのです、色々と何が違うのかを見ていますが、皆目原因がわかりません。 また、小数点第2位まで表示させていますが、なぜか第3位が繰上げされてしまうようです。例)正;210.86 誤:210.87 どうしたものでしょうか。。 折角ほぼ希望通りだったのですが、小さなところで違います。 avhi = AVHI1 + 1 For i = 2 To endrh - AVHI1 Range("P" & i) = WorksheetFunction.Average(Range("F" & i & ":F" & i + AVHI1)) Next i Range("G1").Select

  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.2

WorksheetFunction.Average(Range("F2:F " & avhi & "")) の範囲指定を変えればよいということでしょうか? 書き方を変えると以下のようになります。 WorksheetFunction.Average(Range(Cells(2,6),Cells(avhi,6)) 書式はRange(開始セル,終了セル)となります。 Cells(行番号,列番号)です。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

でしょう。 だから、 http://okwave.jp/qa4638914.html でいったでしょう。 あなたの言う可変で平均を求めるようにはできますが、繰り返し計算になって、一つずつ計算してセルに入れるから、時間がかかってダメだと。 ワークシート関数は早いけど、数多くやったらやはり時間がかかりますよ。65000もやって御覧なさい。なかなか返ってこないから。 http://okwave.jp/qa4638914.html で私が言ったようにするのが実用的です。

関連するQ&A