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

投資

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

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

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

投資データを管理するためのアプリをリリースしたため、今はこのアプリで配当金投資の管理をしています!

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

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

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

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

IMPORTXML - Google ドキュメント エディタ ヘルプ
XML、HTML、CSV、TSV、RSS フィード、Atom XML フィードなど、さまざまな種類の構造化データからデータをインポートします。 使用例 IMPORTXML("", "//a/@href") IMPORTXML(A2,B2) ...
404: ページが見つかりませんでした | Y2の株式投資ブログ

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

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

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

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

使い方を説明します。

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日に何度もチェックする必要がある場合は要注意ですね。

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

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

  2. Y より:

    とても役に立つ記事をありがとうございます。IMPORTXMLが実質使い物にならないのでこちらを活用させてもらっています。

    株価の他にもROE、予想ROE、EPS、予想EPSが、BPSなどの値を自動的に取得したく、みようみまねで株価取得関数のURLや.from .to部分の変更を試みたのですが、URL部分はおそらく理解できたものの、.from .to部分については理解できず希望する結果が得られませんでした。

    具体的には https://irbank.net/7203 (トヨタ自動車の例)から該当部分と思われる.from .toを探してみたのですが、<span class ="ratio"という記載はあるものの、それが欲しい値を一意に指定できているわけではなさそうです。

    もしROE、予想ROE、EPS、予想EPSを自動的に取得できる方法がおわかりでしたら教えていただけると大変嬉しいです。

    ちなみに、私、プログラミングの知識も経験もほぼゼロです。GASはNobuさんのこの記事で初めて知りました。

    • mrym より:

      Yさん

      返信が遅くなってしまい申し訳ありません。
      もうご覧にならないかもしれませんが…試してみたら出来たので、コードだけ置いておきますね。

      https://gist.github.com/nmaruy27/389d886c6f673b8a45fc71e6edb6a0da

      コツと言えるか分かりませんが、fromにはサイト全体で一意になる文字が含まれているようにするのが大事です。
      同じ文字が複数箇所にあると、どれを取得して良いのか分からなくなってしまうので。

      もしまたご覧になられて、お役に立ったら幸いです(^^)

      • Y より:

        おぉぉー! ありがとうございます!! 見ました!
        今年の6月から本格的に株式投資を始め、一回200社くらいのデータを手で拾い、今後も4半期ごとにやるつもりでしたのでとても助かります!!

        といいつつ、早速試してみたのですが残念ながら拾えませんでした。
        試しに何社かやってみたのですがどれもだめでした。
        https://docs.google.com/spreadsheets/d/19Il9HC9qdGQkAUKTKcr6ygrw4O0eSLzyw05ijjcfqME/edit#gid=0

        ※”#ERROR”になっているものはswitch構文の変数名(でよいのでしょうか?)を変更したらdefault値を返却するようにはなりました。例えば “roe0” → “roe2” など。

        その他、コードを見たり色々ぐぐったりして原因を探ってみましたが、、、、当然のごとくわかりませんでした。

        お時間ある時で構いません、ご助言いただければ幸いです。

  3. 京極堂 より:

    大変役立ちました。
    ありがとうございます。
    株価の小数点以下を2桁も表示させたいのですがご教授下さい。

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