プロが教える店舗&オフィスのセキュリティ対策術

DDE通信によりリアルタイムの株価データを取得し、
エクセルに株価を表示できる状態になっています。
(株価が変動すると自動的にセルの値が変わる)

これを使い2銘柄間の差をあるセルに表示しているのですが、
1日の中における差の最大値と最小値を他のセルに記録し、
値が更新されるのに伴い随時置き換えたいと思っています。

例)
日立280円
東芝260円
の場合は2銘柄間の差は20円。

この値が変化して最大値(最小値)を更新したら置き換え。
それ以外はそれまでの最大値(最小値)の値をセルに保持する、
という感じで記録していきたいのですが実現可能でしょうか?

(イメージ)
(A1セル=2銘柄間の差)
(B1セル=最大値)
(C1セル=最小値)

A1セルの値の変化
20(B1セルもC1セルも20)
23(B1セルを23に更新)
25(B1セルを25に更新)
22
21
15(C1セルを15に更新)
18
24
26(B1セルを26に更新)
20

当方の環境は
エクセル2000
OSはwinXP
DDE通信は楽天証券のリアルタイムスプレッドシート
を使用しています。

これがエクセルで可能なのかどうかもわからないのですが、
もし方法をおわかりの方がいましたらよろしくお願い致します。

A 回答 (3件)

ちょっとだけ変更します。



'****ここから
Option Explicit
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
On Error GoTo error_shori
With ThisWorkbook.Sheets("Sheet1")
.Range("A1") = Abs(日立のセル - 東芝のセル)
If Not IsNumeric(.Range("B1")) Or .Range("B1") = "" Then
''''''数字以外か、ブランクのとき・・・
.Range("B1") = .Range("A1")
.Range("C1") = .Range("A1")
End If
If .Range("B1") < .Range("A1") Then .Range("B1") = .Range("A1")
If .Range("C1") > .Range("A1") Then .Range("C1") = .Range("A1")
End With
On Error GoTo 0
Application.EnableEvents = True
Exit Sub
error_shori:
MsgBox "エラーが発生しました。Err.Number..." & Err.Number
On Error GoTo 0
Application.EnableEvents = True
End Sub
'****ここまで
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

コードをそのまま実行してみたところエラーになり、
With ThisWorkbook.Sheets("Sheet1")を"Sheet9"にして
.Range("A1") = Abs(日立のセル - 東芝のセル)
の行を削除すると実行できるようになりました。

現在問題なく動いていて感動しています。
この度は本当にありがとうございました。

お礼日時:2009/03/23 13:10

まず、新しいシートを作ります。



そのシート名を"Sheet9"とします。

Sheet9に次の二つの式を書き込みます。セルはどこでもかまいません。

=日立のセル
=東芝のセル

Sheet9のタブを右クリックして、コードの表示を選びます。
出てきたシートモジュールに、以下のコードを貼り付けます。

'****ここから
Option Explicit
Private Sub Worksheet_Calculate()
With ThisWorkbook.Sheets("Sheet1")
.Range("A1") = abs(日立 - 東芝)
if Not IsNumeric(.Range("B1")) or .Range("B1") = "" then
''''''数字以外か、ブランクのとき・・・
.Range("B1") = .Range("A1")
.Range("C1") = .Range("A1")
end if
if .Range("B1") < .Range("A1") then .Range("B1") = .Range("A1")
if .Range("C1") > .Range("A1") then .Range("C1") = .Range("A1")
End With
End Sub
'****ここまで

Private Sub Worksheet_Calculate()は、シートが再計算されたときにおきる、イベントです。
Sheet9には余分な式を書き込まないように!!
    • good
    • 0

rabbit78さんは前にも質問されてますが、DDE通信での取得は現在値ではないですか、なぜ関数を使わないのかわかりませんが。



結論は可能です、4本足を記録すればよいのです(タイマーでも可能ですよ)。

ただこの種のソフトは自分で解決するか、有料しかも高いですがヒントはあちこちに在ります、頑張ってください。

この回答への補足

ひとつの銘柄の高値と安値はDDEと関数で取得表示できるのですが、

2銘柄の「差」の高値と安値を記録する方法がわかりませんでした。

タイマーで例えば1秒ごと差を記録していく事はできるのですが、

高値が1秒かからずに(記録する前に)下がってしまう事もあり、

何か良い記録方法は無いものかと思案していた次第です。

補足日時:2009/03/21 10:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!