Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3070 / 13644 ツリー ←次へ | 前へ→

【64461】DDEで取り込んだ複数のリアルタイムデータが更新されるたびに蓄積する方法 hoully 10/2/9(火) 16:51 質問[未読]
【64462】Re:DDEで取り込んだ複数のリアルタイムデー... よろずや 10/2/9(火) 18:35 回答[未読]
【64463】Re:DDEで取り込んだ複数のリアルタイムデー... n 10/2/9(火) 18:54 発言[未読]
【64464】Re:DDEで取り込んだ複数のリアルタイムデー... hoully 10/2/9(火) 20:57 お礼[未読]
【64467】Re:DDEで取り込んだ複数のリアルタイムデー... hoully 10/2/10(水) 21:23 お礼[未読]
【64469】Re:DDEで取り込んだ複数のリアルタイムデー... n 10/2/10(水) 23:19 発言[未読]
【64472】Re:DDEで取り込んだ複数のリアルタイムデー... hoully 10/2/11(木) 8:05 お礼[未読]
【64466】Re:DDEで取り込んだ複数のリアルタイムデー... UO3 10/2/10(水) 10:15 回答[未読]
【64468】Re:DDEで取り込んだ複数のリアルタイムデー... hoully 10/2/10(水) 21:27 お礼[未読]

【64461】DDEで取り込んだ複数のリアルタイムデー...
質問  hoully E-MAIL  - 10/2/9(火) 16:51 -

引用なし
パスワード
   B2セルからB51セルまでDDEで取り込んだリアルタイムデータが入ります。各セルのリアルタイムデータの更新間隔は一定ではなく1秒間に1回更新されることもあれば5分間に1回更新されることもあります。また、B2セルからB51セルまで偶然の一致を除いて更新されるタイミングはバラバラです。最終的に実現したいことは、例えばB2セルのリアルタイムデータが5回更新された時に5回とも同じ値だったのか否かがわかるようになりたいのです。B2セルからB51セルの各セルで上記のことがわかるようになりたいのです。そこで考えたのは、とりあえずB2セルのみにリアルタイムデータが入る設定にしてB2セルの値が更新される度にB2セルの値を右隣にどんどん蓄積していってC2セルからG2セルの値が全て等しい時に条件付書式もしくはポップアップで教えてくれるという方法です。そこで以下のVBAを書いてみました。実行したところ、データが更新されるたびにB2セルの値を右隣のセルにどんどん蓄積していってくれました。ところが、B2セルとB3セルの2箇所で異なったリアルタイムデータを受信するようにしたところ、B2セルのデータが更新していない時でもB3セルのデータが更新したタイミングで更新されていないB2セルのデータをC2セルに蓄積してしまいます。OnDataに望みをかけていたのですが駄目でした。DDEでリアルタイムデータを取ってきているのでchangeイベントプロシージャも使えません。これ以上どうしたらよいのかわかりません。どなたか教えていただけないでしょうか?よろしくお願いいたします。

Option Explicit

Dim mystart As Integer
Dim mycontinue As Boolean

Sub 監視開始()

mystart = 3
mycontinue = True

ActiveSheet.OnData = "データ"

End Sub

Sub 監視終了()

mycontinue = False

End Sub

Sub データ()

Dim nexttime As Date

Sheets(1).Cells(2, mystart) = Cells(2, 2)

If mycontinue Then
  mystart = mystart + 1
  nexttime = Now() + TimeValue("00:00:01")
  Application.OnTime nexttime, "データ"
End If

End Sub

【64462】Re:DDEで取り込んだ複数のリアルタイムデ...
回答  よろずや  - 10/2/9(火) 18:35 -

引用なし
パスワード
   データを取り込んだらそのセルをクリアするとか

【64463】Re:DDEで取り込んだ複数のリアルタイムデ...
発言  n  - 10/2/9(火) 18:54 -

引用なし
パスワード
   問題は、各セルごとの更新をトリガーにして走るイベントがあるかどうかだと思います。

