例)セル'A1'の数値は1秒毎に更新される。これを線グラフで時系列で描く。
このようなことができるのでしょうか?そのようなアドオンがあるのでしょうか?
よろしくお願いします。
1秒毎に更新されるA1セルを別セルに移す方法はどうでしょうか?
・A1セルに値が入る
・C1セルにA1セルの値を移す
・B1セルに時間データ
・1秒後A1セル更新
・C2セルにA1セルの値を移す
・B2セルに時間データ
これを繰り返し処理させる。
そしてグラフは先にB1:C1000までの折れ線を作っておく。
Cells(x, 2) = Time() 'B列に時間データの入力 Cells(x, 3) = Cells(1, 1) 'A1セルをC列に移す
1秒毎にA1セルが更新される・・という処理がどういう風になっているのかわかりませんが、マクロであれば上のコードを追加してもらえれば可能かと。
>上記のApplication.Waitを実施するとDDEの更新がとまってしまいます。結果、1秒後のデータも同じ物となってしまいます。DDEのデータ更新はランダムに発生します。
>どのようにしたらDDEのデータ更新に影響を与えず、マクロを実行することができるでしょうか?
>教えてください。
Application.OnTimeを使ってみてはどうでしょうか。
標準モジュールを追加して、下記のコードを記述してください
Option Explicit Private nCurrentRow As Integer Private fContinue As Boolean Public Sub StartTimerProc() nCurrentRow = 2 ' 記録開始位置 fContinue = True Call TimerProc End Sub Public Sub StopTimerProc() fContinue = False End Sub Private Sub TimerProc() Dim nextTime As Date With Sheets(1) Cells(nCurrentRow, 2) = Now() Cells(nCurrentRow, 3) = Cells(1, 1) End With If fContinue Then nCurrentRow = nCurrentRow + 1 nextTime = Now() + TimeValue("00:00:01") Application.OnTime nextTime, "TimerProc" End If End Sub
----
記録を開始するときは、マクロの実行で「StartTimerProc」
記録を停止するときは、マクロの実行で「StopTimerProc」
takashi_m17さん、
返答ありがとうございます。勉強になります。
教えてもらった方法でためしてみました。結果はすこし、やりたいことに近づいたようです。もうすこし、教えてください。
セルの値を移すことはできました。教えてもらったように1秒後に移すようにコーディングしました。
If Application.Wait(Now + TimeValue("0:00:01")) Then
Cells(x, 3) = Cells(1, 1)
End If
これもうまくいきました。今回、写し元のデータ(例ではA1セル)はDDEによってデータを更新しています。上記のApplication.Waitを実施するとDDEの更新がとまってしまいます。結果、1秒後のデータも同じ物となってしまいます。DDEのデータ更新はランダムに発生します。
どのようにしたらDDEのデータ更新に影響を与えず、マクロを実行することができるでしょうか?
教えてください。
追伸:Sleepを使ってもLockしているようでした。