質問掲示板
岡三RSS
集いの広場

アップロードされたファイルおよび投稿内容についての注意事項 別窓

複数の単語で検索する方法 別窓

【国内株式、先物・オプション】岡三RSS質問箱

sigebo

板情報の更新データを順次記録する。

板情報と気配値をある1行に並べています。この行を値の更新されるごとに、もしくは一定時間ごとに、最新表示行の次の行に記録することをやりたいです。
記録時間は高々1分間ほどで、可能な限りの更新頻度で記録し、記録終了後csvファイルに書きます。この操作を手動または自動で1日に数回行います。
方法1
VBAを一定時間ごとに呼び出して、記録していく方法
方法2
EXCELのみで処理する
ことが考えられますが、方法1はなんとか見通しがつきますが、excelのみで可能でしょうか。

2023年05月24日

大野 了

sibeboさん、こんにちは!!

そうですねー
あるセルの値を、他のセルに行を移動させながらコピーする場合は、VBAでないと厳しいと思います。

特に板情報の場合、同じセルが更新され続けるため、
1分前のデータが取れないためVBAでないと厳しいかと思います!!

2023年05月24日

ログインしてコメントを投稿する

sigebo

ご返事ありがとうございます。やはりEXcelのみでは、難しいのですね。
その後、VBAによる方法を考えていましたが、一定時間ごとにVBA関数を呼ぶのではなく、
VBAを OnTimeStart()で一定間隔で呼べばセルに時刻更新をできることがわかりました。
しかし
Sub OnTimeStart()
Call TimerProc
mOnTime = Time() + TimeSerial(0, 0, 1)
Call Application.OnTime(mOnTime, "OnTimeStart")
End Sub
のように(ネットで探した)するのでは、TimeSerialが最小1秒しか設定できないので、ちょっと不足です。
RSSの限界の100msの倍の200msくらいにしたいところです。
TimeSerial値を秒以下にする方法があれば良いのですが、できるでしょうか。
実際には先物寄り付き直前数秒間の振る舞いを調べたいのです。(先物がなくなることは承知していまして、それ故今の間にということです)

2023年05月24日

ログインしてコメントを投稿する

大野 了

sigeboさん、こんにちは

残念ながらOnTimeメソッドは、最短で1秒間隔でしか動作させることができません。
ミリ秒単位の処理を行わせたい場合は、
Calculateイベント等でRSSの更新が行われるタイミングで処理を行うか、
1分間永久ループさせ、その中でFBOARD関数を呼び出してデータを取得する感じになるかとー

2023年05月24日

ログインしてコメントを投稿する

sigebo

大野様 ご返事ありがとうございます。
ご案内のように、Calculate() イベントハンドラーなら、RSSの更新の度に起動されるので、よさそうに思えます。
それで、下記のコードで試しました。
取得情報はb7:w7にならべてあり(計19個)、それを最後の位置をA6から読み、その次の行に取得情報を転記します。そして最後の位置を更新します。
呼ばれる度に、現在時刻をa1に表示しておきます。

ところが次の問題があります。
1.VBAのプロシージャのやり方が多分まずい(VBAは慣れていません)のでしょうが、VBAのデバッグでコンパイルを実行したのち、とりあえずF9で再計算をしましたが、ハンドラーは起動されないようです。
2.RSSの更新ですが、気配値情報の取得はFQUOTE関数を並べていますが、各FQUOTE関数が実行される度なのか、一連の実行が完了したときなのかが、わかりません。前者ならちょっと多すぎて問題かと思います。

かなり込み入った質問ですが、アドバイスいただければ幸いです。



Option Explicit

Public mOnTime As Date
Private Sub Worksheet_Calculate()
Dim serial As Long
Dim lastpos, ct As Integer

Range("A1") = Format(Time, "yy/mm/dd hh:mm:ss")
Range("A1").NumberFormatLocal = "yymmdd hhmmss"


lastpos = Cells("a6")
ct = lastpos + 1
Range("b8").Offset(ct, 0).Select = Range("b7:w7").Select
Cells("a6") = ct

End Sub



2023年05月25日

ログインしてコメントを投稿する

大野 了

sigeboさん、こんにちは!!


