投稿日:2023年7月23日 | 最終更新日:2024年3月31日

Excelで資産管理帳簿をつけていて、日本株の現在価格を自動で取りたくなったのでVBA関数を作りました。
マネーフォワードも愛用していますが、自分なりのカスタマイズした管理帳簿も欲しくてExcelも活用しています。
目次
VBA 日本株の現在価格取得関数
- VBAで自作関数を使うための基礎知識(事前準備)
- VBA使用にはExcelファイルの拡張子をxlsm(マクロ有効ブック)にして保存する必要がある
- Excelのシートタブ上で右クリックして「コードの表示」を選択すればコード入力画面が開く
- コード入力画面左上の「プロジェクト」→「Microsoft Excel Objects」を選択して右クリックして「挿入」→「標準モジュール」を選択すると「Module1」が増える
- 「Module1」をダブルクリックしてActiveにして右のコード記載エリアに自作関数を記載する

- Excel VBAで、指定証券コードの現在株価を取得する関数
- 2023/07/23時点でのWindows11、Office2019上での動作確認済み
- どの環境でも動作保証してるわけではないので、使用は自己責任で
- コード入力画面に下記をコピペしたらOK
- 2023/07/23時点でのWindows11、Office2019上での動作確認済み
Function STOCKPRICEJP(code)
str_url = "https://www.google.com/finance/quote/ " + CStr(code) + ":TYO?hl=ja"
On Error Resume Next
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", str_url, False
.send
Set stm = CreateObject("ADODB.Stream")
stm.Type = 1
stm.Open
stm.Write .responseBody
stm.Position = 0
stm.Type = 2
stm.Charset = "UTF-8"
buf = stm.ReadText(-1)
End With
Err.Clear
On Error GoTo 0
buf = Mid(buf, InStr(buf, "<div jsname=""ip75Cb"" class=""Bu4oXd""><div class=""YMlKec"">") + Len("<div jsname=""ip75Cb"" class=""Bu4oXd""><div class=""YMlKec"">"))
buf = Left(buf, InStr(buf, "</div>") - 1)
buf = Replace(buf, "¥", "")
buf = Replace(buf, ",", "")
STOCKPRICEJP = Val(buf)
End Function
- 関数がどうやって現在の株価を取得しているかの説明
- 関数内でGoogle Financeにアクセスして、取得したページ情報から現在株価を抽出している

関数の使用例
- 上記関数を定義したxlsmファイルで通常のエクセル関数(SUM等)と同じように呼び出すだけ
- 関数の引数には証券コードを入力すればよい

コメント
コメント一覧 (19件)
初めまして。大変参考になりました。
ありがとうございます!
こちらの関数に〇日前、や〇カ月前のように期間を指定させることは可能ですか?
お手すきの際にご教示いただけますと幸いです。
>かぶのしおづけさん
コメントありがとうございます。
GoogleFinanceサイトの表示テキストからデータを取得しているため、表示されていないデータの取得はできないです。ですので前日の終値くらいならとれそうですが、指定日付は難しそうです。
ExcelにこだわりなくGoogleスプレッドシートでもいいならば、株探からデータを取得する方法を提示している記事が検索するとでてくるのでそちらを参考にすると良いかもしれません。
初めまして、参考にしてエクセルでやってみたのですが、どうしても株価が”VALUE!”とでて
うまくgooglefinanceから引っ張ってこれません
何か原因は考えられますでしょうか。
djsnow26さんがコメントくださった内容を入れると解決するかもしれません。
“返ってくる株価が大きいとExcelセル上で “#VALUE” のエラーが出ました(56,590で発生)。STOCKPRICEJP関数定義で ”As Integer” とあったので、その定義を取り払ったところ正常に動作しました”
Excel上での株価の取得方法を以前から調べていたのですが、「え、Pythonの勉強から始めるの?」というようなページばかりで閉口していたところ、おかげさまで極めて簡単に実現できました。ありがとうございます。
早速使用させていただいておりますが、返ってくる株価が大きいとExcelセル上で “#VALUE” のエラーが出ました(56,590で発生)。STOCKPRICEJP関数定義で ”As Integer” とあったので、その定義を取り払ったところ正常に動作しました。既知かもしれませんが、念のためお知らせしておきます。
ご指摘ありがとうございます。記事上のコードを修正しておきました。助かります。
大変参考になりました
他にも応用したいと思います
ありがとうございます!
こちら、後日ファイルを開いても、なぜか当日の株価に更新がされないのですが、なにか想定されることはあるでしょうか
計算方法を自動にしたり手動にして再計算してもダメで、当該セル(複数)をコピペすると直近値が入る、という感じなのです…
ファイルを開いたときに自動更新したいのであれば、株価取得関数がファイル開いたときに自動実行されるようにする必要があります。
Private Sub Workbook_Open()
ここで株価取得処理を記述
End Sub
あるいは
=STOCKPRICEJP(C3)+NOW()*0
を一度試してみてください。
追伸 NOW()よりTODAY()の方が良さげです。
参考にさせて頂き非常に助かっております。
サイトを拝見し悪戦苦闘しながら作成しております。
リクエストで前日の株価を拾い出すコードはありますか?
Google Financeをブラウザで参照すると前日の株価が表示されますが、VBAから直接URL指定してアクセスすると該当情報が含まれていませんでした。
ですので、前日の株価を拾う方法はご提案できません。ごめんなさい。
ありがとうございます!大変勉強になりました。
欲張って証券コードから銘柄名を取得するコードを書こうとしているのですが、なかなかうまくいきません。
をInStr()に指定したりしても、何故か文字列が見つからず…。
お手すきの際にでも何かアドバイスいただければ幸いです。
銘柄名取得する関数も作ってみました。
ご参考にどうぞ。
https://donichi.jp/1515/
新しい証券コードの形式「135A」などがエラーになってしまいます。
Str(code)の部分かなと思いますが、どう直したらよいでしょうか?
以下のようにしたら135Aも問題なく動きました。(アルファベット入りの銘柄を持っていなかったので気づきませんでした)
quote/の後ろに半角スペースを入れて、StrをCStrにしています。
str_url = “https://www.google.com/finance/quote/ ” + CStr(code) + “:TYO?hl=ja”
ありがとうございました。
最初どうやって関数出すのかわかりませんでしたがSTOCKPRICEだったんですね.マクロ使ったことなかったですがとてもいいものをいただきありがとうございます.毎回マネーフォワードから時価の価格をコピペで引っ張ってきていたのでこれから楽になります.ほんとうに感謝します.ブログも拝見させていただきます.
お役に立ててよかったです。
私もマネーフォワードは愛用していますが、自分なりの管理をしたいポイントもありExcelでも管理しています。