Googleスプレッドシートで日本株の株価を確実に取得する方法

投資

こんにちは。趣味グラマのNobu(@nm_aru)です。

スプレッドシートで投資データ管理をしている人もいると思います。

私もその一人なのですが、スプレッドシートで日本株の管理を行う時に、現在の株価の取得で困っていた事が遂に解決したので、ブログに書いておきます。

スプレッドシートでは日本株の株価取得が困難

スプレッドシートにはGOOGLEFINANCEという便利な関数が用意されていますが、残念ながら日本株の株価は取得ができません。

GOOGLEFINANCE - ドキュメント エディタ ヘルプ
Google Finance から現在や過去の証券情報を取得します。 使用例 GOOGLEFINANCE("NASDAQ:GOOG", "price", DATE(2014,1,1), DATE(2014,12,31), "DAILY") GOOGLEFINANCE("NASDAQ:GOOG","pric

そこで、代わりの方法として良く紹介されるのは、IMPORTXML関数を使う方法です。

IMPORTXML - ドキュメント エディタ ヘルプ
XML、HTML、CSV、TSV、RSS フィード、Atom XML フィードなど、さまざまな種類の構造化データからデータをインポートします。 使用例 IMPORTXML("
Googleスプレッドシートで株価を自動取得し表示する方法 - Y2の株式投資ブログ

IMPORTXML関数は、XPathで対象のデータを簡単に持ってこれるので素晴らしいのですが、なぜか私の環境では、昔は動いたのですが、最近では殆ど取得が出来なくなってしまいました。(物凄く遅いか、エラーになってしまう)

独自の株価取得関数をスクリプトエディタで作る

そこで、スクリプトエディタに独自の株価取得関数を作る事にしました。

作った関数はこれです。とても短く簡単です。

function getStockValue(stockCode) {
var code = String(stockCode).split(',')[0];
var url = 'https://minkabu.jp/stock/';
var res = UrlFetchApp.fetch(url + code);
if(res.getResponseCode() == 200) {
var value = Parser.data(res.getContentText()).from('<div class="stock_price">').to('<span class="decimal">').build();
return value.trim().replace('.', '');
} else {
return '取得失敗';
}
}
view raw stock.gs hosted with ❤ by GitHub

使い方を説明します。

1. Parserライブラリを追加する

下記の記事を参考に、スプレッドシートにParserライブラリを追加します。

GASでスクレイピングする方法!Parserライブラリを利用した手順を解説 | AutoWorker〜Google Apps Script(GAS)とSikuliで始める業務改善入門
Google Apps Script(GAS)はサーバーレス環境で、Webページのスクレイピング するのに便利です。 そこで、GASのParserライブラリを使ったスクレイピング ...

2. 独自関数をスクリプトエディタに追加する

下記の記事を参考に、先ほどの関数をスクリプトエディタに追加します。

【初心者向け】実践!オリジナル関数で学ぶ スプレッドシート スクリプトエディタの使い方 – Google Apps Script(GAS)を用いたシステム開発を支援
Googleスプレッドシートの初心者向けに、スクリプトエディタの使い方を紹介していきます。Google Apps Script未経験でも簡単に作れる便利なオリジナル関数を作りながらスクリプトエディタの使い方をマスターしましょう。

3. セルに独自関数を設定する

=IFERROR(getStockValue(証券コード), 0)

こんな感じで、式をセルに入れるだけです。

IFERRORを使っているのは、株価の取得が完了するまで「0」を表示しておくためです。

私の場合は、このキャプチャのように「証券コード,銘柄名」というセルを作り、そのセルを参照するように関数を呼び出しています。

日本株は、米国株と違って証券コードだけだと何の銘柄か分からなくなってしまいます。

そこで、証券コードの後ろにカンマで区切れば、どんな文字が入っても大丈夫な作りにしてあるため、私は会社名を入れるようにしています。

もちろん、証券コードだけでも判別がつくという人は、証券コードだけでも大丈夫です。

まとめ

以前から日本株の株価が取得出来ず困ってはいたのですが、なぜか自分で作るという発想が出てこず、手作業で更新したりしていました。

しかし、いざ作ってみれば10分もかからず作れてしまったので、もっと早くに気付けば良かったです。

趣味グラマたるもの、手作業はなるべく撲滅していかないとですね。

コメント

  1. ロン より:

    有用な情報ありがとうございます!
    私も同じくIMPORTXMLが非常に重くあてにならないのでGASで自作しました。
    Parserライブラリの存在を知らなかったのでRegExpの正規表現とreplaceで目的の個所をひねり出すのに苦労しましたw もっと早く知りたかったですw
    UrlFetchAppは一日当たりの実行回数制限があるのでほどほどのところで抑えないといけませんね。
    スプレッドシートによる投資情報の管理方法など興味あるので記事にしていただけるのをお待ちしています!

    • mrym より:

      ロンさん

      参考になって良かったです!
      私もParserライブラリは今回始めて知ったので、知らなければ同じく正規表現で何とかしていた可能性大です(笑)

      > UrlFetchAppは一日当たりの実行回数制限があるのでほどほどのところで抑えないといけませんね。

      確かに。私はあまり日本株を持っていないので気にしてなかったのですが、UrlFetchAppは1日20,000回の制限があるので、日本株を沢山持っていて、1日に何度もチェックする必要がある場合は要注意ですね。

      ただ、その前に株価取得元のサービスに迷惑をかけてしまうので、そもそも大量取得には向きませんが…。

      今後もよろしくお願いします(^^)

タイトルとURLをコピーしました
:)