• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:可変するセルの値をMsgBoxで表示させる方法)

可変するセルの値をMsgBoxで表示させる方法

このQ&Aのポイント
  • Excel2007を使用している場合、DDEで更新されるリアルタイムデータに応じて特定の条件を満たすセルの値をMsgBoxで表示させる方法について教えてください。
  • リアルタイムデータは1ケタから7ケタの数字であり、特定の条件を満たす場合には「BUY」と「SELL」の文字列に連結された数字が表示されます。
  • 表示させたい文字列はR列のIF関数の条件を満たす際に発生するため、MsgBoxを表示することでユーザーに注意喚起を促すことができます。ビープ音と併せて使用することもできます。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

DDEで更新されるのはQ列で、変更が知りたいR列は算式になっているので、Worksheet_ChangeイベントではR列の変更はつかめないはずです。 ここは、DDEでの更新前後でR列の内容をつかんで比較するのでしょうか。4000件程度で該当件数が少なければ時間的にも問題ないでしょう。 DDEでの更新がどのようにして行われているか分からないので、「DDEでの更新」はブラックボックスとして参考にコードを書いてみました。ほとんど何もしていません。こんな解答でいい? VBAのメッセージボックスを使っているので、複数のメッセージを出す場合、1件目で待ちになります。この辺りはご容赦を。 Sub Syougou()   Dim OldData As Variant   '更新前データ   Dim NewData As Variant   '更新後データ   Dim r As Integer      '行カウンタ      '更新前データを退避   OldData = Range("R4:R3723")   '**************************************   '**************************************      '処理 DDEでの更新のつもり   'Range("Q4") = 800   'Range("Q18") = 1300      '**************************************   '**************************************      '更新後データを取得   NewData = Range("R4:R3723")      '新旧の比較   Dim i As Integer      'Beepカウンタ   Const Num = 3       'Beep回数(お好きに)   Dim startTime As Single   '開始時刻   Const waitSec = 1     '待ち秒数(お好きに)      For r = 1 To UBound(NewData)     If OldData(r, 1) <> NewData(r, 1) Then       'Beep音       For i = 1 To Num         startTime = Timer         While Timer < startTime + waitSec           DoEvents         Wend         Beep       Next              'メッセージ       MsgBox NewData(r, 1)     End If   Next End Sub

hoully
質問者

お礼

nishi6様 ご回答ありがとうございます。 ご指摘の通り、worksheet changeではDDEでのデータ更新を捉える事ができませんでした。 また、ご回答頂きましたVBAは知らないコードばかりで大変勉強になりました。 この度は、ありがとうございました。

その他の回答 (2)

回答No.2

ちょっと変更 Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Target, Range("R:R")) Is Nothing Then '範囲に含まれて無くない=含まれてたら! If Target <> "" Then MsgBox Target.Address & vbCrLf & "「" & Target.Value & "」に変更されました。" End If End If End Sub

hoully
質問者

お礼

satoron666様 早いご回答ありがとうございます。 worksheet changeですが、DDEでのデータ更新を捉えることができませんでした。 しかし、ratoron666様のご回答は大変勉強になりました。 この度はありがとうございました。

回答No.1

シートのVBAに、 Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Target, Range("R:R")) Is Nothing Then '範囲に含まれて無くない(含まれてたら) MsgBox Target.Value'変更した部分の内容を表示 End If End Sub 当方Excel2003ですが、この方法ではどうでしょう? ビープー音については調べてみます。