「Excelで株価の推移を毎回コピペするのが面倒」「ポートフォリオの月次データを自動更新したい」と感じていませんか。STOCKHISTORY関数なら、数式ひとつで株価履歴をExcelに展開できます。
この記事では、ExcelのSTOCKHISTORY関数の使い方を解説します。書式・基本例・OHLCV取得・期間指定・チャート連携・エラー対処まで、コピペで動く数式つきで紹介します。Microsoft 365を使っていれば、今日から株価データの取得を自動化できます。
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関数の活用例|チャートや分析への応用
数式単体で使うだけでなく、グラフや他の関数と組み合わせることで真価を発揮します。実務でよく使う応用パターンを紹介します。
活用例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関数のよくある質問(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関数は、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関数もあわせてマスターして、自動化された株価管理シートを完成させてください。
