Excel VBAを使って株価情報を自動取得したいというケースは非常に多く、特に「A列に企業コードを入力したら、B列へ企業名、C列へ株価、D列へ配当利回りを自動取得したい」というニーズは投資管理や銘柄分析でよく使われます。この記事では、Excel VBAで株価情報を取得する基本的な考え方や、実装時によくあるポイントを整理します。
まず理解したい「取得元サイト」の存在
VBAだけでは株価データは存在しないため、どこかのWebサイトやAPIから取得する必要があります。
一般的には以下のような情報源が使われます。
| 取得元 | 特徴 |
|---|---|
| Yahoo!ファイナンス | 情報量が多い |
| 株探 | 配当情報が見やすい |
| 証券会社API | 精度が高い |
| Google Finance | 関数利用向け |
VBAでは「Webページを読み込んで必要情報を抜き出す」という形になることが多いです。
つまり、VBA単体ではなく“Webスクレイピング”がセットになるケースが一般的です。
基本的なシート構成例
例えば以下のような構成で管理すると扱いやすくなります。
| 列 | 内容 |
|---|---|
| A列 | 企業コード |
| B列 | 企業名 |
| C列 | 株価 |
| D列 | 配当利回り |
例えばA列へ「7203」を入力すると、トヨタ自動車の情報を取得するイメージです。
VBA側ではA列をループ処理しながら、各企業コードごとに情報取得していきます。
VBAでよく使われる取得方法
Excel VBAで株価取得する場合、以下の方法が比較的よく使われます。
- XMLHTTPによるWeb取得
- HTMLDocument解析
- Power Query利用
- Selenium連携
比較的シンプルなのは、XMLHTTP+HTML解析です。
例えば以下のような流れになります。
- 企業コードからURL生成
- Webページ取得
- HTML解析
- 株価部分抽出
- セルへ書き込み
ただし、サイト側の仕様変更で突然動かなくなることもあります。
Yahoo!ファイナンス利用時の注意点
初心者がまず試しやすいのはYahoo!ファイナンス系ですが、近年はスクレイピング対策が強化されています。
そのため、単純なHTML取得だけではうまくいかない場合があります。
また、以下の問題もあります。
- HTML構造変更
- アクセス制限
- JavaScript描画
- 利用規約問題
特に配当利回りはページ構造変更の影響を受けやすいため、定期的な修正が必要になるケースがあります。
実際に使われやすいVBAの考え方
例えばVBAでは以下のようなイメージで処理されます。
For Each code In Range("A2:A100")
URL生成
HTML取得
株価取得
配当利回り取得
セルへ出力
Next
このようにループ処理で一覧取得する形が一般的です。
企業コードが200件あっても、自動取得できればかなり作業時間を短縮できます。
最近はPower Queryの方が簡単な場合もある
最近のExcelでは、VBAよりPower Queryの方が安定するケースもあります。
特に以下のメリットがあります。
| Power Query | 特徴 |
|---|---|
| GUI操作可能 | 初心者向け |
| 再読み込み簡単 | 更新しやすい |
| Web取得対応 | VBA不要な場合もある |
VBAにこだわらないなら、Power Query+関数管理の方が保守しやすいこともあります。
証券会社APIを使うと安定しやすい
本格的に運用する場合、無料サイトスクレイピングよりAPI利用の方が安定しやすいです。
例えば以下があります。
- Alpha Vantage
- Finnhub
- 証券会社API
APIならJSON形式で取得できるため、VBAでも扱いやすくなります。
ただし、日本株の配当利回り情報まで揃うAPIは限られるため、用途によって使い分けが必要です。
まとめ
Excel VBAで企業コードから企業名・株価・配当利回りを取得する場合、基本的にはWebサイトやAPIからデータ取得する形になります。
一般的には、A列の企業コードをループ処理し、Yahoo!ファイナンスなどからHTML解析して取得する方法がよく使われています。
ただし、最近はサイト仕様変更やスクレイピング制限も増えているため、Power QueryやAPI利用も検討すると安定しやすくなります。200件以上の銘柄管理でも、自動化できれば大幅に効率化できるため、取得元選びとメンテナンス性を意識するのが重要です。


コメント