• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DDE(エクセル)から取れるデータから時間ごとにトラッキング)

DDE(エクセル)から取れるデータを時間ごとにトラッキングする方法

このQ&Aのポイント
  • DDE(エクセル)を利用してリアルタイムでデータを取得し、時間ごとに履歴をつける方法について教えてください。
  • 関数またはVBを使用して、DDE(エクセル)から取れるデータを時間ごとに履歴化する方法を教えてください。
  • DDE(エクセル)で取得したデータを時間別に整理する方法について教えてください。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

補足: ダミーの数式は、 G列以降に、 =COUNT(A:F) ということでもよいと思います。 (F列ですと、循環参照になります) 時間の区切りは、07:36:45 を判定しても可能です。 なお、2008/04/14 07:36:45 が1セルに入っているなら、1列減らしてお読みください。

すると、全ての回答が全文表示されます。

その他の回答 (6)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

こんにちは。 もう一度、私の以前の開発上のログを読んでみました。 Microsoft 側のサポートは、古すぎてダメだったのですが、こちらでは、DDEインポートでExcelのイベントを発生して成功しています。しかし、こちらは、質問者さんと同じ環境で開発していないので、元の段階で違っているか、何か別の原因があるとは思います。 たぶん、私は、この問題は必ず開発は可能だと思いますが、同じ環境を持たないと、掲示板上でのやり取りでは難しいかもしれません。

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

>解決しました。 どうも返事ありがとうございます。もう、ここでも、何度も同じ質問が出ているし、海外の有名な掲示板でも、これという確信のもてる解決策が出ませんでした。もしかしたら、知っている人は、公開しないのかもしれません。 今回は、DDEの発生-出力プログラムを作って、Office2003でしたが、こちらでは成功していましたので、たぶん、間違いはないと思っていました。しかし、今後、バージョンが上がると、これも変わるかもしれません。下位バージョン(97以下)なら、OnData イベントです。

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

質問者様へ 出来れば、この結果を知りたいです。私は、同じような質問に対処してきましたが、今回、初めて違うコードの試みをしました。 Microsoft サポートを信じきっていましたが、サポート資料は、95(5),97 だけで、実際に、DDEインポートでは、うまく成功しませんでした。今回のコードは、前からずっと暖めていたもので、単純ですが、あまり類を見ない方法です。 他の掲示板も別案は出ているのかもしれませんが、あまり検索ではヒットしません。今回、私は、初めての試みなので、その結果が、また、次につながると思います。 よろしくお願いします。 (出来れば、お礼側でお願いします。お礼側には、メールされますので、ここを見なくても結果が読めます)

melon00
質問者

お礼

リクエストを頂いて有難う御座いました。 解決はされていないのですが、そろそろ一旦質問を締め切ります。 同様のことをされているのではないかとおもいますので、ぜひ、 OKWaveで色々とやり取りをさせていただければと思っております。 現在、為替のバックテストツールを作成しています。 自分なりの仮説があるのですが、これまで関数でテストを行っていました。あまりに重くなってしまいましたので、VBAで試みている次第です。 宜しく御願いいたします。

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 >1分ごとに履歴が記録されていますが、 >これを、30分や、60分などを指定すれば、その単位で、履歴を記録させるという意でした。 簡単に行うなら、フラグを、OnTimeメソッドで送ってあげて、それを、イベントの中に、フラグで判定させればよいです。イベント自体は生きていますが、Sheet2 にはデータが送られません。 再度、記録するためには、もう一度、「セット・タイマー」のマクロを実行します。mMIN は、分を入れます。1分ごとの流入でしたら、まず、間違いはないと思います。頻繁(例:1/sec)にデータが入るようでしたら、イベント側に、割り込みのDoEvents を適当な場所に入れてあげる必要があります。 ------------------------------------ **標準モジュール ------------------------------------ Public TimeCutFlg As Boolean Sub SetTimer() 'セット・タイマー Dim myTime As Date Const mMIN As Integer = 60 '設定の時間(分) TimeCutFlg = False myTime = Now + TimeSerial(0, mMIN, 0) Application.OnTime myTime, "SendFlg" End Sub Sub Sendflg() 'フラグを送る  TimeCutFlg = True End Sub ------------------------------------ **シートモジュール ------------------------------------ Private Sub Worksheet_Calculate() 'カルキュレイト・イベント Static flg As Boolean If TimeCutFlg Then 'フラグで解除   If flg = False Then    MsgBox "記録終了"    flg = True   End If   Exit Sub End If With Worksheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0)  .Resize(, 5).Value = Worksheets("Sheet1").Range("A2").Resize(, 5).Value End With flg = False End Sub

