エクセルで株価を自動で取得するマクロ関数をCopilotで自動生成してみる
2024年夏は株価の大暴落などで株価変動が激しく、ちょっと市場から離れています。そこで最近、流行りの生成AIを使ってエクセルに株価を自動取得するマクロ関数を作成してもらいました。
一番有名なのはChatGPT-4辺りですが、無料でほぼ同等なWindowsの「Copilot」の生成AIで試してみました。Copilotにアクセスできる環境が私の場合、スマホアプリの「Bing」、Windows11ではタスクバー上にある「WindowsのCopilot(プレビュー)」、Edgeブラウザ上の右上にある「Copilot」があります。
同じ質問をしても答えがバラバラだったのは面白いですね~~。今回はEdgeから「Copilot」にアクセスして進めたいと思います。
WEBスクレイピング禁止を明記しているサイトを避けるために株価取得サイトは「Googleファイナンス」で試してみました。このサイトが「OK」と判断した根拠は以下のサイト内で
https://www.google.com/robots.txt
Disallow: /m/
Allow: /m/finance
Disallow: /wml?
Disallow: /wml/?
AllowとなっているのでOKと判断しましたが、使用に関しては自己責任でお願いします。
早速、「Copilot」に質問してみましょう。
質問①
googleファイナンスから日本株の株価を取得する関数をエクセルのマクロで作って
Function GetStockPrice(ticker As String) As Double
Dim http As Object
Dim json As Object
Dim url As String
Dim result As Double
' Create the HTTP object
Set http = CreateObject("MSXML2.XMLHTTP")
' Construct the URL
url = "https://finance.google.com/finance?q=" & ticker & "&output=json"
' Send the request
http.Open "GET", url, False
http.send
' Parse the JSON response
Set json = JsonConverter.ParseJson(http.responseText)
' Extract the stock price
result = json("price")
' Return the stock price
GetStockPrice = result
End Function
あっという間にできましたが、一つ問題が発生です。つまり「JSONパーサー」をインポートしないといけないようです。
JSONパーサーなんて使ったこともないしですし、VBAもたまにしか使わないのでVBA-JSONライブラリをダウンロードしてインポートなんてハードルが私には高そうです。以下の質問を追加ですることにより、私のように素人でも難なく対応できましたが....
質問①-1
JSONパーサーのライブラリをダウンロードするURLを教えてください
質問①-2
ライブラリのインポートの手順をを教えてください
しかし、関数入力時のデータが”TYO:7203”と少し面倒だったり、設定までの手順が余りにも多いのでインポートは中止して、新しい質問をしてみました。
質問②
JSONパーサーを使わない方法はありますか
Function GetStockPrice(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 price 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 price in the HTML
startPos = InStr(html.body.innerHTML, "YMlKec fxKbKc")
If startPos > 0 Then
startPos = InStr(startPos, html.body.innerHTML, ">") + 1
endPos = InStr(startPos, html.body.innerHTML, "<")
price = Mid(html.body.innerHTML, startPos, endPos - startPos)
GetStockPrice = CDbl(price)
Else
GetStockPrice = -1 ' Error value
End If
End Function
今回はJSONパーサーもなく、簡単にCopy&Pasteでマクロ関数が動かせそうです。このコードは入力データは”7203”と数値データだけでOKなので簡単にできます。
少し質問の表現を以下のように変えてみました。
質問③
エクセルで日本の株価を取得する関数を作ってほしい
Function GetStockPrice(ticker As String) As Double
Dim http As Object
Dim html As Object
Dim elements As Object
Dim url As String
Dim price 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 price using getElementsByClassName
Set elements = html.getElementsByClassName("YMlKec fxKbKc")
If elements.Length > 0 Then
price = elements(0).innerText
GetStockPrice = CDbl(price)
Else
GetStockPrice = -1 ' Error value
End If
End Function
実際にこのコードでマクロ関数を作成して動かしてみると上手く動作できることがわかりました。いろいろ質問した後なので学習してこうなったのかもしれませんが、質問の仕方で一発で最適なコードを生成してくれることもありそうですね。
いろいろ試してみると、コードを直接表示せずに他のページからダウンロードしろとかちょっと不親切なこともありましたが、ちょっとしたソフト開発には便利ですね、生成AIは~~~
最後まで読んでいただいて有難うございます。 コメントは今後の参考に、フォローやサポートは今後の励みになります。