タイトルの通りです。
Excelで株価や銘柄名を自動取得する自作関数を作成したので、メモしておきます。
こちらの記事を参考にさせていただきました。ありがとうございます。
スクレイピングにあたるので、使用は自己責任でお願いします。
今回は以下3つの関数を作成しました。
日本株の銘柄コードから株価を取得する関数
これはnoteの記事をそのまま参考にさせてもらいました。
日本株の銘柄コードから銘柄名を取得する関数
noteで紹介されている関数を参考に、以下のコードで作成。コードは標準モジュールに記載します。
=GetStockName(A1) のような感じで呼び出します。
Public Function GetStockName(ticker As String) As String
Dim http As Object
Dim html As Object
Dim url As String
Dim startPos As Long
Dim endPos As Long
Dim name As String
' Create the HTTP object
Set http = CreateObject("MSXML2.XMLHTTP")
' Construct the URL
url = "https://www.google.com/finance/quote/" & ticker & ":TYO"
' Send the request
http.Open "GET", url, False
http.send
' Get the response text
Set html = CreateObject("htmlfile")
html.body.innerHTML = http.responseText
' Find the stock name in the HTML
startPos = InStr(html.body.innerHTML, "class=" & """" & "zzDege")
If startPos > 0 Then
startPos = InStr(startPos, html.body.innerHTML, ">") + 1
endPos = InStr(startPos, html.body.innerHTML, "<")
name = Mid(html.body.innerHTML, startPos, endPos - startPos)
name = Replace(name, "&", "&")
GetStockName = name
Else
GetStockName = "Not Found" ' Error value
End If
End Function
「セブン&アイ・ホールディングス」のように銘柄名に「&」が含まれている場合、「セブン&アイ・ホールディングス」と表示されてしまうため、「&」を「&」に置換しています。
日本株の銘柄コードから配当利回りを取得する関数
noteで紹介されている関数を参考に、以下のコードで作成。コードは標準モジュールに記載します。
=GetStockDividendYield(A1) のような感じで呼び出します。
Public Function GetStockDividendYield(ticker As String) As Double
Dim http As Object
Dim html As Object
Dim url As String
Dim startPos As Long
Dim endPos As Long
Dim yield As String
' Create the HTTP object
Set http = CreateObject("MSXML2.XMLHTTP")
' Construct the URL
url = "https://www.google.com/finance/quote/" & ticker & ":TYO"
' Send the request
http.Open "GET", url, False
http.send
' Get the response text
Set html = CreateObject("htmlfile")
html.body.innerHTML = http.responseText
' Find the stock dividend yield in the HTML
startPos = InStr(html.body.innerHTML, "時価総額に対する年間配当の比率であり、株式の配当利益を見積もったもの")
If startPos > 0 Then
startPos = startPos + 67
endPos = InStr(startPos, html.body.innerHTML, "<")
yield = Mid(html.body.innerHTML, startPos, endPos - startPos)
If yield = "-" Then
yield = 0
Else
yield = Mid(yield, 1, endPos - startPos - 1)
End If
GetStockDividendYield = CDbl(yield) / 100
Else
GetStockDividendYield = 0 ' Error value
End If
End Function
改善の余地はあるかもですが、一旦これで取得できるようになったので満足です。

