こんにちは。
(1)
>グリーンで囲んである所の高値と安値を検知する方法はありますか?
>図では、たまたま高値+40と安値+25が出ていますが、どの数値で出るかは決まっていません。
おそらくは、横軸は、時間ですよね。例えば、時間で取るとしたら、
基本的には、MAX と MIN を使いますが、その範囲の区切りを、時間で行います。(図参照)
最大値 C4
=MAX(INDEX(A:B,MATCH($C$2,A:A,1),2):INDEX(A:B,MATCH($D$2,A:A,1),2))
最小値 D4
=MIN(INDEX(A:B,MATCH($C$2,A:A,1),2):INDEX(A:B,MATCH($D$2,A:A,1),2))
そうでない場合。
例えば、急激に上がった後に、値が下がったという範囲を監視する質問は、見たことはあるのですが、私には、手がけたことがありません。特別にアルゴリズムが必要のようです。
(2)
OnTime メソッドを使用します。
'--------------------------------------
'別の標準モジュールにおいてください。
'実行は、フォームボタンを付けるとよいです。
Dim myTime As Date
Dim flg As Boolean
Sub Ontime_Set() 'トグルになっている
If flg = False Then
flg = True
myTime = Now + TimeSerial(0, 0, 10)
ElseIf flg = True Then
flg = False
Else
Exit Sub
End If
If Range("A1").Value = "" Then
Range("A1").Value = Format(Now, "hh:mm:ss") '時間記録(スタート)
Range("A1").Offset(, 1).Value = Range("G7").Value 'G7 の値
End If
Application.OnTime EarliestTime:=myTime, _
Procedure:="my_Procedure", Schedule:=flg
If flg = False Then
myTime = 0
End If
End Sub
Sub my_Procedure()
With Range("A65536").End(xlUp).Offset(1)
.Value = Format(Now, "hh:mm:ss") '時間記録
.Offset(, 1).Value = Range("G7").Value 'G7 の値
flg = False
myTime = 0
End With
Call Ontime_Set
End Sub
Sub Ontime_Reset()
'タイマーリセット
On Error Resume Next
Application.OnTime EarliestTime:=myTime, _
Procedure:="my_Procedure", Schedule:=False
If Err.Number > 0 Then
MsgBox "OnTime設定はされていません。", 64
Err.Clear
flg = False
Else
MsgBox myTime & "の設定は解除されました。", 64
flg = False
myTime = Empty
End If
End Sub
お礼
Wendy02さん 色々教えていただきほんとうにありがとうございます。 VBAは初心者なのでその記述がなかなか理解出来ないところが多々ありますが、ついていけるように、頑張ります。 ありがとうございます。
補足
Wendy02さん 二週間奮闘しているのですが、 === Excelとは別に動いているということですよね。何か、終了の書き込みとか、終了のサインを出せませんか?何でもよいです。=== 上記の答えが今でも出せない状況です。 もしかしたらと思い、 KMmacro.exeを使ってソフトを操作しているためそのソフトメーカーに 処理が終わったと言う信号が取れるように出来ますか?と問い合わせた所、対応出来ないと言われました。 MiniSpy で使用ソフトのHWND、Class、Caption,RECTが取れますがそれを使って処理が終わったと言う信号みたいなのが取れるのでしょうか? 前回の自動記録には非常に満足してます。ありがとうございます。 さらに記録拡張 V8,W8,X8,Y8,Z8,のデーターも記録したいのですがその方法を教えてくださいお願いします。 それから === 基本的には、MAX と MIN を使いますが、その範囲の区切りを、時間で行います。(図参照) === 最大値 C4 =MAX(INDEX(A:B,MATCH($C$2,A:A,1),2):INDEX(A:B,MATCH($D$2,A:A,1),2)) 最小値 D4 =MIN(INDEX(A:B,MATCH($C$2,A:A,1),2):INDEX(A:B,MATCH($D$2,A:A,1),2)) 上記の延長での質問ですが、下記のようにしたいのです。 (1)Am9:00から記録開始しAm11:00で記録終了 (2)Pm12:30から記録開始しPm15:10で記録終了 (3)記録方法は10分間隔で 始値、高値、安値、終値、を記録する 参考図を添付します。 よろしくお願いいたします。