melon00
質問者

お礼

ありがとうございました。 解決しました。

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >それともVBで行わなければならないものでしょうか。 関数では不可能です。 マイクロソフト・サポートにウソはないと思いますが、Excel2003で、以下の内容では出来ませんでした。 OnData Property http://support.microsoft.com/support/excel/content/onevent/onevent.asp?SD=gn&LN=ja&gssnb=1#ondata 英語圏の掲示板には、この実際のコードは、ここを紹介するだけで、ほとんど出てきません。多くは、株式データのDDE(OLE)のためのものですが、今回、上記では出来ませんでしたので、改めて、こちらで、DDEから、1秒ごとにデータを送る方法で、Excelのマクロを考えてみました。 -------------------------------------- 2行目(A2 --F2) 199.20 199.23 199.20 199.23 2008/04/14 07:22:45    適当なダミーの数式を、関係のない場所に置きます。   = F2+1  'OnData で、Calculate Event が発生する。一行の終わりが入ったところが良い。(end of data line)    シートモジュールには、このようなコードを置きます。 'Sample--Sheet1 Module Private Sub Worksheet_Calculate() 'Replace of DDE OnData Event (added Dummy Formula to relate a imported data) With Worksheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0)  .Resize(, 5).Value = Worksheets("Sheet1").Range("A2").Resize(, 5).Value End With End Sub >これを表2のように時間ごとに履歴をつけられるようにしたいと思っております。(できれば、60分、30分などの時間別に) 具体性がないので、どうするか良くわかりませんでした。OnTimeメソッドで時間を区切ることだと思います。こちらは、もう少し、お話を聞かないと出来ません。 このDDEの詳しい説明は、Excel Ver.5 のVBAの標準マニュアルに出てきます。その後は、ないようです。 P.S. なお、そのDDEの発生装置の設定プログラムには、「表2」のようにすることが出来るはずだと思います。横の列にデータが出るのですから、縦側も、行を1加えていく方法が、あるのではないかと思います。

melon00
質問者

補足

>これを表2のように時間ごとに履歴をつけられるようにしたいと思っております。(できれば、60分、30分などの時間別に) 具体性がないので、どうするか良くわかりませんでした。OnTimeメソッドで時間を区切ることだと思います。こちらは、もう少し、お話を聞かないと出来ません。 おっしゃる通りです。 1分ごとに履歴が記録されていますが、 これを、30分や、60分などを指定すれば、その単位で、履歴を記録させるという意でした。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.1

>エクセルで、DDEを利用して表1のようなデータがリアルタイムで 取れることが判っています。 エクセルは結果を表現するアウトプット画面に使われたに過ぎないでしょう。「エクセル(の機能)で」というのは言いすぎです。 WEBクエリでも使ったのかな。 ーー 表1は同じ!セル範囲に最新(変わったら換わった都度)データが入るのかな。 ーー エクセルでは同一セル範囲場所にデータが入って(直前のデータは上書きされて消える)場合に、それを、時系列的に表に構成するのは Changeイベントという考えに縋(すがる)らざるを得ないと思います。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$C$2" Then Worksheets("Sheet4").Select Worksheets("Sheet4").Range("A65536").End(xlUp).Offset(1, 0).Select Selection.Offset(0, 0) = Worksheets("Sheet3").Range("A2") Selection.Offset(0, 1) = Worksheets("Sheet3").Range("B2") Selection.Offset(0, 2) = Worksheets("Sheet3").Range("C2") End If End Sub Sheet3のA2:C2に順次データを入れていって Sheet4のA1:C1以下にデータを累積していく。 こういうものの考えになるのかなと思う。 ーーー もうひとつの難しい点は、1分づつの間隔を置いて、その間のデータは捨てる、ことが必要かと思うが、タイマーの機能を使う必要があると思う。 == そういうことで小生十分経験とスキルは無いが、VBでもむつかい課題であることぐらいはわかる。 多分すぐには、質問者にはこの課題は、無理かなと思う。 そういうソフトが無いかどうか探すべきでしょう。 ーー 関数では式を入れておいても、元のセル(上記例ではSheet3のA2:C2)がいつも一緒なので、全行同じ最新のものを表示してしまうので、役立たないと思う。

melon00
質問者

補足

なるほどです。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A