エクセルで、DDEを利用して表1のようなデータがリアルタイムで
取れることが判っています。
これを表2のように時間ごとに履歴をつけられるようにしたいと思っております。(できれば、60分、30分などの時間別に)
これは、関数でできるものなのでしょうか、
それともVBで行わなければならないものでしょうか。
判りましたらば、是非その方法をご教示頂ければと思っております。
宜しく御願いいたします。
表1
通貨 OPEN HIGHLOWCLOSETIME
GBPJPY 199.20199.23199.20199.23 2008/08/08 20:56
表2
OPEN HIGH LOW CLOSE TIME
199.20 199.23 199.20 199.23 2008/04/14 07:22:45
199.22 199.22 199.20 199.20 2008/04/14 07:23:45
199.23 199.27 199.20 199.27 2008/04/14 07:24:45
199.25 199.25 199.18 199.18 2008/04/14 07:25:45
199.10 199.10 199.07 199.07 2008/04/14 07:26:45
199.07 199.12 199.07 199.12 2008/04/14 07:27:45
199.13 199.13 199.09 199.09 2008/04/14 07:28:45
199.06 199.06 199.00 199.01 2008/04/14 07:29:45
198.97 198.97 198.90 198.90 2008/04/14 07:30:45
198.90 198.93 198.90 198.91 2008/04/14 07:31:45
198.92 198.94 198.88 198.94 2008/04/14 07:32:45
198.96 199.00 198.95 199.00 2008/04/14 07:33:45
198.94 198.94 198.86 198.89 2008/04/14 07:34:45
198.92 198.92 198.92 198.92 2008/04/14 07:35:00
198.95 198.95 198.94 198.95 2008/04/14 07:36:45
No.7
- 回答日時:
こんにちは。
もう一度、私の以前の開発上のログを読んでみました。
Microsoft 側のサポートは、古すぎてダメだったのですが、こちらでは、DDEインポートでExcelのイベントを発生して成功しています。しかし、こちらは、質問者さんと同じ環境で開発していないので、元の段階で違っているか、何か別の原因があるとは思います。
たぶん、私は、この問題は必ず開発は可能だと思いますが、同じ環境を持たないと、掲示板上でのやり取りでは難しいかもしれません。
No.6
- 回答日時:
>解決しました。
どうも返事ありがとうございます。もう、ここでも、何度も同じ質問が出ているし、海外の有名な掲示板でも、これという確信のもてる解決策が出ませんでした。もしかしたら、知っている人は、公開しないのかもしれません。
今回は、DDEの発生-出力プログラムを作って、Office2003でしたが、こちらでは成功していましたので、たぶん、間違いはないと思っていました。しかし、今後、バージョンが上がると、これも変わるかもしれません。下位バージョン(97以下)なら、OnData イベントです。
No.5
- 回答日時:
質問者様へ
出来れば、この結果を知りたいです。私は、同じような質問に対処してきましたが、今回、初めて違うコードの試みをしました。
Microsoft サポートを信じきっていましたが、サポート資料は、95(5),97 だけで、実際に、DDEインポートでは、うまく成功しませんでした。今回のコードは、前からずっと暖めていたもので、単純ですが、あまり類を見ない方法です。
他の掲示板も別案は出ているのかもしれませんが、あまり検索ではヒットしません。今回、私は、初めての試みなので、その結果が、また、次につながると思います。
よろしくお願いします。
(出来れば、お礼側でお願いします。お礼側には、メールされますので、ここを見なくても結果が読めます)
リクエストを頂いて有難う御座いました。
解決はされていないのですが、そろそろ一旦質問を締め切ります。
同様のことをされているのではないかとおもいますので、ぜひ、
OKWaveで色々とやり取りをさせていただければと思っております。
現在、為替のバックテストツールを作成しています。
自分なりの仮説があるのですが、これまで関数でテストを行っていました。あまりに重くなってしまいましたので、VBAで試みている次第です。
宜しく御願いいたします。
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
No.3ベストアンサー
- 回答日時:
補足:
ダミーの数式は、
G列以降に、
=COUNT(A:F)
ということでもよいと思います。
(F列ですと、循環参照になります)
時間の区切りは、07:36:45 を判定しても可能です。
なお、2008/04/14 07:36:45 が1セルに入っているなら、1列減らしてお読みください。
No.2
- 回答日時:
こんにちは。
>それともVBで行わなければならないものでしょうか。
関数では不可能です。
マイクロソフト・サポートにウソはないと思いますが、Excel2003で、以下の内容では出来ませんでした。
OnData Property
http://support.microsoft.com/support/excel/conte …
英語圏の掲示板には、この実際のコードは、ここを紹介するだけで、ほとんど出てきません。多くは、株式データの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加えていく方法が、あるのではないかと思います。
この回答への補足
>これを表2のように時間ごとに履歴をつけられるようにしたいと思っております。(できれば、60分、30分などの時間別に)
具体性がないので、どうするか良くわかりませんでした。OnTimeメソッドで時間を区切ることだと思います。こちらは、もう少し、お話を聞かないと出来ません。
おっしゃる通りです。
1分ごとに履歴が記録されていますが、
これを、30分や、60分などを指定すれば、その単位で、履歴を記録させるという意でした。
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)がいつも一緒なので、全行同じ最新のものを表示してしまうので、役立たないと思う。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- 統計学 どの統計を使えばいいのか教えてください(EZ-Rを使用) 5 2022/10/11 13:28
- Excel(エクセル) 出退勤管理の遅刻・早退時間について 3 2023/08/10 15:33
- Visual Basic(VBA) エクセル 2つの列にある値の完全一致を抜き出すVBA 15 2022/12/15 03:22
- Excel(エクセル) 表計算ソフトcalcにおいて、1時間10分を1.1と表記する方法とそれらを集計する方法は? 4 2022/04/06 16:54
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 【VBA】データを入力後に,同一シート内に履歴として転記するVBAコードを教えていただきたいです。 3 2022/11/16 01:37
- その他(Microsoft Office) エクセル 条件付き書式 日をまたぐ塗りつぶし 1 2023/01/13 18:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access レポート印刷するときに...
-
アクセスクエリの計算
-
エクセルのデータをアクセスに...
-
【至急・画像あり】建物or住所...
-
Accessのリンクテーブルのパス...
-
Accessのクエリで、replace関数...
-
日付のテキストボックスに(例...
-
Accessのスプレッドシートエク...
-
Access VBA を利用して、フォル...
-
Microsoft Accessをクレジット...
-
Accessのデータ型の日付/時刻型...
-
accessの代わりになるもの
-
ms access 2013で、チェックボ...
-
マイクロソフト アクセス2021の...
-
エクセルのマクロについて教え...
-
AccessVBAで任意の複数リンクテ...
-
Access Error3061 パラメータが...
-
Access VBA [リモートサーバー...
-
Accessのフォーム上のテキスト...
-
accessでlaccdbファイルが削除...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access レポート印刷するときに...
-
Access Error3061 パラメータが...
-
Microsoft365にAccessってあり...
-
Accessのクエリで、replace関数...
-
Accessのリンクテーブルのパス...
-
Access VBA [リモートサーバー...
-
ACCESS VBA でのエラー解決の根...
-
accessデータを指定したExcel、...
-
Accessのスプレッドシートエク...
-
CSVファイルの「0落ち」にVBA
-
【Access】Dcount関数の複数条...
-
Accessのフォーム上のテキスト...
-
Access VBA を利用して、フォル...
-
実行時エラー3131 FROM 句の構...
-
Vba Userformを前面に出すについて
-
Accessでフォームに自動入力し...
-
Accessレポートのチェックボッ...
-
Accessのテキストボックスの入...
-
Access 複数条件検索の設定が上...
-
accessのフォームに設置したボ...
おすすめ情報