>1.VBAのプロシージャのやり方が多分まずい(VBAは慣れていません)のでしょうが、VBAのデバッグでコンパイルを実行したのち、とり>あえずF9で再計算をしましたが、ハンドラーは起動されないようです。
F9を押した際に計算のもととなるセルが変わっていないためイベントが起こってないと思われます。
また、頂いたソースをworksheetにコピーしたら、再計算時にイベントが起こりましたので、
ソースは問題ないと思います。


>2.RSSの更新ですが、気配値情報の取得はFQUOTE関数を並べていますが、各FQUOTE関数が実行される度なのか、一連の実行が完了した>ときなのかが、わかりません。前者ならちょっと多すぎて問題かと思います。
再計算のイベントは、セルの更新単位でイベントが発生しますが、
再計算処理中には岡三RSSが更新できないため、重なって動作することはないと思われます。
ですが、RSSの式が山のようにあって、すべてのRSSの更新が終わる前にVBA実行が終わり、
その後、残りのRSSの更新がかかる場合、
更新される度に複数回VBAが動く可能性はあると思われます。

この部分は完全に調査をやったことがないため、
正確ではない情報の可能性もありますが、
VBAとExcelの動作の仕様からすると、上記のような動作になると思われます!!

2023年05月25日

ログインしてコメントを投稿する

sigebo

次のように操作しました。
1.シートにRSS関数を書く
2.VBAプロジェクトのThisWorkbookを開く。
3.自動的に挿入される行も考慮して、下記のコードを書く
4.エラーが無いことを確認(文法エラーがあるとメッセージが出る)
5.シートを開く
6.RSSを起動する

とすると、fquoteのセルは更新されますが、イベントプロシージャが書く、セルa1は更新されない(取得セルのコピーも)ので、
どうも、イベントプロシージャは実行されていないように見えます。
何が原因かご教示願えないでしょうか。



Option Explicit

Public mOnTime As Date

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

Dim serial As Long
Dim lastpos, ct As Integer

Range("A1") = Format(Time, "yy/mm/dd hh:mm:ss")
Range("A1").NumberFormatLocal = "yymmdd hhmmss"


lastpos = Cells("a6")
ct = lastpos + 1
Range("b8").Offset(ct, 0).Select = Range("b7:w7").Select
Cells("a6") = ct

End Sub

2023年05月25日

ログインしてコメントを投稿する

大野 了

sigeboさん、こんにちは!!

記述いただいたソースですが、やはりイベントプロシージャ自体は問題なく実行されるようです。

イベントプロシージャは正常に実行はされるのですが、
ソース中に記述を変更しないと動作しない部分があり、最後までは動作しないようです。


>lastpos = Cells("a6")
>Cells("a6") = ct
Cellsは文字列にてセル指定をすることはできないため、CellsではなくRangeを使用する
例) lastpos = Range("a6")


>Range("b8").Offset(ct, 0).Select = Range("b7:w7").Select
この部分はB7:W7を B8以降のセルにコピーされたいということでしょうか?

それであれば、そもそもSelectで代入することはできないため
Range("b7:w7").Copy Range("b8").Offset(ct, 0)
とする必要があります!!

2023年05月26日

ログインしてコメントを投稿する

すべての投稿を表示する

to_top
to_top

アップロードされたファイルにはウイルスチェックを行っておりますが、未知のウイルス等に感染されている場合がありますので、アップロードされたファイルのご利用はご注意ください。
また、取引パスワード等の重要な情報を投稿内容に含めないようご注意ください。
なお、アップロードされたファイルの利用や投稿内容によって、投稿者自身や他の利用者が被った損害に対して当社は一切責任を負いません。

また、セキュリティの関係上、一部コマンド等を含む内容を送信するとエラー画面が表示され、投稿ができない場合がございます。何卒ご了承ください。

岡三RSS集いの広場では、複数の単語による検索が可能です。

例)関数 and サンプル
→AND検索となり、「関数」および「サンプル」を含む検索結果が表示されます。

例)関数 or サンプル
→OR検索となり、「関数」または「サンプル」を含む検索結果が表示されます。

例)関数 not サンプル
→NOT検索となり、「関数」を含むが「サンプル」は含まない検索結果が表示されます。

※and、or、notの前後は半角スペースで区切ってください。
※単語の間を半角スペースで区切るだけだと、OR検索となります。