- ベストアンサー
可変するセルの値をMsgBoxで表示させる方法
- Excel2007を使用している場合、DDEで更新されるリアルタイムデータに応じて特定の条件を満たすセルの値をMsgBoxで表示させる方法について教えてください。
- リアルタイムデータは1ケタから7ケタの数字であり、特定の条件を満たす場合には「BUY」と「SELL」の文字列に連結された数字が表示されます。
- 表示させたい文字列はR列のIF関数の条件を満たす際に発生するため、MsgBoxを表示することでユーザーに注意喚起を促すことができます。ビープ音と併せて使用することもできます。
- みんなの回答 (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
その他の回答 (2)
- satoron666
- ベストアンサー率28% (171/600)
ちょっと変更 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
お礼
satoron666様 早いご回答ありがとうございます。 worksheet changeですが、DDEでのデータ更新を捉えることができませんでした。 しかし、ratoron666様のご回答は大変勉強になりました。 この度はありがとうございました。
- satoron666
- ベストアンサー率28% (171/600)
シートの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ですが、この方法ではどうでしょう? ビープー音については調べてみます。
お礼
nishi6様 ご回答ありがとうございます。 ご指摘の通り、worksheet changeではDDEでのデータ更新を捉える事ができませんでした。 また、ご回答頂きましたVBAは知らないコードばかりで大変勉強になりました。 この度は、ありがとうございました。