'グローバル変数
Public goFlag
Public endFlag
Sub getCode_Click() '登録ボタン
'B1 cell コードを入力して登録ボタンをクリックする
If Cells(1, 2) = "" Then 'B1 cell
MsgBox "コードが入力されていません"
End
ElseIf Len(Cells(1, 2)) <> 4 Then
MsgBox "4文字ではありません。 文字数を確認してください"
End
End If
'B列に出力 RSSから情報を取得。マーケットスピード(ログイン)とRSS.exeを立ち上げる必要あり
'事前に登録とエクセルの設定でマクロを実行可能にしておく
Cells(2, 2).Value = "=RSS|'" & Cells(1, 2) & ".T’!銘柄名称"
Cells(3, 2).Value = "=RSS|'" & Cells(1, 2) & ".T’!現在日付"
Cells(4, 2).Value = "=RSS|'" & Cells(1, 2) & ".T’!現在値"
Cells(5, 2).Value = "=RSS|'" & Cells(1, 2) & ".T’!最良売気配値1"
Cells(6, 2).Value = "=RSS|'" & Cells(1, 2) & ".T’!OVER気配数量"
Cells(7, 2).Value = "=RSS|'" & Cells(1, 2) & ".T’!UNDER気配数量"
Cells(8, 2).Value = "=RSS|'" & Cells(1, 2) & ".T’!年初来高値"
Cells(9, 2).Value = "=RSS|'" & Cells(1, 2) & ".T’!年初来安値"
Cells(10, 2).Value = "=RSS|'" & Cells(1, 2) & ".T’!信用売残"
Cells(11, 2).Value = "=RSS|'" & Cells(1, 2) & ".T’!信用売残前週比"
Cells(12, 2).Value = "=RSS|'" & Cells(1, 2) & ".T’!信用買残"
Cells(13, 2).Value = "=RSS|'" & Cells(1, 2) & ".T’!信用買残前週比"
End Sub
Sub anotherModule()
cellmake '別のモジュールに記載した関数 セル(センタリング等、色設定)と文字(ボールド)の装飾マクロ、記録を使った
End Sub
Sub end_Click() '終了、停止ボタン マクロを停止させるフラグを設定
'停止させるときに、コピーしたGHI列を別のシートにコピーさせる
'2021/04/26
Dim sheetName
endFlag = False
Debug.Print "push button"
Debug.Print "endFlag:" & endFlag
'シートを追加して、GHI列をコピーする
'コピーの前にセルをコピーしておく
If Range("I2").Value <> "" Then
n = Cells(Rows.Count, "I").End(xlUp).Row
Range("G1:I" & n).Copy 'G1からI行のまでを範囲コピーする
sheetName = Format(Now(), "yyyy年mm月dd日hhnn")
Worksheets.Add(After:=Worksheets(1), Count:=1).Name = sheetName
Worksheets(sheetName).Activate ' シートをアクティブ
Range("A1").PasteSpecial Paste:=xlPasteValues
Else
MsgBox "I2セルが空なのでコピーしませんでした"
End If
End Sub
Sub macro110507a()
'イミディエイトウィンドウを
'すべてクリアする 処理が遅い
Dim i As Integer
For i = 1 To 1000
'Chr(8)=バックスペース
Debug.Print Chr(8)
Next i
End Sub
Sub ForCompareOverUnder() '実行ボタン、endFlag = Falseでループを抜ける
'楽天証券マーケットスピードのRSS情報を一定間隔で取得してセルにコピーする
'一定間隔3-5Sでループ、11:30か15:00で終了、9:00、12:30開始
'Over,Underの比率を算出してセルにコピーする
'比率の変化で株価がどのように変わるかを調べる
'目的:比率の変化で株価がどのように変わるのかを調べ、株価の上下転換点の予兆を探る
'予兆を探るまたは予測することによって、株の買い時、売りどきを予測する
'または全く無関係かもしれないが、無関係の場合はそれがわかるだけでもよい
'動作状況は、debug.printでイミディエイトウィンドウに出力している。
Dim zenbaStartTime, gobaStartTime, zenbaEndTime, gobaEndTime
Dim nowTime
Dim t As Long
Dim nTime As Long
Dim aTime
Dim bTime, cTime, dTime
Debug.Print "macro start"
Debug.Print "---"
t = Timer 'Loop用
nTime = 3 '3s
goFlag = False 'Trueならループ開始になる。市場が開いている時間帯をチェックしてTrueにする
endFlag = True 'falseで終了
'前場時間帯
zenbaStartTime = "09:00:00"
zenbaEndTime = "11:30:00"
'後場時間帯
gobaStartTime = "12:30:00"
gobaEndTime = "15:00:00"
'GHI Clear 再実行のときにGHI列をクリアするので、実行前にデータを対比させる必要があるが今はない
Columns("G").Clear '株価の列
Columns("H").Clear '率
Columns("I").Clear '時刻
'全部クリアされるので再度入力
Range("G1").Value = "株価"
Range("H1").Value = "率"
Range("I1").Value = "時刻"
cellmake 'Module2のメソッド関数で、装飾ボールド等の処理をする
'年のためにコード入力のチェック、整数かどうかのチェックはなし
If Range("B1") = "" Then
MsgBox "コードが入力されていません.B1セルに銘柄コード4桁を入力し登録ボタンをクリックしてください"
End
ElseIf Range("B2") = "" Then
MsgBox "銘柄が表示されていません.B1セルに銘柄コード4桁を入力し登録ボタンをクリックしてください"
End
End If
'--------loop
Do
DoEvents 'eventを受け付けるようにしておく、そうしないと強制終了しか方法がない
nowTime = Time 'Time(Hour(Now()), Minute(Now()), Second(Now()))
'市場以外の時間帯は、コピーしない。
'市場時間外でもループして、市場が始まったらセルのコピーを開始する。
'動いているかどうかわかり位くいので、セルに「実行中」と表示させると良いかもしれない
' nowTime < gobaStartTime Or nowTime > gobaEndTime Then '直接比較すると型が異なるので正しく判定できない
aTime = CDate(nowTime) - CDate(zenbaStartTime) '前場
bTime = CDate(nowTime) - CDate(zenbaEndTime) '前場以降
cTime = CDate(nowTime) - CDate(gobaStartTime) '後場
dTime = CDate(nowTime) - CDate(gobaEndTime) '後場以降
If t + nTime < Timer Then '秒単位のタイマー Timeは時刻nTimeで指定した秒間隔でコピー処理を行う
Debug.Print nTime&; "秒間隔 マーケット cell write"
t = Timer
'----Start Timer
If aTime < 0 Or (bTime > 0 And cTime < 0) Or (dTime > 0) Then
Debug.Print "時間外ですClose" & nowTime
goFlag = False
Else
Debug.Print "市場open"
goFlag = True
End If
If goFlag = True Then '市場が開いているときTrue
'セルをコピーする
'GHIにペーストする
n = Cells(Rows.Count, "G").End(xlUp).Row + 1 '最終行の次の行番号を取得
'Range("G" & n).Select
'price
Range("G" & n).Value = Range("B4").Value 'ここを株価
'Over Under Under/Overで比率を取得 小数点以下第3位まで表示、四捨五入
Range("H" & n).Value = Round(Range("B7") / Range("B6"), 3) 'ここを率に設定する
Range("I" & n).Value = Time 'Now()
Else
'今はなにもしない。市場が開いていないときの処理
End If
End If
'-----end timer
'----every Loop-------------------------------------------------------------
If endFlag = False Then 'cancel buttonを作る 終了、停止ボタンをクリックするとフラグにFalseで終わる。DoEventsによりクリック処理を受ける
Debug.Print "exit Loop"
Debug.Print "sub_endFlag:" & endFlag
Exit Do
'MsgBox "処理を終わります"
End If
'Application.Wait Now() + 1 / 86400 '1s待つ でもWaitだとイベントを専有して、ほかの処理を受け付けない
Loop
Debug.Print "マクロ終了"
End Sub