SSブログ

当日データ取得更新マクロ公開 [投資・経済全般]

当日データを取得更新するマクロがようやく完成いたしました。同マクロを研究所サイトに公開いたしましたので、興味のある方はダウンロードしてご利用ください。
なお、直前まで細かな調整を行っていたため、予定よりも大幅に時間が掛かってしまいました。

そのため、大変申し訳ありませんが、今日のコラムは、研究所サイトに掲示しました上記マクロの解説にて代用させていただきます。
なお、マクロをご利用になった際のご意見・ご感想等ございましたら、当ブログにてコメントいただけますと幸いです。


<以下、研究所サイトにおける解説です>


当日の株価データや指数・先物データをヤフーファイナンスから取得するマクロ(エクセルブック)を、ダウンロードページの無償ダウンロードコーナーに公開いたしました。
入手をご希望の方は、ダウンロードページよりダウンロードを行ってください。

ファイルは2つあり、いずれの実行もエクセル97以上が必要となります。「当日データ取得010.xls」は当日データ取得更新マクロの本体です。基本的な動作は、このマクロのみで可能です。
また、同マクロをサポートするために、「当日データ取得更新実行010.xls」をご用意いたしました。これは、データを取得する証券コードの範囲を細かく設定するためのマクロです。

以下に、これらのマクロの使用方法をご説明いたします。


1.当日データ取得更新マクロVer1.00(当日データ取得010.xls)

データを新規に取得するには、当日データ取得シートを選択し、C3セルに取得を開始する証券コード、C4セルに取得を終了する証券コードを入力します。
その後、ツールメニュー(エクセル2007では開発リボン)のマクロを選択し、「当日データ取得」マクロを選んで実行ボタンを押します。

すると、シート最下行の次行以降に、C3セルで設定した証券コードからC4セルで設定した証券コードに達するまで、昇順でデータを取得して行きます。
各コード毎に、東証⇒大証⇒名証⇒札証⇒福証⇒ジャスダック⇒ヘラクレスの順に走査し、サイトに登録されているデータのみを取得してシートに書き出して行きます。

取得するデータは、証券コード、市場、銘柄、始値、高値、安値、終値、出来高、前日終値で、さらに前日比を計算して出力しています。
データが存在しない場合は基本的に「---」と表示されますが、市場についてはごく稀に意図しない表示がなされる場合があります。その際は、お手数ですが手動で修正してください。

初期状態においては、2009年6月5日時点で取得可能な全銘柄があらかじめ登録されていますので、基本的には再度取得する必要はありません。
ただ、銘柄の追加や削除があったりして、登録銘柄を修正する必要が生じた場合は、それらの銘柄を明確に選別できないのであれば、再度取得する必要があるかと思います。

その場合は、それまでの登録データ(7行目以降)を全て削除した後、「当日データ取得」マクロを実行してください。
それまでのデータを残しておきたい場合は、適当なシートにコピーしておいてください。

ちなみに、当マクロはシートに依存せずに実行できますので、新たなシートにスタイルをコピーしてから実行してもOKです。
また、データは最下行以降に追加する形となりますので、マクロを誤って実行した結果、以前のデータを削除してしまう危険性は小さくなっています。

データを取得した後、C3セルの値を7に設定して「当日データ更新」マクロを実行すれば、そのまま日々の更新が可能となりますが、最初に取得したままですと重複上場市場のデータも含まれてしまいますので、ほとんど取引のない市場銘柄も更新されてしまうことになります。

それらを全て含めると、更新する銘柄数が約25%増となってしまいますので、それらは除外した方がよいでしょう。
そこで、それらを除外して登録し直したものが「当日データ更新」シートとなります。ここには、各銘柄の主要市場のみを登録してありますが、それでも指数などを含めて4,042銘柄もあります。

一部の上場投信など、ほとんど取引がない銘柄もありますし、また、実際に取引する可能性が全くない銘柄もあるかと思います。
そのような銘柄を除外して必要な銘柄のみを登録し、「当日データ更新」マクロで日々更新を行えば、更新時間の短縮が図れます。

「当日データ更新」マクロは、「当日データ更新」シートに登録された銘柄のデータ更新を行うためのマクロですが、シート名には依存しません。
基本的なスタイルが同じであれば、任意のシートで実行してもOKです。

「当日データ取得」シートとのスタイル上の違いは、C3セルの扱いです。「当日データ取得」シート(「当日データ取得」マクロを実行するシート)では、C3セルにはデータ取得を開始する証券コードを設定しましたが、「当日データ更新」マクロではデータの更新を開始する行を設定します。

例えば、この値を100に設定すると、100行目の銘柄以降を順次更新していきます。通常は、7を設定して最初の銘柄から更新を行うことになります。
何故このような仕様にしているかといいますと、何らかの原因によって途中で更新が止まってしまった場合などに、その続きから更新を再開することを想定しているためです。

