• ベストアンサー
※ 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

  • チェックボタンでチェックした値をセルに連続入力

    チェックボタンでチェックした行(表-1)を下記のコードでExcelセル(表-2)に入力できたのですが既にに"B2:E3","B10:E10",に値が入力されている場合、B4から続けて入力したいのですがどのように コードを追記すれば良いのかどなたかわかる方よろしくお願いします。 Sub 入力() Dim i As Integer Dim j As Integer Dim k As Integer k = 3 i = Range("Z65536").End(xlUp).Row For j = 3 To i If Range("Z" & j).Value = True Then k = k + 1 Range("B" & k).Value = k - 1 Range("H" & j, "K" & j).Copy Range("B" & k) End If Next j End Sub

  • 実行中のマクロを中断したい

    過日、「マクロの中断」について質問し適切な回答をいただき無事解決したものです。 ところが、初心者の悲しさ、少し変わると全く応用がききません。 Range("A1:B10")を読み上げている途中で中断したいのです。前回ご教示いただいたところにより 「DoEvents」や「Me.Repaint」「Sleep」などをあちこち挿入してみましたがうまくいきません。理屈、理論を理解できていないので仕方ないのでしょうがよろしかったら又ご指導のほどお願いします。Excel2003です。 Dim c As Range Dim CancelFlg As Integer Private Sub CommandButton1_Click() Range("A1:B10").Select CancelFlg = 0 For Each c In Selection   ’ DoEvents Application.Speech.Speak c.Value  ’ DoEvents If CancelFlg = 1 Then Exit For  ’ DoEvents Next c Range("A1").Select End Sub Private Sub CommandButton2_Click() CancelFlg = 1 End Sub 前回のご教示いただいたもの Private Sub CommandButton1_Click() Dim i As Integer CancelFlg = 0 For i = 1 To 100 DoEvents ActiveCell.Value = 1 ActiveCell.Offset(1, 0).Activate Application.Wait (Now + TimeValue("0:0:01")) If CancelFlg = 1 Then Exit For Next i End Sub Private Sub CommandButton2_Click() CancelFlg = 1 End Sub

  • エクセルで連続印刷した範囲を印刷済とわかるように

    エクセルで以下のようなプログラムで変数s、eに入力の範囲でシートの連続印刷しております。印刷し終わった後ですが、変数s~eの範囲を赤くして印刷済かどうかをひと目でわかるようにしたいと思います。可能でしょうか。 Sub 範囲を指定して印刷() Dim s As Long Dim e As Long Dim i As Long On Error Resume Next s = InputBox("開始No.を入力して下さい。") If s = 0 Then Exit Sub e = InputBox("終了No.を入力して下さい。") If e = 0 Then Exit Sub For i = s To e Worksheets("A").Range("C1") = i Application.Wait Now + TimeSerial(0, 0, 10) Worksheets("B").PrintOut Next i End Sub

  • Excle 表紙作成マクロ

    今、添付しているような表紙を作成しているのですが、下のマクロで印刷からPDF化をしています。 ただ、毎回名前をつけなければいけないので、大変時間がかかります。 どなたか、楽な方法があるなら教えてください。 Sub Test() Dim c As Range Dim Ws As Worksheet Set Ws = Sheets("記録写真(表紙)") For Each c In Sheets("名前").Range("B1:B6") Ws.Range("A10").Value = c.Value '念のため DoEvents Ws.PrintOut Next End Sub

  • Excel2010 VBAについて

    以下のソースを書いて実行したのですが 「実行エラー'1004' WorksheetFunctionクラスのVlookupプロパティを取得できません」 と表示されます Sub 時刻表示() '日本の時間と選択した年の時刻・時差を1秒ごとに表示しなおす Dim City As String Dim Jisa As Long Application.ScreenUpdating = False City = Range("C6").Value Jisa = WorksheetFunction.VLookup(City, _ Worksheets("都市リスト").Range("B3:C14"), 2, False) Range("E7").Value = Jisa Range("C4").Value = Now Range("C7").Value = DateAdd("h", Jisa, Now) Range("C4, C7").NumberFormat = "m/d h:mm:ss" Application.ScreenUpdating = True Application.OnTime Now + TimeValue("0:00:01"), "時刻表示" End Sub Sub 時刻表示終了() '時計を止める Application.OnTime Now + TimeValue("0:00:01"), "時刻表示", Schedule:=False End Sub デバックをすると Application.OnTime Now + TimeValue("0:00:01"), "時刻表示", Schedule:=False がマーカーで引かれます 一応本通りには打ったと思うのですが、、、。 どこが間違えているか教えてください

  • エクセルのマクロでLoopを使うと応答なしになり…

    エクセル2010でタイマーを作って作動させるとかならず応答なしになります。Sleepも使ったのですが応答なしになりました。そうなった理由をできれば教えてください。よろしくお願いします マクロ Sub macro() Dim EndTime As Long Dim PassTime As Long EndTime = Timer + Range("c6").Value * 60 + Range("E6").Value Do PassTime = Timer Range("c6").Value = (EndTime - PassTime) \ 60 '分 Range("e6").Value = (EndTime - PassTime) Mod 60 '秒 Loop Until EndTime - PassTime <= 0 Beep MsgBox "時間だよ" End Sub

  • Excel vba PDF 複数ファイルを一括保存

    以下のコードで、for eachの部分をどのように変えると 1枚のpdfですべて保存出来るか教えてください。 よろしくお願いします。 sub macro1()  dim h as range  worksheets("Sheet1").select  for each h in range("C2:C" & range("C65536").end(xlup).row)   worksheets("Sheet2").select   range("B6").value = h.value   range("E18...

  • Excel ユーザーフォームの入力値をシートに転記

    Excelでユーザーフォームを作りました。 ユーザーフォームには、テキストボックスを2個、ボタンを1個("記入"という文字が入っています)置いてあります。 テキストボックスに入れた数値をSheet1のセル"C24","C25"に転記したいので、ユーザーフォームのコードを次のようにしましたが、エラーメッセージは出ないかわりに何も動いてくれません。 「どこ」と「なに」が違いどうするのが正しいのか教えて下さい。よろしくお願いします。 Private Sub Tbox1_Change() a = Tbox1.Value End Sub ---------------------------- Private Sub Tbox2_Change() b = Tbox2.Value End Sub ---------------------------- Sub 記入Button_Click() '入力値をSheet1に転記 Dim a As Range Dim b As Range Sheets("Sheet1").Select Set a = Range("C24") Set b = Range("C25") End Sub

  • ExcelのVBAで、順次動作の実現

    Excelのシートに、トグルボタンを3つ配置します。 ToggleButton1~3 そして、次のマクロを実行すると、2秒ごとに順番にトグルボタンが押されるのかと思いきや、6秒後に一斉にトグルボタンがへっこみます。 どうにか?2秒ごとに順番にトグルボタンが押されるように出来ないでしょうか? Sub test() Dim MyWait As String MyWait = 2 ToggleButton1.Value = True Application.ScreenUpdating = True DoEvents 'この間にもマクロを入れたい(0.1秒以内に処理できるものです) Application.Wait (Now + TimeValue("0:00:" & MyWait)) ToggleButton2.Value = True DoEvents Application.Wait (Now + TimeValue("0:00:" & MyWait)) ToggleButton3.Value = True Application.ScreenUpdating = True DoEvents End Sub

  • コピペマクロを高速化したい(Excel)

    見よう見まねで以下のようなコードを書いてみたのですが、 これだと表示にやや時間がかかるので改善したいです。 ------ Sub コピペ() Dim i As Long i = Range("A1") Range("C12").Value = Worksheets("sheet2").Cells(i, 2).Value Range("D12").Value = Worksheets("sheet2").Cells(i, 3).Value Range("E12").Value = Worksheets("sheet2").Cells(i, 4).Value Range("F12").Value = Worksheets("sheet2").Cells(i, 5).Value Range("G12").Value = Worksheets("sheet2").Cells(i, 7).Value ------ こんな感じでコピペしたい値があと15個くらいあります。 コピー元とコピー先のセル配置には法則性があまりありません。 よろしくお願いします。

このQ&Aのポイント
  • 機種の違うスマホどうしの音楽ファイルの移動方法を知りたいです。GalaxyのSM-A750CからAQUOSのSense4 SH-M15に音楽ファイルを移したいです。
  • Galaxyの中に入っていた画像はGメールに添付して自分宛てに送信して、AQUOSのGメールアプリを開いて添付ファイルをダウンロードすることで移動できますが、音楽ファイルの移動方法が分かりません。
  • YouTube Musicアプリに追加してある音楽ファイルは新しい端末に引き継がれますが、古い端末にあるGooglePlayMusicの音楽ファイルの移動方法が分かりません。マイクロSDカードを使用する方法も教えて欲しいです。
回答を見る

専門家に質問してみよう