Excel VBAで企業コードから株価と配当利回りを取得する方法|企業名も自動入力する方法を解説

Visual Basic

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解析です。

例えば以下のような流れになります。

  1. 企業コードからURL生成
  2. Webページ取得
  3. HTML解析
  4. 株価部分抽出
  5. セルへ書き込み

ただし、サイト側の仕様変更で突然動かなくなることもあります。

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件以上の銘柄管理でも、自動化できれば大幅に効率化できるため、取得元選びとメンテナンス性を意識するのが重要です。

コメント

タイトルとURLをコピーしました