Googleスプレッドシートで日本株の株価を自動取得する方法!コピペで使えるGASコード解説

こんにちは、ほりっぴーです😊

Googleスプレッドシートで資産管理やポートフォリオを作るとき、「リアルタイムで自動的に最新の株価を取得できたら便利なのに……」と思ったことはありませんか?

米国株なら、標準で用意されている GOOGLEFINANCE 関数を使えば一発で取得できますよね!

例えばテスラ(TSLA)の株価なら、セルにこう入力するだけです👇

=GOOGLEFINANCE("tsla", "price")

これだけで最新の株価が自動で表示されるので、本当に簡単で重宝します✨

❓ なぜ日本株は GOOGLEFINANCE で取得できないの?

「じゃあ日本株も同じようにできるでしょ!」と思って、トヨタ自動車(7203)などで試してみると……

=GOOGLEFINANCE("7203", "price")

残念ながら、エラーになってしまったり、データが正しく反映されなかったりします💦

理由は単純で、Google Financeのデータベースが日本の東証(東京証券取引所)のデータを正式にサポートしていない(または遅延・非対応の銘柄が多い)からなんです。

これだとポートフォリオの自動化ができなくて少し不便ですよね……。

そこで今回は、Yahoo!ファイナンス(API/WEBデータ)からデータを自動で取得してくる独自のGAS(Google Apps Script)プログラムを作ってみました!

🔍 スクレイピングってなに?(簡単に解説)

今回の仕組みには「スクレイピング(Webスクレイピング)」という技術を使っています。

スクレイピングを分かりやすく一言で言うと、「人間の代わりにプログラムがWebページを見に行って、必要なデータだけをサッと抜き出してくる技術」のことです🤖

普段、私たちがブラウザで「Yahoo!ファイナンス」を開いて、検索欄に「7203」と打ち込み、表示された「2,800円」という文字を目で探して確認していますよね。

この「ページを開く ➔ 株価の数字を探す ➔ スプレッドシートに書き込む」という一連の作業を、プログラムが数秒で自動処理してくれるイメージです!

💡 今回作ったコードの使い方と特徴(簡単解説)

今回作成したコードは、Googleスプレッドシートの「拡張機能 > Apps Script」にコピペするだけで、オリジナルの関数 =JPPRICE() が使えるようになります!

基本的な使い方

スプレッドシートのセルに以下のように入力するだけです。

① 株価(現在値)を取得する

=JPPRICE(C5)

↑C5セルに「7203」などの4桁の証券コードが入っている場合

=JPPRICE(7203)

↑直接銘柄コードを入れても取得できます

② 前日終値を取得する

=JPPRICE(C5, "prev")

③ 前日比(%)を取得する

=JPPRICE(C5, "pct")

表示形式を「%」に設定すると「+1.25%」のように綺麗に表示されます!

④ 前日差額(円)を取得する

=JPPRICE(C5, "change")

便利な機能

まとめて範囲指定して取得する(一括展開)

=JPPRICE(C5:C20)

コードを縦に並べておけば、1つの数式で一気に株価を表示できます✨

通常の関数と同じように直感的に使えるように設計していますので、ぜひ試してみてください!

🛠️ コピペで使える!GASプログラムコード

以下の手順でスプレッドシートに組み込んでみてください!

設置手順

  1. Googleスプレッドシートを開く
  2. 上部メニューの 「拡張機能」 ➔ 「Apps Script」 をクリック
  3. もともと書いてあるコードを消して、下のコードをそのまま貼り付け
  4. 上部の 「保存(フロッピーアイコン)」 を押して完了!
  5. スプレッドシートを一度閉じて再度開く
/**
 * 指定セルの証券コードから東証の株価を返す。
 * =JPPRICE(C5)
 * =JPPRICE(C5, "prev")   前日終値
 * =JPPRICE(C5, "pct")    前日比(0.00% で表示)
 * =JPPRICE(C5, "change") 前日差額
 * =JPPRICE(C5:C20)       範囲の左端列をコードとして下に展開
 * =JPPRICE(C5, "price", Z1)  Z1 の値を変えると再取得
 *
 * @param {string|number} code 証券コードのセル
 * @param {string} [attribute] price / prev / pct / change
 * @param {string} [refresh] 再取得のきっかけ。計算には使わない
 * @customfunction
 */
function JPPRICE(code, attribute, refresh) {
  const attr = String(attribute || 'price').toLowerCase();
  const isRange = Array.isArray(code);
  const matrix = isRange ? code : [[code]];

  const jobs = [];
  const seen = {};
  matrix.forEach(row => {
    const ticker = jpTicker_(row[0]);
    if (!ticker || seen[ticker]) return;
    seen[ticker] = true;
    jobs.push(ticker);
  });

  const quotes = {};
  if (jobs.length) {
    const responses = UrlFetchApp.fetchAll(jobs.map(ticker => ({
      url: 'https://query1.finance.yahoo.com/v8/finance/chart/' + ticker + '.T?interval=1d&range=5d',
      muteHttpExceptions: true,
    })));
    responses.forEach((res, i) => {
      quotes[jobs[i]] = jpQuote_(res);
    });
  }

  const out = matrix.map(row => {
    const raw = row[0];
    if (raw === '' || raw === null) return [''];
    const ticker = jpTicker_(raw);
    if (!ticker) return ['コード不正'];
    const quote = quotes[ticker];
    if (!quote) return ['取得失敗'];
    if (attr === 'prev' || attr === '前日') return [quote.prev];
    if (attr === 'pct' || attr === '前日比') return [quote.pct];
    if (attr === 'change' || attr === '変化') return [quote.change];
    return [quote.price];
  });

  return isRange ? out : out[0][0];
}

function jpTicker_(value) {
  const code = String(value ?? '').trim().replace(/\.T$/i, '');
  return /^\d{4}$/.test(code) ? code : '';
}

function jpQuote_(res) {
  if (res.getResponseCode() !== 200) return null;
  try {
    const meta = JSON.parse(res.getContentText()).chart.result[0].meta;
    const price = meta.regularMarketPrice;
    const prev = meta.chartPreviousClose;
    if (typeof price !== 'number') return null;
    return {
      price: price,
      prev: typeof prev === 'number' ? prev : '',
      pct: typeof prev === 'number' && prev !== 0 ? (price - prev) / prev : '',
      change: typeof prev === 'number' ? price - prev : '',
    };
  } catch (e) {
    return null;
  }
}

👋 まとめ:日本株のポートフォリオ管理を自動化しよう!

日本株の自動取得ができるようになると、自分の持っている保有銘柄の時価評価額や前日比損益が自動で更新されるので、自作の資産管理シートがめちゃくちゃ快適になります♪

プログラミングの知識がなくても、コピペだけで簡単に導入できますので、ぜひご自身のスプレッドシートで活用してみてくださいね!

最後まで読んでいただき、ありがとうございました✨


☞ほかの技術系記事はこちら

ほりっぴー

京都の田舎在住。父子家庭のITエンジニア(個人事業主)パパ👨‍🌾
「賢い生活と豊かな体験」をテーマに、スペクトラム症育児・資産形成・家庭菜園のリアルな日常を綴っています。理想の毎日を自らの手で設計し、実現していくのが今の楽しみ。節約やお得情報なども大好物。
目標:資産形成と自給自足の両立💰🌱

ほりっぴーをフォローする
タイトルとURLをコピーしました