例えば、別シート追加して
=Sheet1!B2
などという数式をセットして、その別シートのCalculateイベントを試してみてください。
B2セルが更新された時、値に変化が無くてもCalculateイベントが走るようだったら
使えないこともない、といったところでしょうか。

でも監視セルごとにシートを準備しなければいけませんね...

【64464】Re:DDEで取り込んだ複数のリアルタイムデ...
お礼  hoully E-MAIL  - 10/2/9(火) 20:57 -

引用なし
パスワード
   ▼よろずやさん、n さん:

ご回答ありがとうございます。明日にならないとDDEでリアルタイムデータを受信できないので、明日早速試してみます。感謝いたします。

【64466】Re:DDEで取り込んだ複数のリアルタイムデ...
回答  UO3  - 10/2/10(水) 10:15 -

引用なし
パスワード
   ▼hoully さん:

おはようございます。
前のトピではトンチンカンな発言をしてしまい申し訳ありませんでした。
DDEの環境が当方にはなく擬似環境を作って試そうかなとも思ったんですが
ちょっと大変そうなのでギブアップ。

で、あらためてHoullyさんのトピをよく読んでみると、OnData あるいは
その後のOnTimeによるチェックのタイミングそのものにはご不満はなく
その時に【更新データ】として受信した項目(具体的にはセル)の特定が
できないのでお困り・・・と、こう理解しました。
(また、トンチンカンな理解かもしれませんが)
で、各セルのイベントを各セル用のシートを準備して、そのCaluculateで
把握するアイデアも提示されているわけですが、

・受信するシートそのものを現在のシートとは別のシートで行う。
・このシートのコンテンツはこのブックが開かれるときのOpenイベントなどで
 クリアしておく。
・チェックの時点で、このシートのB2〜B51に項目が入っていれば
 (Emptyでなければ)その項目を受信したと把握する。
 (OnTImeのタイミング如何で複数項目かもしれませんね)
・で、この情報を元に判断する。
・判断後、このシートのコンテンツをクリアする。

こんな方法ではいかがでしょうか。

【64467】Re:DDEで取り込んだ複数のリアルタイムデ...
お礼  hoully E-MAIL  - 10/2/10(水) 21:23 -

引用なし
パスワード
   ▼n さんへ:

教えていただいた方法で上手くいきました!ありがとうございます!感謝いたします。自分では全く思いつかない方法でした。

【64468】Re:DDEで取り込んだ複数のリアルタイムデ...
お礼  hoully E-MAIL  - 10/2/10(水) 21:27 -

引用なし
パスワード
   ▼UO3 さんへ:

私がDDEであることを書き忘れたにもかかわらず再びご回答いただきまして本当にありがとうございます。明日は祝日なのでDDEでリアルタイムデータを受信することができません。明後日早速試してみたいと思います。ありがとうございました。

【64469】Re:DDEで取り込んだ複数のリアルタイムデ...
発言  n  - 10/2/10(水) 23:19 -

引用なし
パスワード
   あら。『値に変化が無くてもCalculateイベントが』走りましたか。
良かったですね。
楽天RSSみたいなものなんでしょうか。

では後はシート名を 『2』〜『51』などのように数値だけのシート名にして
ThisWorkbookモジュールの SheetCalculateイベントを使えば簡単にできそうですね。

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
  Dim x
  
  x = Sh.Name
  If IsNumeric(x) Then
    Call test(CLng(x))
  End If
End Sub

...こんな感じ。
引数 x によって行位置を指定してあげれば良さそう。

【64472】Re:DDEで取り込んだ複数のリアルタイムデ...
お礼  hoully E-MAIL  - 10/2/11(木) 8:05 -

引用なし
パスワード
   ▼n さんへ:

>楽天RSSみたいなものなんでしょうか。

はい。似たような物です。
後の処理も教えてくださいまして本当にありがとうございます。

3070 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free