投稿日:2025年1月9日 | 最終更新日:2025年1月9日

Excelで資産管理帳簿をつけていて、日本株の現在価格を自動で取りたくなったのでVBA関数を作りました。
過去に作ったGoogleファイナンスは東証しか対応していなかったので、Ver.2としてYahoo!ファイナンスから取得するようにして、札証、名証、福証および投資信託に対応しました。
目次
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://finance.yahoo.co.jp/quote/" + CStr(code)
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
str_stock_exchange = Mid(buf, InStr(buf, str_url) + Len(str_url), 2)
If InStr(str_stock_exchange, ".") = 0 Then '投資信託時は空にする
str_stock_exchange = ""
End If
tempstr = """code"":""" + CStr(code) + str_stock_exchange + """,""price"":"""
buf = Mid(buf, InStr(buf, tempstr) + Len(tempstr))
buf = Left(buf, InStr(buf, """") - 1)
buf = Replace(buf, ",", "")
If str_stock_exchange = "" Then '投資信託時は1口の価格を返す
stock_price = Val(buf) / 10000
Else
stock_price = Val(buf)
End If
STOCKPRICEJP = stock_price
End Function
- Ver.2での改良点
- 東京証券取引所(東証)以外の取引所の価格取得に対応
- 札幌証券取引所(札証)、名古屋証券取引所(名証)、福岡証券取引所(福証)
- 投資信託の価格取得に対応
- 1口あたりの価格を返すので、10000口の価格を返したい場合は”/10000″を削除すればよい
- 東京証券取引所(東証)以外の取引所の価格取得に対応
- 関数がどうやって現在の株価を取得しているかの説明

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

コメント