「Excelで株価の推移を毎回コピペするのが面倒」「ポートフォリオの月次データを自動更新したい」と感じていませんか。STOCKHISTORY関数なら、数式ひとつで株価履歴をExcelに展開できます。
この記事では、ExcelのSTOCKHISTORY関数の使い方を解説します。書式・基本例・OHLCV取得・期間指定・チャート連携・エラー対処まで、コピペで動く数式つきで紹介します。Microsoft 365を使っていれば、今日から株価データの取得を自動化できます。
- STOCKHISTORY関数とは?読み方と何ができるか
- STOCKHISTORY関数の書式と引数
- STOCKHISTORY関数の基本的な使い方(株価終値を取得する)
- STOCKHISTORY関数の使い方|OHLCV(始値・高値・安値・終値・出来高)を取得する
- STOCKHISTORY関数の使い方|期間・頻度を指定してデータを取得する
- STOCKHISTORY関数でETF・指数・為替レートを取得する
- STOCKHISTORY関数の活用例|チャートや分析への応用
- STOCKHISTORY関数でよくあるエラーと対処法(#N/A・#VALUE!・データが返らないなど)
- STOCKHISTORY関数で株式分割・配当の扱いに注意する
- STOCKHISTORY関数を含むファイルを共有するときの注意点
- STOCKHISTORY関数のよくある質問(FAQ)
- STOCKHISTORY関数で複数銘柄をまとめて取得する(REDUCE+LAMBDA+VSTACK)
- STOCKHISTORY・GOOGLEFINANCE・Power Query の使い分け
- 応用テクニック|SEQUENCEで動的ヘッダーを自動生成する
- まとめ
STOCKHISTORY関数とは?読み方と何ができるか
STOCKHISTORY関数は、指定した金融商品の価格履歴データをExcelに取得する関数です。日付・始値・終値・高値・安値・出来高といったデータを、指定した期間でまとめて取り出せます。
読み方と語源
読み方は「ストックヒストリー」です。STOCK(株式)とHISTORY(履歴)を組み合わせた名前で、「株式の履歴」を取得するための関数です。略称ではなく英単語をそのまま並べた素直な命名なので、覚えやすい関数のひとつです。
何ができるのか
ひとことで言うと「外部の株価データベースに数式から問い合わせて、結果を表形式で返す関数」です。具体的には次のような操作を一発で実現できます。
- 米国株の終値を直近1ヶ月分、自動でスピル表示する
- Apple・Microsoft・Amazonなど複数銘柄の月次データを比較する
- 始値・高値・安値・終値・出来高(OHLCV)を1つの数式で取得する
- グラフと組み合わせて、自動更新される株価チャートを作る
毎回ヤフーファイナンスやSBI証券にアクセスして手でコピペする必要がなくなります。
対応バージョンと制限事項
STOCKHISTORY関数を使うには、いくつかの前提条件があります。導入してから「動かない」とならないよう、事前に確認しておきましょう。
- Microsoft 365専用: Excel 2019・2021・2024(永続ライセンス版)では使えません
- インターネット接続が必須: データを外部から取りに行くため、オフラインでは動作しません
- 日本株(東京証券取引所)は非対応: 対象は主に米国株や主要海外市場です
- 遅延データ: リアルタイム価格ではなく、一定時間遅れたデータが返されます
日本株を取得したい方は、GoogleスプレッドシートのGOOGLEFINANCE関数を検討するのも一つの手です。日本株の終値や為替レートも取得できます。
ほかの関数とあわせて学習したい場合は、Excel関数一覧(アルファベット順)も参考にしてください。
STOCKHISTORY関数の書式と引数
STOCKHISTORY関数は引数が多めに見えますが、必須なのは2つだけです。落ち着いて1つずつ整理していきましょう。
基本構文
=STOCKHISTORY(stock, start_date, [end_date], [interval], [headers], [property1], [property2], ...)
角括弧[]で囲まれた引数は省略可能です。最小構成は=STOCKHISTORY(銘柄, 開始日)の2引数だけで動きます。
引数一覧
| 引数 | 必須/省略可 | 内容 | 既定値 |
|---|---|---|---|
| stock | 必須 | 金融商品のティッカーシンボル(例: "MSFT")または市場識別子付き(例: "XNAS:MSFT") | — |
| start_date | 必須 | データ取得の開始日 | — |
| end_date | 省略可 | データ取得の終了日 | start_dateと同じ |
| interval | 省略可 | 取得単位(0=日次 / 1=週次 / 2=月次) | 0 |
| headers | 省略可 | ヘッダー表示(0=なし / 1=あり / 2=銘柄識別子+ヘッダー) | 1 |
| property1〜 | 省略可 | 取得するデータ列の種類と並び順 | 0,1(日付・終値) |
第1引数 stock(銘柄指定)
ティッカーシンボルをダブルクォートで囲んで指定します。Microsoftなら"MSFT"、Appleなら"AAPL"です。シンボルが認識されない場合は"XNAS:MSFT"のように市場識別子を付けて明示しましょう。XNASはNASDAQ、XNYSはNYSEを意味します。
セル参照も使えるので、ティッカーを別セルにまとめて管理し、銘柄を入れ替えるだけで集計表が切り替わるような作りも可能です。
第2引数 start_date と第3引数 end_date
取得期間の開始日・終了日を指定します。日付の指定方法は3パターンあります。
- 直接入力:
"2025-01-01"または"2025/1/1" - セル参照:
A1(A1セルに日付が入っている場合) - 関数組み合わせ:
TODAY()-30(今日から30日前)やDATE(2025,1,1)など
TODAY関数やDATE関数と組み合わせると、ファイルを開くたびに最新データに自動更新される作りにできます。
第4引数 interval(取得間隔)
データの間隔を数値で指定します。
| 値 | 意味 | 想定用途 |
|---|---|---|
| 0 | 日次 | 短期トレード分析・週次レビュー |
| 1 | 週次 | 中期チャート・週足分析 |
| 2 | 月次 | 長期トレンド・ポートフォリオ管理 |
省略時は0(日次)です。月次データなら数十年分でも数十行に収まるので、長期データを扱うときは積極的に2を使いましょう。
第5引数 headers(ヘッダー表示)
結果表にヘッダー行を入れるかどうかを指定します。
| 値 | 結果 |
|---|---|
| 0 | ヘッダーなし。データのみ |
| 1(既定値) | 「日付」「終値」などのヘッダー付き |
| 2 | ヘッダーに加え、銘柄識別子も表示 |
複数銘柄を1シートに並べる場合は2を使うと、どの列がどの銘柄か視覚的にわかりやすくなります。
第6引数以降 property(取得するデータの種類と順序)
取得したい列を数値で指定します。複数指定可能で、指定した順番で列が並びます。
| 値 | 取得データ |
|---|---|
| 0 | 日付 |
| 1 | 終値 |
| 2 | 始値 |
| 3 | 高値 |
| 4 | 安値 |
| 5 | 出来高 |
省略すると0,1(日付・終値)が返ります。例えば0,2,3,4,1,5と並べると「日付・始値・高値・安値・終値・出来高」のOHLCV順で出力されます。
STOCKHISTORY関数の基本的な使い方(株価終値を取得する)
引数の解説だけでは動きがイメージしにくいので、ここからは具体例で見ていきましょう。まずは「終値だけ」を取得するシンプルなパターンです。
例1: 直近1ヶ月の終値を取得する
Microsoft(MSFT)の直近30日間の終値を取得する数式です。
=STOCKHISTORY("MSFT", TODAY()-30, TODAY())
セルに入力すると、結果が下方向にスピルして「日付」「終値」の2列が自動展開されます。TODAY()を使っているので、ファイルを開いた日を起点に「常に直近30日」のデータが表示されます。毎朝の株価チェックを定型化したい人にぴったりの書き方です。
例2: 期間を明示して取得する
日付をハードコードする書き方も覚えておきましょう。決算期や特定イベント前後の動きを切り出すときに使います。
=STOCKHISTORY("AAPL", DATE(2025,1,1), DATE(2025,3,31), 0, 1)
Apple(AAPL)の2025年第1四半期(1〜3月)の日次データを取得します。interval=0(日次)、headers=1(ヘッダーあり)と明示しているため、出力結果が読みやすく整います。
例3: 単一日の株価を取得する
end_dateを省略すると、start_dateと同じ日のデータが返ります。
=STOCKHISTORY("MSFT", DATE(2025,3,3))
「特定日の終値だけ知りたい」という単発の用途で使います。月末日の株価をまとめて拾ってきて、月次レポートに貼り付ける用途にも向いています。
例4: 銘柄が認識されない場合は市場識別子を付ける
ティッカーシンボルだけでは曖昧で認識されないケースがあります。そんなときは市場識別子を付けて指定し直しましょう。
=STOCKHISTORY("XNAS:MSFT", TODAY()-30, TODAY())
XNASはNASDAQの市場識別子です。NYSE上場銘柄ならXNYS:、ロンドン証券取引所ならXLON:を付けます。同じシンボルが複数の取引所に存在する場合に有効です。
| 市場識別子 | 取引所 |
|---|---|
| XNAS | NASDAQ |
| XNYS | ニューヨーク証券取引所(NYSE) |
| XLON | ロンドン証券取引所 |
| XHKG | 香港証券取引所 |
| XSWX | スイス証券取引所 |
市場識別子の完全な一覧はMicrosoft公式サポートページで確認できます。
STOCKHISTORY関数の使い方|OHLCV(始値・高値・安値・終値・出来高)を取得する
「終値だけじゃ物足りない、ローソク足を描くのに必要な情報がほしい」というニーズに応えるのが、第6引数以降のproperty指定です。
例5: OHLCV すべてを取得する
Amazon(AMZN)の過去21日間のOHLCVをすべて取得する例です。
=STOCKHISTORY("XNAS:AMZN", TODAY()-21, TODAY(), 0, 2, 0, 2, 3, 4, 1, 5)
引数を分解すると次の意味になります。
"XNAS:AMZN": NASDAQ上場のAmazonTODAY()-21, TODAY(): 直近21日間0: 日次データ2: ヘッダーに銘柄識別子を追加表示0, 2, 3, 4, 1, 5: 日付・始値・高値・安値・終値・出来高の順
結果は6列のテーブルとしてスピル展開され、上端には「AMZN」と各列名が表示されます。
例6: ローソク足チャートのための4本値を取得する
ローソク足チャートには「始値・高値・安値・終値」の4本値があれば足ります。出来高は省いて4列だけ取得しましょう。
=STOCKHISTORY("MSFT", DATE(2025,1,1), DATE(2025,3,31), 0, 1, 0, 2, 3, 4, 1)
Microsoftの2025年Q1の日次4本値が取得できます。この結果範囲を選択して「挿入 → 株価チャート → 始値-高値-安値-終値」を選べば、すぐにローソク足が描画できます。
例7: 終値と出来高だけ取得する(出来高分析用)
出来高を加味した分析をしたい場合は、終値と出来高の2列だけに絞るとシートがすっきりします。
=STOCKHISTORY("MSFT", TODAY()-90, TODAY(), 0, 1, 0, 1, 5)
過去90日の「日付・終値・出来高」が3列で返ります。出来高急増日をフィルタやIF関数で抽出すれば、ニュース材料が出た日を割り出すきっかけになります。
propertyの並び順は自由に変えられる
property引数は指定した順番がそのまま列の並び順になります。例えば「出来高を一番左に置いて目立たせたい」という場合は次のように書きます。
=STOCKHISTORY("MSFT", TODAY()-30, TODAY(), 0, 1, 5, 0, 1)
「出来高・日付・終値」の順で出力されます。レポート用のフォーマットに合わせて、列の並びを柔軟にコントロールできます。
STOCKHISTORY関数の使い方|期間・頻度を指定してデータを取得する
期間と頻度の組み合わせを変えれば、用途に応じた粒度のデータを取り出せます。ここでは代表的な3パターンを紹介します。
例8: 月次データで長期トレンドを取得する
長期トレンドの観察には月次データが向いています。interval=2を指定しましょう。
=STOCKHISTORY("MSFT", DATE(2015,1,1), DATE(2025,12,31), 2, 1, 0, 1)
Microsoftの過去11年分の月末終値が取得できます。日次で取ると2,500行ほどになりますが、月次なら130行程度に収まります。長期チャートを軽快に動かしたいときに有効です。
例9: 週次データでスイングトレード分析
週単位の値動きを追いたいときはinterval=1を指定します。
=STOCKHISTORY("AAPL", TODAY()-365, TODAY(), 1, 1, 0, 2, 3, 4, 1)
Appleの過去1年分の週次4本値が取得できます。週足ベースのテクニカル分析に活用できる粒度です。
例10: 動的な期間指定(年度・四半期)
年度や四半期ごとの集計を自動化したい場合は、DATE関数と組み合わせて期間を計算式で組み立てましょう。
=STOCKHISTORY("MSFT", DATE(YEAR(TODAY()),1,1), TODAY(), 0, 1)
「今年の年初から今日まで」の日次終値が、年が変わるたびに自動的に再計算されます。Year-To-Date(YTD)リターンの算出に便利な書き方です。
四半期ごとに区切りたい場合は、開始月をMOD関数や条件分岐で組み立てます。
=STOCKHISTORY("MSFT", DATE(YEAR(TODAY()), INT((MONTH(TODAY())-1)/3)*3+1, 1), TODAY(), 0, 1)
少し複雑ですが、現在の四半期の初日から今日までのデータが取れます。月初リセットの集計に組み込むと便利です。
期間とinterval の組み合わせ早見表
| シーン | 期間 | interval |
|---|---|---|
| 直近の値動きチェック | 7〜30日 | 0(日次) |
| 四半期レビュー | 90日 | 0(日次) |
| 年次レポート | 1年 | 1(週次) |
| 長期トレンド分析 | 5〜10年 | 2(月次) |
| イベント前後の動き | 該当日±数日 | 0(日次) |
データの粒度と期間を合わせると、シートが軽く保てます。
STOCKHISTORY関数でETF・指数・為替レートを取得する
個別株だけでなく、ETF(上場投資信託)や指数、為替レートもSTOCKHISTORY関数の取得対象です。書式は基本的に個別株と同じで、第1引数のティッカーや市場識別子を切り替えるだけで動きます。
ETFを取得する(SPY・QQQ・VOOなど)
主要な米国ETFは個別株と同じくティッカーシンボルだけで取得できます。
=STOCKHISTORY("SPY", TODAY()-90, TODAY(), 0, 1, 0, 1)
S&P 500連動の代表的ETFであるSPY(SPDR S&P 500 ETF)の過去90日分の終値が取れます。QQQ(インベスコQQQ)・VOO(バンガードS&P 500 ETF)・VTI(バンガード・トータル・ストック・マーケットETF)も同じ書式で取得できます。
うまく認識されない場合は、市場識別子ARCX:(NYSE Arca)を付けて指定し直しましょう。SPYやVOOなど主要な米国ETFはNYSE Arca上場です。
=STOCKHISTORY("ARCX:SPY", TODAY()-90, TODAY(), 0, 1, 0, 1)
指数を取得する(S&P 500・ダウ・NASDAQ総合)
指数の取得はETFよりやや癖があります。個別株と同じように直接指数名を入れても認識されないことが多いので、市場識別子を付けるか、^プレフィックスを使った書き方を試します。
=STOCKHISTORY("^GSPC", TODAY()-180, TODAY(), 0, 1, 0, 1)
^GSPCはS&P 500、^DJIはNYダウ、^IXICはNASDAQ総合指数を表します。環境によっては^プレフィックスが認識されず#VALUE!になるケースがあるので、その場合はSPYなどETFで代用する方が安定します。指数連動ETFはほぼ完全に指数と同じ動きをするので、実務ではETFを使う方が確実です。
為替レートを取得する(USD/JPY・EUR/USD)
為替レートは"USD/JPY"のようにスラッシュ区切りで指定します。
=STOCKHISTORY("USD/JPY", TODAY()-30, TODAY(), 0, 1, 0, 1)
ドル円の直近30日分のレートが取れます。EUR/USD・GBP/JPY・AUD/JPYなども同じ書式です。
ただし為替レートは仕様変更や市場識別子の追加で取得できなくなることもあるため、レートのチェックを継続的に行うシートでは取得失敗を想定してIFERRORで囲んでおくと安心です。
=IFERROR(STOCKHISTORY("USD/JPY", TODAY()-30, TODAY(), 0, 1, 0, 1), "取得失敗")
為替レートをより安定的に取得したい場合は、GoogleスプレッドシートのGOOGLEFINANCE関数を併用するのも有効な選択肢です。
ETF・指数・為替の取得書式まとめ
| 対象 | 書式例 | 補足 |
|---|---|---|
| 米国ETF | "SPY" / "QQQ" / "VOO" | 個別株と同じ |
| 米国ETF(識別子付き) | "ARCX:SPY" | 認識されない場合の保険 |
| S&P 500 | "^GSPC" | 環境依存・不安定なときはSPYで代用 |
| NYダウ | "^DJI" | 同上・DIAで代用可能 |
| NASDAQ総合 | "^IXIC" | 同上・QQQで代用可能 |
| ドル円 | "USD/JPY" | スラッシュ区切り |
| ユーロドル | "EUR/USD" | 同上 |
迷ったらまずはETFで取得し、必要に応じて指数や為替に切り替えるのが失敗しないルートです。
STOCKHISTORY関数の活用例|チャートや分析への応用
数式単体で使うだけでなく、グラフや他の関数と組み合わせることで真価を発揮します。実務でよく使う応用パターンを紹介します。
活用例1: 自動更新される株価チャート
STOCKHISTORY関数の出力範囲をそのままグラフ化すると、関数が更新されるたびにグラフも追従します。
=STOCKHISTORY("MSFT", TODAY()-180, TODAY(), 0, 1, 0, 2, 3, 4, 1)
この結果範囲を選択し、「挿入 → 株価チャート → 始値-高値-安値-終値」を選びます。これで「直近半年のローソク足が常に最新」というダッシュボードの完成です。ファイルを開くたびに自動で更新されるので、定期レポート作成の手間がなくなります。
活用例2: 複数銘柄の比較表(ポートフォリオ管理)
複数銘柄の終値を横並びに配置すれば、ポートフォリオ全体を一望できる表が作れます。
A列を日付、B列以降を各銘柄の終値にする想定で考えます。まずA列に日付の枠を作っておき、各銘柄ごとにSTOCKHISTORYを実行します。その結果をXLOOKUP関数で日付一致させる構成が王道です。
=XLOOKUP(A2, STOCKHISTORY("MSFT", DATE(2025,1,1), TODAY(), 0, 0, 0, 1), STOCKHISTORY("MSFT", DATE(2025,1,1), TODAY(), 0, 0, 0, 1), "", 0, 1)
少し冗長なので、別シートにSTOCKHISTORYの結果を一度展開してから、本表側でXLOOKUPする2段構えにすると管理しやすくなります。
活用例3: パフォーマンスダッシュボード
買付日と買付価格を入力するだけで、現在の損益が自動計算されるパフォーマンス表を作れます。
| 銘柄 | 買付日 | 買付価格 | 現在値 | 損益率 |
|---|---|---|---|---|
| MSFT | 2025/1/15 | 420.00 | =数式 | =数式 |
「現在値」のセルには次のような数式を入れます。
=INDEX(STOCKHISTORY(A2, TODAY()-7, TODAY(), 0, 0, 1), COUNTA(STOCKHISTORY(A2, TODAY()-7, TODAY(), 0, 0, 1)))
STOCKHISTORYで直近1週間の終値を取得し、INDEXとCOUNTAの組み合わせで最終行(=最新値)を抽出しています。直近7日にしているのは、休日のせいで「昨日」のデータがない場合のフェイルセーフです。
損益率は素直に(現在値 / 買付価格) - 1で計算できます。書式で%表示にしておきましょう。
活用例4: 月次リターン推移表
月次のリターン(前月比)を求めて、シーズナリティ(月別の傾向)を観察したいケースです。
=STOCKHISTORY("MSFT", DATE(2023,1,1), DATE(2025,12,31), 2, 1, 0, 1)
月次終値を取得した後、隣の列で「今月の終値 ÷ 前月の終値 – 1」を計算すれば、月次リターンの推移が見えます。条件付き書式のカラースケールをかけると、年単位のヒートマップが一瞬で完成します。
活用例5: 50日・200日移動平均線の自動計算
テクニカル分析の定番、50日・200日移動平均線もSTOCKHISTORYで土台データを揃えれば作れます。
=STOCKHISTORY("MSFT", TODAY()-250, TODAY(), 0, 1, 0, 1)
過去250日(約1年)の終値を取得します。隣の列でAVERAGE(B2:B51)のように直近50日平均を計算すれば50日移動平均が求まります。AVERAGE(B2:B201)なら200日移動平均です。これをグラフに重ねれば、ゴールデンクロス・デッドクロスの判定が自動でできるようになります。
日付関数を組み合わせた応用はExcel関数一覧(機能別)のカレンダー・日付カテゴリも参考になります。
STOCKHISTORY関数でよくあるエラーと対処法(#N/A・#VALUE!・データが返らないなど)
便利な関数ですが、外部データに依存するぶん独特のエラーに遭遇しやすいのも事実です。代表的なつまずきと対処法をまとめます。
#VALUE! エラー:銘柄が認識されない
最も多いのが#VALUE!エラーです。原因はだいたい次の3つに集約されます。
- ティッカーシンボルのスペルミス:
"MSFT"を"MSTF"と書いてしまう典型例です - 対応していない市場の銘柄: 日本株(東証銘柄)を指定すると
#VALUE!が返ります - 市場識別子の付け忘れ: 同名シンボルが複数市場に存在し、判別できないケース
まずはスペルを再確認し、それでも解決しなければ市場識別子を付けて指定し直しましょう。"MSFT"の代わりに"XNAS:MSFT"と書くと確実に認識されるケースが多いです。
=STOCKHISTORY("MSFT", TODAY()-30, TODAY())
=STOCKHISTORY("XNAS:MSFT", TODAY()-30, TODAY())
下の書き方の方が確実に認識されるケースが多いです。
#NAME? エラー:非対応バージョン
#NAME?エラーが出る場合、お使いのExcelがSTOCKHISTORY関数に対応していない可能性が高いです。確認ポイントは次の通りです。
- Microsoft 365(サブスクリプション版)を使っているか
- Excel 2019・2021・2024(永続ライセンス版)ではないか
- Excelのバージョンが最新に更新されているか
「ファイル → アカウント → Excelのバージョン情報」から確認できます。永続ライセンス版を使っている場合、STOCKHISTORY関数は利用できないため、Microsoft 365への移行が必要です。
データが空欄になる日がある
日次データを取得したのに、特定の日付が抜けていることがあります。これはエラーではなく仕様です。
- 取引所が休場の日(土日・祝日)はデータが存在しない
- 連続した日付に揃えたいなら、別途カレンダー表とXLOOKUPで突合する
=IFERROR(XLOOKUP(A2, STOCKHISTORY("MSFT", DATE(2025,1,1), TODAY(), 0, 0, 0, 1), STOCKHISTORY("MSFT", DATE(2025,1,1), TODAY(), 0, 0, 0, 1)), "休場")
休場日には「休場」と表示する書き方です。レポートで「日付の連続性」が必要な場合に役立ちます。
#BUSY! や データ取得中の表示
STOCKHISTORY関数はオンラインでデータを取得するため、通信状況や混雑によって一時的に取得中の状態になることがあります。少し待っても結果が表示されない場合は、次の対処を試してみてください。
- インターネット接続を確認する
- F9キーを押して再計算する
- Excelを再起動する
- 「データ → すべて更新」を実行する
結果が古い・更新されない
STOCKHISTORY関数の結果は自動再計算で更新されますが、ブックの設定によっては反映されないことがあります。
- 「数式 → 計算方法の設定 → 自動」になっているか確認
- F9(再計算)またはCtrl+Alt+F9(強制再計算)を試す
- データタブの「接続のプロパティ」で更新間隔を見直す
エラーの種類と対処法の総まとめはExcelのエラー値一覧と対処法も参考にしてください。
データ取得の遅延
返ってくる株価はリアルタイムではなく、市場ごとに15〜20分程度の遅延があります。デイトレード判断には使わず、データ集計・分析・レポート作成用と割り切って使うのがコツです。
STOCKHISTORY関数で株式分割・配当の扱いに注意する
長期データを取得するときに見落としやすいのが、株式分割と配当の調整です。STOCKHISTORY関数が返す価格は調整済みではないので、過去の特定イベントをまたぐと「いきなり株価が半分になっている日」が現れます。
株式分割があった日付に断層が出る
たとえばApple(AAPL)は2020年8月に1株を4株に分割しました。STOCKHISTORYで2020年7月〜9月のデータを取得すると、分割前と分割後で株価が4分の1に飛びます。
=STOCKHISTORY("AAPL", DATE(2020,7,1), DATE(2020,9,30), 0, 1, 0, 1)
このまま長期チャートを描くと「8月31日に大暴落した銘柄」のように見えてしまいます。実際にはトータルリターンは滑らかに繋がっているので、分割を加味した調整値で扱う必要があります。
対処法1: ETF・指数で代用する
個別株の長期分析が目的なら、その銘柄が属する業種ETFや指数で代用するのが手軽です。S&P 500への組み入れ前後でなければ、SPYとの連動性で大まかな傾向は掴めます。
対処法2: 別途調整係数を掛ける
分割が起きた日を境に、分割比率の逆数を掛けて手動で調整値を計算します。AAPLの2020年8月の4分割なら、それ以前のデータをすべて4で割れば連続したデータになります。
| 日付 | 終値(実数) | 分割係数 | 調整後終値 |
|---|---|---|---|
| 2020/8/28 | 499.23 | ÷4 | 124.81 |
| 2020/8/31 | 129.04 | ×1 | 129.04 |
ただし分割が複数回あった銘柄は計算が複雑になるので、長期チャート目的ならYahoo Financeなどの調整済みデータをCSVで取り込む方が現実的です。
対処法3: 配当再投資込みのトータルリターンには別ツールを使う
STOCKHISTORYは配当再投資(Total Return)を加味した価格は返しません。配当込みのパフォーマンスを正確に評価したい場合は、Morningstarや証券会社の分析ツールに任せるのが無難です。STOCKHISTORYはあくまで「数式で取れる範囲の価格時系列」と割り切って使うと、データの解釈で迷いません。
NOTE
短期〜中期(1年未満)の値動きを追う用途では、株式分割を踏まないかぎり調整は不要です。長期(数年〜十数年)の比較分析を行うときだけ、調整値を意識すれば十分です。
STOCKHISTORY関数を含むファイルを共有するときの注意点
STOCKHISTORY関数は外部データに依存する関数なので、ファイルを他人と共有するときに思わぬトラブルが起きやすいです。配布前に押さえておきたいポイントを整理します。
Microsoft 365を持っていない人が開くと#NAME?になる
STOCKHISTORY関数はMicrosoft 365専用です。永続ライセンス版(Excel 2019・2021・2024)や、無料のExcel Onlineの一部プラン、Googleスプレッドシートで開いた場合、関数が認識されず#NAME?エラーになります。
社内の一部にしかMicrosoft 365が行き渡っていない環境では、共有ファイルが「特定の人だけ数値が見えない」状態になりがちです。
値貼り付けで配布するのが定番運用
共有する相手の環境が分からないときや、データを固定して配布したいときは、STOCKHISTORYの出力範囲を選択して値貼り付けしましょう。
STOCKHISTORYの出力範囲全体を選択- Ctrl+Cでコピー
- 同じ範囲を選択した状態で右クリック → 「値の貼り付け」
- 数式が消え、表示されていた数値だけが残る
この状態で保存すれば、Microsoft 365を持っていない人が開いても通常の数値表として閲覧できます。月次レポートや決算資料に組み込むときは、最終的に値貼り付けで仕上げるのが安全です。
共有用と分析用でシートを分ける
毎月最新データを取得して使うシートと、配布用に値固定したシートは分けておくと運用が楽になります。
- データ取得シート:
STOCKHISTORYが並び、ファイルを開くたびに最新化 - 配布用シート: データ取得シートから値貼り付けしたスナップショット
STOCKHISTORYの再計算が遅いと感じるときも、この分け方が効きます。配布用シートには関数が残らないので、開いたときの待ち時間がなくなります。
数式の保護や運用のコツはExcelのエラー値一覧と対処法もあわせて読むと、共有時のトラブルシュートが早くなります。
STOCKHISTORY関数のよくある質問(FAQ)
実際に使い始めた人からよく聞かれる質問をまとめました。
Q1. 日本株(東証銘柄)の株価は取得できますか?
A. 現時点では取得できません。STOCKHISTORY関数は東京証券取引所には対応していません。日本株の株価をスプレッドシートで管理したい場合は、GoogleスプレッドシートのGOOGLEFINANCE関数を検討してください。日本株のティッカー(例: "TYO:7203"でトヨタ自動車)にも対応しています。
Q2. リアルタイムの株価を取得できますか?
A. リアルタイムではありません。市場ごとに15〜20分程度の遅延があります。データ集計や月次レポートには十分使えますが、デイトレードの判断材料には向きません。リアルタイム性が必要な場合は、証券会社のAPIなど別の手段を検討してください。
Q3. 仮想通貨や為替レートも取得できますか?
A. 一部は可能ですが安定しません。STOCKHISTORY関数は主に株式・ETF・インデックスを対象としています。為替レートや仮想通貨は対応状況が変動的で、取得できない通貨ペアもあります。為替レートを安定して取りたい場合も、GOOGLEFINANCE関数の方が選択肢が広い傾向です。
Q4. Excel 2021でSTOCKHISTORY関数を使うことはできますか?
A. 使えません。STOCKHISTORY関数はMicrosoft 365(サブスクリプション版)専用です。Excel 2019・2021・2024といった永続ライセンス版には搭載されていません。利用するにはMicrosoft 365への加入が必要です。
Q5. グラフを自動更新するにはどうすればいいですか?
A. STOCKHISTORY関数の出力範囲をそのままグラフ化してください。STOCKHISTORYが再計算されると出力範囲も更新され、グラフも自動的に追従します。TODAY()-30のように動的な期間指定にしておけば、ファイルを開くたびに「常に直近30日」のチャートが見られる状態を作れます。
Q6. 結果が複数行・複数列にスピルしないのですが?
A. 古いExcelの動的配列非対応モードを使っている可能性があります。STOCKHISTORY関数は動的配列(スピル)機能を前提に設計されています。Microsoft 365なら標準で対応していますが、互換モードでブックを開いていると正しく展開されないことがあります。「ファイル → 名前を付けて保存」で.xlsx形式に変換してから再度試してみてください。
Q7. 過去どこまでさかのぼってデータを取得できますか?
A. 銘柄や市場によって異なります。米国主要銘柄なら20〜30年前までさかのぼれるケースが多いですが、新規上場銘柄は上場日以降のデータしか存在しません。データが存在しない期間を指定した場合は、その範囲だけ空欄や省略となります。
Q8. 複数銘柄を1つの数式で取得できますか?
A. できません。STOCKHISTORY関数は1つの数式で1銘柄しか扱えません。複数銘柄を比較したい場合は、銘柄ごとに別々のセルでSTOCKHISTORYを実行し、XLOOKUPやINDEX/MATCHで日付突合する設計にしましょう。
STOCKHISTORY関数で複数銘柄をまとめて取得する(REDUCE+LAMBDA+VSTACK)
FAQでは「STOCKHISTORY関数は1つの数式で1銘柄しか扱えない」と説明しました。これは基本的にはその通りなのですが、STOCKHISTORY単体での話です。Microsoft 365に搭載されたREDUCE・LAMBDA・VSTACKを組み合わせると、複数銘柄のデータを1数式で縦結合できます。
複数銘柄を縦に積み上げる数式
3銘柄(MSFT・AAPL・GOOGL)の直近30日分を、1つの数式で縦結合する例です。
=LET(
tickers, {"MSFT","AAPL","GOOGL"},
getData, LAMBDA(ticker, STOCKHISTORY(ticker, TODAY()-30, TODAY(), 0, 0, 1)),
result, REDUCE(getData(INDEX(tickers,1)), OFFSET(tickers,0,1,1,COLUMNS(tickers)-1),
LAMBDA(acc, t, VSTACK(acc, getData(t)))),
result
)
数式の流れを分解すると、次のようになっています。
tickers: 取得したい銘柄を配列で定義するgetData: 1銘柄分のSTOCKHISTORYを返す関数をLAMBDAで定義するREDUCE: 1銘柄目を起点に、2銘柄目以降を順番にVSTACKで下方向に積み上げるresult: 全銘柄分のデータが縦に連結された配列を返す
STOCKHISTORYのheadersを0(ヘッダーなし)にしているのは、銘柄ごとにヘッダー行が混ざらないようにするためです。出力結果は「終値」が縦にずらりと並ぶので、別途propertyに0,1(日付・終値)を指定して日付列も添えておくと、どの行がいつのデータか追えます。
使うときの注意点
便利な反面、数式が一気に複雑になるのが難点です。実務に組み込む際は次の点に気をつけてください。
WARNING
複数の関数がネストするぶん、エラーが出たときの原因切り分けが難しくなります。#VALUE!が返っても、どの銘柄でつまずいたのか数式だけでは判別できません。
銘柄数が3〜4個程度なら1数式でも管理できますが、それ以上になる場合は無理に1数式にまとめないほうが安全です。各銘柄を別シートに分けてSTOCKHISTORYを実行し、集計シートでXLOOKUP関数を使って突合する構成のほうが、後からのメンテナンスがずっと楽になります。
TIP
まずは2銘柄で動作を確認してから、銘柄数を増やしていくのがおすすめです。LAMBDAやREDUCEに不慣れな場合は、いきなり全銘柄を入れず、1ステップずつ動きを確かめながら組み立てましょう。
各関数の詳細はLAMBDA関数の使い方・REDUCE関数の使い方・VSTACK関数の使い方を参照してください。
STOCKHISTORY・GOOGLEFINANCE・Power Query の使い分け
株価データをスプレッドシートに取り込む手段はSTOCKHISTORY関数だけではありません。GoogleスプレッドシートのGOOGLEFINANCE関数や、ExcelのPower Queryもそれぞれ得意分野が異なります。自分の環境と目的に合った手段を選びましょう。
3つの手段を比較する
| 比較項目 | STOCKHISTORY | GOOGLEFINANCE | Power Query |
|---|---|---|---|
| 対応ツール | Excel(M365のみ) | Google スプレッドシートのみ | Excel・無料版も可 |
| データ更新 | ファイルを開く時・手動更新 | 自動(数分〜リアルタイム) | 手動更新 |
| 日本株 | 非対応 | 非対応 | Yahoo Finance等から取得可(サイト変更で壊れる可能性あり) |
| 設定の手軽さ | 関数1つで完結 | 関数1つで完結 | 設定が必要 |
| 為替・仮想通貨 | 一部対応(不安定) | 為替対応 | ソース次第 |
| 障害リスク | Microsoftサービス依存(2024年8月に約1週間の障害実績あり) | Googleサービス依存 | Webサイト変更で壊れる |
結局どれを選べばいいのか
それぞれに向いている場面があります。迷ったら次の基準で選んでください。
- Microsoft 365を使っていて米国株中心なら: 迷わず
STOCKHISTORY関数です。関数1つで完結し、設定も不要なので一番手軽です。 - 日本株や為替を扱いたいなら: GoogleスプレッドシートのGOOGLEFINANCE関数が有力です。自動更新される点も大きな魅力です。
- どうしてもExcelで日本株を扱いたい、または永続ライセンス版を使っているなら:
Power QueryでWebサイトからデータを取り込む方法があります。設定の手間はかかりますが、無料版Excelでも使えます。
NOTE
STOCKHISTORY関数はMicrosoftのサービスに依存しているため、サービス側の障害があると一時的にデータが取得できなくなることがあります。実際に2024年8月には約1週間にわたる障害が発生しました。重要な業務で使う場合は、データを定期的に値貼り付けで保存しておくなど、サービス障害に備えたバックアップ運用も検討しておくと安心です。
このように、どの手段にも一長一短があります。常に最新の自動更新が必要ならGOOGLEFINANCE、Excelの分析機能と組み合わせたいならSTOCKHISTORY、というように目的から逆算して選ぶのが失敗しないコツです。
応用テクニック|SEQUENCEで動的ヘッダーを自動生成する
STOCKHISTORY関数で取得したデータを月次レポートにまとめるとき、ヘッダーの月名(Jan・Feb・…)を手入力していませんか。SEQUENCE関数とTEXT関数を組み合わせれば、月次ヘッダーを自動生成できます。年が変わっても作り直す必要がありません。
12ヶ月分の月名ヘッダーを一発で作る
今年の1月から12月までの月名(英語3文字)を横一列に並べる数式です。
=TEXT(DATE(YEAR(TODAY()),SEQUENCE(1,12),1),"mmm")
数式の中身を順番に見ていきましょう。
SEQUENCE(1,12): 1から12までの連番を横方向(1行12列)に生成するDATE(YEAR(TODAY()), 連番, 1): 今年の各月1日の日付を12個作るTEXT(..., "mmm"): それぞれの日付を「Jan」「Feb」のような月名に変換する
結果は「Jan / Feb / Mar / … / Dec」が横一列にスピル展開されます。YEAR(TODAY())を使っているので、年が変わると自動的にその年のヘッダーに切り替わります。
TIP
日本語の月名にしたい場合は、書式を"m月"に変えると「1月」「2月」…と表示されます。=TEXT(DATE(YEAR(TODAY()),SEQUENCE(1,12),1),"m月")のように書きましょう。
STOCKHISTORYで取得した月次データの上にこのヘッダーを配置すれば、毎年作り直し不要の月次比較表が完成します。SEQUENCE関数は連番生成の万能ツールなので、行番号の自動採番や日付の連続生成などにも応用が利きます。SEQUENCE関数の使い方やほかの動的配列関数とあわせてExcel関数一覧(機能別)もチェックしてみてください。
まとめ
STOCKHISTORY関数は、Excelで株価データの取得を自動化できる強力な関数です。最後にポイントを整理しておきます。
- 書式:
=STOCKHISTORY(stock, start_date, [end_date], [interval], [headers], [property...]) - 必須引数: 銘柄(stock)と開始日(start_date)の2つだけ
- intervalで頻度切替: 0=日次 / 1=週次 / 2=月次
- propertyで取得列を選択: 0=日付 / 1=終値 / 2=始値 / 3=高値 / 4=安値 / 5=出来高
- 動的な期間指定:
TODAY()やDATE()との組み合わせで自動更新化が可能 - OHLCV取得:
propertyを順序指定でローソク足の元データも一発取得 - チャート連携: 出力範囲をグラフにすれば自動更新ダッシュボードが完成
- 制限事項: Microsoft 365専用・日本株非対応・リアルタイムではない遅延データ
毎朝の株価チェックや月次レポート作成を「手作業のコピペ」から解放してくれる関数です。まずは=STOCKHISTORY("MSFT", TODAY()-30, TODAY())から試してみてください。慣れてきたら複数銘柄のポートフォリオ管理表へと育てていきましょう。
日付系の関数や検索関数と組み合わせると、さらに表現の幅が広がります。TODAY関数・DATE関数・XLOOKUP関数もあわせてマスターして、自動化された株価管理シートを完成させてください。