RSSユーザー
Quote関数の使い方について
岡三RSSの初心者です(先物での自動売買の経験は1年ちょっとです)。最近一般株をトライしております。ところで、本日、excelのセルJ3に、=QUOTE(I3,1,2)と記入し、I3に9479(企業名インプレス)と記入しました。しかし、I3には、0としか出力されません。インプレスと出力されると思ったのですが。時刻は16:20でした。15:00を過ぎると、一般株のサービスは停止してしまうのでしょうか?教えていただければ幸いです。
2021年07月05日
RSSユーザー
大野様
ところで、先ほどの質問は、意味があいまいでしたので、以下の様に書き換えますので、よろしくお願いいたします。
質問の趣旨は、N(更新回数)を変数にしたい。ということでした。
従いまして、「この仕事が終了した」ことを検知する事が出来れば、ループを組み、任意のNで更新が可能となるのではないでしょうか?
即ち
If この仕事は終了=true then goto AAA
などとやって、AAAにて、異なった時間が書き込まれたセルを以下
Application.OnTime(Cells(x,y ), "UpdateRSSData")
に埋め込む事が出来れば、Nを可変に出来るように思います。
あるいは、もっと簡単にNを変数に出来る記述の方法があれば、教えていただければありがたいです。
2021年07月15日
大野 了
RSSユーザさん、こんにちは!!
>ところで、ご指定のとおり実験して動作を確認しました。大変ありがとうございました。ところで、これを拡張しまして、時刻α時からβ分おきにN回更新を繰り返したいときは、
>Call Application.OnTime(Cells(1, y), "UpdateRSSData")
>の文につきy=1からNまでをループを組んで実行することは出来ないですね?
こちらですが、ループを組んで動かすことは可能ですので、大丈夫と思います。
β分の間隔が1秒未満だと厳しいですが・・・
分単位であれば問題ないと思います。
>質問の趣旨は、N(更新回数)を変数にしたい。ということでした。
>従いまして、「この仕事が終了した」ことを検知する事が出来れば、ループを組み、任意のNで更新が可能となるのではないでしょうか?
申し訳ございません、ご質問の主旨をいまいち理解できておらず、
RSSユーザさんのご質問に正確に回答できているかわかりませんが、
こちらは時刻αをA1などのセルで指定したように、
N(更新回数)をVBAの外から指定したいという事になりますでしょうか?
もしそれでしたら・・・
B1に更新回数を入れるとした場合
For i = 1 To Cells(1, 2)
という形でループを組めば大丈夫だと思ます!!
何か的外れな返答のような気もしますが、もしその時はまたご返信頂けますと幸いです!
2021年07月16日
RSSユーザー
大野様
私の質問を更に明確にするため、以下のプログラムの例で、懸念を申し上げたいと思います。
但し、Cells(1,2)には100が入っていると仮定します。
更に、Cells(2,1)~Cells(2,100)には時刻が入っていると仮定します。
更に、3行目の次の仕事というのは、更新された直後に、その株価データの上昇率を計算し、トップ20位までをリストアップする作業であると仮定します。
1行目; For i=1 to Cells(1,2)
2行目: Call Application.OnTime(Cells(2,i),”UpdateRSSData”)
3行目: Call 次の仕事(i)
4行目: Next i
5行目: End Sub
こうしますと、i=1のとき、2行目が実行されます。次に直ちに3行目が実行されますが、Cells(2,1)に書き込まれている時刻が現時刻の1分後であったとしますと、未だに株価データは更新されませんので、誤った計算値がリストアップされてしまいます。これを防ぐ為には、2行目と3行目の間に、目的の時間まで待ち、更に更新作業が終了するまでの間、3行目の作業開始を待たせる命令を、入れて置く必要があるのではないか?ということです。
以上私の懸念を説明いたしました。この懸念は理解していただけたでしょうか?このあたり教えていただけたらありがたいです。
2021年07月16日
大野 了
RSSユーザさん、こんにちは
こちらは更新ボタンを押す以外の処理もされたいという事でしょうか?
それでしたら『Call 次の仕事』の中の処理を、
UpdateRSSData の中に入れてしまうというのはいかがでしょうか?
そうすれば指定時間にUpdateRSSDataが動くので、
その中で更新ボタンの押下とトップ20のリストアップをやらせてあげればよいと思います!!
2021年07月17日
RSSユーザー
マクロ主要部.xlsx (9.6KB)
大野様
実験結果の結論は、一部うまく行きましたが、1部うまく行っておりません。
うまく行った部分は、更新を設定した時刻(例として09:10:00)を更新開始時刻とし、更新繰り返し時間間隔を15秒とし、繰り返し回数を4回として、更新が4回、15秒おきに自動的に行われることを確認しました。(これで大野様の提示していただいた更新の自動化については90%が終了したと考えて良いと思われます)
しかしながら、更新が行われた直後の処理がうまく動きません。
更新直後にしたい仕事は、
1.できあがった株価上昇率20位のリストを作成
2.出来上がったリストを、他の場所にコピーする作業
3.出来上がったリストを、次の更新処理用にクリアする作業
の3つですが、1と3は問題なく処理が終了しますが、2の処理がどうやってもうまくいきません。その理由は、更新回数をカウントするパラメータを引数として、2のコピーするタスクに引き渡し、更新回数に対応した場所にリストをコピーしようとするものです。しかし、メインプログラムを起動したとたんループは4回すぐに回ってしまい、この引数は最大の数になってしまいます。しかる後に、おもむろに、規定の時間が来る毎にリストが更新されます(見ていると変化するのでわかります)。しかし、引数は最終値になりっぱなしですので、いつも同じ場所にリストがコピーされてしまいます。この不可思議な現象はどのような背景から発生するのでしょうか?教えていただけたらありがたいです。(この実験は、土、日、月と3日間合計50回ぐらい繰り返しておりますが、原因を発見出来ておりません。マクロの主要部のコピーを添付しましたので参考にしていただければ幸いです)
2021年07月19日
大野 了
RSSユーザさん、こんにちは
こちらは、
Call CopyListWright
がうまく動かないという事でしょうかー?
肝心のCopyListWrightの中身がどのような中身かわからないため、何とも言えませんが、
CopyListWright自体が、引数を受け取っていないため、
もしCopyListWrightの中で、どこかのセルを参照しコピー先を決めているのであれば
onTimeを『設定した時のセルの値』ではなく、
その後にonTimeで『動いた時のセルの値』が使用されます。
なので、一番最後のセルの値で動いてるものだと思われます。
解決するには、
ループ内でonTimeの設定を行う際に、4回とも違う引数を渡すか、
onTimeの設定は現状のままで、
UpdateRSSData内で、UpdateRSSDataが動いた回数をどこかのセルに出力し
そのセルの値を見て、CopyListWrightを動かせば大丈夫だと思います!!
※もし、onTimeで実行設定した関数に引数を設定する形でやられた場合は、
※以下のサイトが参考になると思います!
https://excel-ubara.com/excelvba1/EXCELVBA420.html
2021年07月19日
RSSユーザー
大野様
先ほどの質問を出してからしばらくして、良いアイデアが湧き、それを試したところうまく行きました。そのアイデアは、更新回数を示すパラメータを、UpdateRSSData内でインクリメントすれば良いのではないか? ということです。ということで、そのパラメータ(セルのどこかい空いているところを使っている)が、インクリメントされている部分を、Public Sub UpdateRSSData() の中に移動させたところ、全く問題なく動きました! さきほどの大野様の最後の部分で指摘されている方法と同じではないかと思いました。
これで、ほぼ私の目論んだ方法は完全に実現されました。本当にありがとうございました。
2021年07月19日
大野 了
RSSユーザさん、こんばんは!!
そうですねー
やり方としては同じと思います!!
なにはともあれ、うまく行ったようでよかったです!!
2021年07月19日