- 締切済み
楽天RSSからエクセルVBAを使用し確実にデータ受信する方法に関して質問です。
楽天のRSSとGMO証券のAPIを使用し、エクセルVBAにて自動売買をしているのですが、RSSのデータを受信出来ていない事が多々あり非常に困っております。 どういう事かと申しますと、3台のPCで自動売買エクセルを起動し1秒ごとに銘柄情報を監視し、条件を満たした銘柄を売買すると言うものなのですが、肝心のデータがRSSから受信出来ませんと、売買条件を満たせ無い為、売買出来ないと言う状況です。 3台起動していても、平均すると1.2台程度の稼動率かと思います。 そこで、エクセルVBAを使用し、RSSから確実にデータ受信する方法をご存知の方がいらっしゃいましたらアドバイス頂ければと思います。 個人的には、データ受信要求を投げてから、ある一定時間以上応答が無い場合、再度RSSからデータ受信要求を投げる。 もしくは、RSS.exeを再起動すると言う方法になるかと思います。 エクセルVBAにて現状の改善方法をご存知の方、宜しくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- anotherone
- ベストアンサー率54% (35/64)
先にダメになっているのは RSSの方なのでしょうか もし毎秒受信して たくさんのセルを更新して たくさん計算するなら Excel側は処理できているのでしょうか Excelが先にギブアップして RSSが送っているデータを受信できない 受信処理をExcelができない ということはありませんか シートとコードを見せてほしいところですが いろいろ秘密もたくさんあるかもしれないので もし可能なら見せてください 下記は参考です シートの更新の方法でExcelの負荷が変わります http://officetanaka.net/excel/vba/speed/index.htm http://www.microsoft.com/japan/windowsserver2003/ccs/excel_service.mspx 単純には セルを配列として取り込んで 計算は配列で行い http://officetanaka.net/excel/vba/speed/s11.htm 極力セルにアクセスする回数を減らし負荷を下げます ここまでくると シートに意味があるか シートは必要か ということになります シートに書くのをやめればコード上の処理だけになります 自動運転ならシート表示は最低限でいいはずです もし可能なら データはExcelではなく 外に置きます シートにデータを置かないで下さい シートは複雑で多岐にわたる 属性を持っているため使うとそれだけで負担になります MySQLなどDB またはTXT,CSVなどを置き場所にして 必要なデータは外に 処理/判断はコードで 表示は最低限 ユーザフォームやHTMLやExcel以外にします もし可能なら Excelから離れて VBS WSH HTA を使用して VBAの知識を使って 別のものを作成することをおすすめします Excelの負担を回避してVBAの資産を有効利用できる良い方法だと思います くわしい内容が分かれば詳しいサンプルを用意しますが どの程度の処理内容が理解可能かによります VBAはくわしいのでしょうか
お礼
anotherone さん 丁寧なアドバイスありがとうございます。 問題点がうまく伝わっていないようでしたので、再度、記載させて頂きます。 9時にマーケットがオープンしその直後にRSS関数のセルに値が入り更新されると言うのが通常の動きですが、今の問題は9時を過ぎてもRSS関数のセルの値が一切変わらず、更新されないと言う事が問題の部分となります。 原因は、エクセルハング、もしくは、RSS.exeからデータ配信がされない(RSS.exeのハング)もしくは、RSS内部の処理でタイムアウト値が設定されておらず、データ受信待ちのまま待機し続けていると言った所かと思います。 なんとなくの予想は可能ですが、実際何が原因で今の問題が発生しているか全く分からない為、問題の切り分け、及び、対処を行いたいと思っております。 問題を切り分ける為に、VBAにて、DDEサーバ(RSS.exe)、及び、DDEクライアント(エクセル)の状態を監視し、ハングしている方を再起動などの対策をとりたいのですが、VBAでどのようにして状態監視をすれば良いのか分からない為、問題の切り分けが出来ていないのが現状です。 上記の問題切り分けの為にDDEサーバ、DDEクライアントの監視方法等ご存知であれば、教えて頂けると幸いです。
補足
>>続きです。 anotherone さんのアドバイスを元にエクセルの修正を行い、不要な処理を除くよう対策をさせて頂きたいと思います。 今までは、1秒ごとにVBAにて監視(300銘柄×11アイテム=MAX:3300セル)しており、CPUリソースの消費率は、20~30%程度でしたので、CPUネック、もしくは、エクセルがハングしてデータ受信出来ていないと言う事は想定外でしたが、アドバイス頂いたように不要な監視セルを削除したり、不要な処理を省く事で動きは以前よりかなり軽くなったように思いますので、この対策で、エクセルハングは起こり辛くなったように思います。 ちなみに、自分は、データベースエンジニアをしており、VBAやVB.netは最近勉強しはじめたばかりですので、難しい事は分かりません(Win32API使う等)が、基本的なプログラミングの部分は問題無いと思います。 また、最終的には、VB.netとデータベースと連携したものを作ろうと考えておりますが、まずは、自分の思ったようにプログラムが動く事が最低条件かと思っておりますので、この問題をまずは解決したいと思っておりますので、お手数をおかけ致しますが、ご協力よろしくお願い致します。