• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:グラフを連続的に高速で動かしたいです)

グラフを高速に動かす方法は?

このQ&Aのポイント
  • 添付画像にあるグラフを連続的に高速で動かす方法を教えてください。現在のコードでは1000まで繰り返すのに34秒かかっており、3秒程度に短縮したいと考えています。
  • 現在のコードではグラフの更新が表示されないため、DoEventsを使用しています。グラフの更新が表示されるようにしながら、1000までの繰り返し時間を3秒程度に短縮する方法はありますか?
  • グラフを連続的に高速で動かすための効率的な方法を教えてください。現在のコードでは34秒かかっているため、3秒程度に短縮したいと考えています。また、グラフの更新が表示されない問題にはDoEventsを使用して対応しています。

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

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.4

セル書き込みを止めて直接グラフに値を渡す方法はどうでしょうか。 For i = 1 To 1000 With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1) .XValues = "{0," & i & "}" .Values = "{0," & i & "}" End With Application.ScreenUpdating = True Next

cskw
質問者

お礼

そんな方法があるんですね。 ありがとうございます。 試してみます!

その他の回答 (4)

  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.5

本来の高速描画の主旨とは違いますが みかけだけ早くすることは可能です。 そのグラフ幅からかんがえると300ポイント前後でしょうし、 グラフの線幅も2.25ポイントのようです。 1000回繰り返すということは同じ線をおよそ6回ずつ書き換えているので step 10 くらいにすればいいかと思います。

cskw
質問者

お礼

お礼が遅くなり申し訳ありません ご回答ありがとうございます。 やっぱりステップを10ぐらいにするのがいいですかね。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.3

> このコードですと1000まで繰り返すまでの時間が私のPCでは34秒程掛っています。 > コードの変更のみでこれを3秒ぐらいにできないでしょうか? 1秒あたりに描画する画面数、フレーム毎秒、fpsに直すと、 29.4fpsを333.3fpsにって話になります。 人間の目で見て滑らかに見えるのは20fps程度~です。 相当高速に動作するゲームでも60fps程度を目安にしています。 また一般的なディスプレイのリフレッシュレートは75Hzくらいです。 333.3fps、秒間に300枚描画を行なっても、表示されないし、表示されても認識できないので意味無いって事になると思います。 まずは、刻み幅を10くらいにしてみては? 処理自体は、特にいじるところ無いと思いますが。 1コマずつ画像作成して、動画にしてしまうとか?

cskw
質問者

お礼

回答ありがとうございます。 >1コマずつ画像作成して、動画にしてしまうとか? それは私の技量では難しそうですね~ やっぱり刻みを変えるのがいいですかね~

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

このままでは、グラフの描画で時間がかかるので、改善はできないと思います。 したがって、グラフ描画を適当に端折って、見た目それらしくするしかないと思います。 たとえは、Do Eventをいちいちやらずに、いくつか置きにしたらどうですか。 If i Mod 10 = 0 Then DoEvents End If とするとか、10を適当な数にする。

cskw
質問者

お礼

回答ありがとうございます。 やっぱり更新回数の多さがネックですよね。 端折るしかないですかね

  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.1

ここに書いてあるプロセスでは、時間はかからないので グラフの更新回数を減らすほか無いでしょう。 Sub ボタン1_Click() Dim i As Long Dim s, e As Date s = Now() Range("b3").Value = 0 Range("c3").Value = 0 Application.ScreenUpdating = False For i = 1 To 1000 Range("b3").Value = Range("b3").Value + 1 Range("c3").Value = Range("c3").Value + 1 If (i Mod 20) = 0 Then ' 20回毎に Application.ScreenUpdating = True DoEvents Application.ScreenUpdating = False End If Next e = Now() MsgBox CDate(e - s) End Sub これで望みどおりにいくといいんだけど。

cskw
質問者

お礼

回答ありがとうございます。 グラフの更新回数を減らすか 刻みを10ぐらいにするか しか方法はなさそうですね~ どれが一番早いか検証してみたいと思います。

関連するQ&A