「当日データ更新」マクロを実行しますと、更新を行う銘柄のデータを含めてその先3行分のデータを消去しながら処理を進めていきます。
それによって、現在の進行状況を容易に確認することができます。

また、エクセルのハングアップ対策として、10行分の更新を行う度にブックを上書き保存しています。それにより、万が一更新処理の途中でエクセルの動作が停止したとしても、ほぼ直近の状態を保存し、再起動後にそこから処理を再開することができます。

ちなみに、エクセルのハングアップ(のような状態)は、サイトへの接続に失敗してHTMLソースを取得できなかった際に生じるようです。本マクロでは特別なタイムアウト処理は行っていませんが、一定時間(5分程度)の停滞後にVBAがエラーを出した場合は、最大10回まで再取得を試みるようにしています。

そのため、途中で処理が停止しても、大抵の場合は5分後には復活しますが、その場に立ち会っているような時には、エクセルを強制終了して処理を再開した方がトータルの更新時間が短くなります。
C3セルの開始行は常に更新されていますので、基本的にはエクセルを再起動して本ブックを開き、「当日データ更新」マクロを再実行するだけです。

ちなみに、自動的に再取得を行う処理は、インターネットエクスプローラ(IE)のタイムアウトを利用していますので、IEのタイムアウト時間を変更することで、処理の停止時間を短縮することができます。変更方法につきましては、 Microsoftサポートオンライン の文書番号:181050をご覧ください。

ただし、この設定変更はIEの閲覧の際にも適用されてしまいますので、重いサイトを頻繁に開くことが多いような場合は、タイムアウトを短く設定してしまうと、サイト表示に影響が生じてしまう場合があります。
また、この設定変更はレジストリを操作しますので、実行する際は十分に注意してください。


2.当日データ取得実行マクロVer1.00(当日データ取得更新実行010.xls)

本マクロは、当日データ取得更新マクロにおける「当日データ取得」マクロをサポートするためのものです。
本マクロを実行することで、「当日データ取得」マクロによる新規データ取得を、細かく制御することができます。

B3セルに当日データ取得更新マクロファイルがあるフォルダ名を、B4セルに同ファイル名を、B5セルに同マクロ名を入力します。
なお、通常はB3セルのフォルダ名のみ変更すればOKです。

続いて、B列およびC列の8行目以降に、取得したい範囲の(ヤフーファイナンス上の)証券コードを設定します。初期状態では100番毎に設定していますが、こうすることで100番毎にそれまで取得したデータを保存することができます。

もしもエクセルがハングアップする可能性が小さければ、取得範囲を大きくした方がトータルの取得時間は短くなります。逆に、通信品質が悪く、データの取得に度々失敗するような場合は、取得範囲を小さくすることで、データの再取得が容易になります。

なお、本マクロを実行する前には、必ず当日データ取得更新マクロの「当日データ取得」シートの7行目以降を消去し、そのシートを開いた状態で保存しておいてください。
すなわち、本マクロから当日データ取得更新マクロを呼び出した際に、まっさらな「当日データ取得」シートが処理対象となるようにする必要があるわけです。

マクロを実行するには、以上の設定を行った上で、A列の処理欄(A列8行目以降)に"1"を設定し、ツールメニューのマクロから「実行ファイル更新」マクロを実行してください。
マクロを実行しますと、当日データ取得更新マクロが開いて、設定した取得範囲毎に処理が進行します。

処理が終わった取得範囲の処理欄には、"済"と表示されます。"済"が設定された取得範囲は、その後マクロを再度実行しても処理されません。
また、マクロの実行処理はB列のセルが空白になるまで継続されます。そのため、途中に空白行を挿入することで、処理を行う範囲を制限することができます。これは、当日データ取得更新マクロにおいても同様です。


以上、当日データ取得更新マクロの使用方法についてご説明いたしました。ご不明な点等ございましたら、お問い合わせページよりお問い合わせください。
ちなみに、これらのマクロは必要最小限の機能しか備えていませんので、必要があればご自身で改造するなりしてご利用ください。それを妨げないために、これらのマクロにはプロテクトは掛けておりません。

ただし、著作権を放棄したわけではありませんので、改造・未改造、有償・無償を問わず、第3者への無断提供はご遠慮ください(そのような必要が生じた場合は別途ご相談ください)。
なお、当サイトへのリンクや当サイトの紹介等につきましては、ご自由にしていただいて構いません。

また、これらのマクロは現行のヤフーファイナンスからのデータ取得を前提としておりますので、今後、同サイトの仕様が変更になった場合には、正常にデータを取得できなくなる可能性があります。
その際にはできるだけ柔軟に対応したいとは考えていますが、いち早く不具合等をご確認された場合には、ご一報いただけますと幸いです。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。