. Excel VBA) | エクセルマクロ(Excel VBA)実践蔵 - じっせんぐら
Excel VBA) | エクセルマクロ(Excel VBA)実践蔵 - じっせんぐら
Excel VBA) | エクセルマクロ(Excel VBA)実践蔵 - じっせんぐら

東証株 - 今日の株価を取得するエクセルマクロ(Excel VBA) | エクセルマクロ(VBA)実践蔵 (じっせんぐら)

東証株 - 今日の株価を取得するエクセルマクロ(Excel VBA) 最終更新日:2023-06-07

エクセルで東証株価を取得するマクロ はじめに

Google Spread Sheetで取得することも可能ですが、あえてエクセルマクロ(Excel VBA)で今日の株価を取得するマクロを作ってみました。

関連記事として、Google Spread Sheet版もあります。

  • 関連記事
  • GASで株価の取得やトリガの設定、自動メール送信などについて

IEは、環境構築の必要がなかったのですが、サポート終了のため、Edgeを使用しています。EdgeをVBAから操作するにあたり、「Seleniumのインストール」、「EdgeのWebDriver」、「.NET Framework 3.5」が必要になります。

2024/7/11 追記 : Windows Updateによって、EdgeのVersionが上がると、エラーになるため、EdgeのWebDriverのみ常に最新の状態への更新が必要です。環境構築の参考URLです。外部サイトになります。

この3つをインストール後に、Visual Basic Editorにて、参照設定「Selenium Type Library」が必要です。具体的な操作はこちら。

エクセル表側の見た目 エクセルマクロの詳細について シートオブジェクトに記載するコード '==================================== ' 固定位置の設定 '==================================== ' ---------------------------- ' 取得日セル Range型 ' ---------------------------- Function 取得日セル() As Range Set 取得日セル = Range("D1") End Function ' ---------------------------- ' 項目開始行数 ' ---------------------------- Function 開始行数() As Long 開始行数 = 3 End Function ' ---------------------------- ' 銘柄Code先頭セル Range型 ' ---------------------------- Function CodeTopRng() As Range Set CodeTopRng = Range("B" & 開始行数) End Function ' ---------------------------- ' 表末尾の行位置(行数)を取得 ' ---------------------------- Function 最終行数() As Long 'テーブル末尾(銘柄Codeが空欄)まで If CodeTopRng.Offset(1, 0).Value "" Then '2つ以上銘柄がある場合 最終行数 = CodeTopRng.End(xlDown).Row Else '先頭が最終行 最終行数 = CodeTopRng.Row End If End Function ' ---------------------------- ' 銘柄Code列のセルすべて ' ---------------------------- Function Code列Rngs() As Range '開始行~最終行までのB列情報を返す Set Code列Rngs = Range("B" & 開始行数 & ":B" & 最終行数) End Function ' ---------------------------- ' 銘柄名列のセルすべて ' ---------------------------- Function 銘柄名列Rngs() As Range '開始行~最終行までのC列情報を返す Set 銘柄名列Rngs = Range("C" & 開始行数 & ":C" & 最終行数) End Function ' ---------------------------- ' 株価列のセルすべて ' ---------------------------- Function 株価列Rngs() As Range '開始行~最終行までのD列情報を返す Set 株価列Rngs = Range("D" & 開始行数 & ":D" & 最終行数) End Function ActiveXボタン「株価取得」クリック時のメソッド ' -------------------------------- 'シートの「株価取得」ボタンで呼び出される ' -------------------------------- Private Sub 株価取得_Click() '自作クラスJPNKabuの生成(New)を付ける Dim cIE As New JPNKabu '参照セル Dim aCell As Range '取得数(進捗表示用) Dim getStockCnt As Long '取得日をセット 取得日セル.Value = Now '取得数の初期化 getStockCnt = 0 '進捗率を表示 Application.StatusBar = "ただいま実行中:" & getStockCnt & "/" & Code列Rngs.Rows.Count For Each aCell In Code列Rngs 'JPNKabuクラスに銘柄code情報を渡す Call cIE.SetCode(aCell.Value) '銘柄セルが空欄か確認 If Cells(aCell.Row, 銘柄名列Rngs.Column).Value = "" Then '空欄なら設定する Cells(aCell.Row, 銘柄名列Rngs.Column).Value = cIE.get銘柄 End If '株価の列に株価を設定 Cells(aCell.Row, 株価列Rngs.Column).Value = cIE.get株価 '取得カウンタ getStockCnt = getStockCnt + 1 '進捗率を表示 Application.StatusBar = "ただいま実行中:" & getStockCnt & "/" & Code列Rngs.Rows.Count Next '終了を表示 Application.StatusBar = "完了!" Set cIE = Nothing End Sub 東証株価取得コードの解説 新規クラスモジュール JPNKabuを作成

VBA Project - エクスプローラ内で右クリックして、挿入を選び、クラスモジュールを作成します。

クラスのオブジェクト名は、プロパティウィンドウからJPNKabuに変更します。このオブジェクト名が株価取得_Click内に記述した「Dim cIE As New JPNKabu 」とつながっています。

JPNKabuクラスのSetCodeメソッド '参照設定「Selenium Type Library」 Private myEdge As New EdgeDriver Function SetCode(銘柄code As String) Dim URLStart As String Dim URLEnd As String '画面遷移を抑止 myEdge.SetCapability "ms:edgeOptions", "" 'Edge操作開始 myEdge.Start '引数の銘柄codeも使って、株価取得URLを作成 URLStart = "https://www.google.com/finance/quote/" URLEnd = ":TYO?hl=ja" 'URL設定 myEdge.Get (URLStart & 銘柄code & URLEnd) End Function JPNKabuクラスのSetCodeメソッドの解説 JPNKabuクラスのget銘柄メソッド Function get銘柄() As String Dim element As WebElement Dim str As String Set element = myEdge.FindElementByCss(".zzDege", , False) str = element.Text() get銘柄 = str End Function JPNKabuクラスのget銘柄メソッドの解説 JPNKabuクラスのget株価メソッド Function get株価() As Double Dim element As WebElement Dim str As String Set element = myEdge.FindElementByCss(".YMlKec.fxKbKc", , False) str = element.Text() str = Replace(str, "¥", "", , , vbTextCompare) str = Replace(str, ",", "", , , vbTextCompare) If IsNumeric(str) Then get株価 = CDbl(str) Else get株価 = 0 End If End Function JPNKabuクラスのget株価メソッドの解説

銘柄同様、"YMlKec fxKbKc"は、Google Financeのページで株価が記述されているClass名です。

エクセルマクロ有効ブックのダウンロード

IEは、環境構築の必要がなかったのですが、サポート終了のため、Edgeを使用しています。EdgeをVBAから操作するにあたり、「Seleniumのインストール」、「EdgeのWebDriver」、「.NET Framework 3.5」が必要になります。

この3つをインストール後に、Visual Basic Editorのメニューバー「ツール」から参照設定を選択し、参照設定「Selenium Type Library」にチェックをつける必要があります。参考:参照設定方法

補足だけ記述すると、webDriverのVersion選択時に使用中のEdge Versionが「バージョン 114.0.1823.41」なのに対して、完全一致のwebDriverが見当たらず、「114.0.1823.18」を選んでインストールしましたが、動作はできました。

📎📎📎📎📎📎📎📎📎📎