株価をExcelで自動取得できれば、
投資管理・資産管理・株価分析 を大幅に効率化できます。
アプリで管理も楽ですが、Excel管理すると自分好みに痒い所に手が届くカスタマイズが可能なのが最大のメリットです。
本記事では、
初心者でも使える方法から、少し高度な自動取得方法まで
Excelで株価を取得する代表的な手法をまとめて解説します。
Excelで株価を取得する主な方法一覧
| 方法 | 難易度 | 自動更新 | 米国株対応 | 対応Excelバージョン | 特徴 |
|---|---|---|---|---|---|
| 株価データ型 | ★☆☆ | ○ | ○ | Excel 365 / Excel 2021以降 | 最も簡単・関数不要 |
| WEBSERVICE+FILTERXML | ★★☆ | △ | ○ | Excel 2013以降 | 関数だけで取得可能 |
| Power Query | ★★☆ | ○ | ○ | Excel 2016以降 / 365 | 安定・大量データ向き |
| VBA | ★★★ | ○ | ○ | Excel 2010以降 | 高度な自動化が可能 |
| 外部CSV / API | ★★★ | ○ | ○ | Excel 2016以降 / 365 | 本格運用向け |
方法①:株価データ型(旧Office 365)
Excelの「株価データ型」を使えば、
数クリックで最新株価を自動取得 できます。
手順
セルに銘柄名 or 証券コードを入力
セルを選択
[データ] → [株価] をクリック
株価データ型に変換される
右側のアイコンから「価格」「前日終値」などを選択
メリット
関数不要
初心者向け
自動更新対応
注意点
対応銘柄に制限あり
リアルタイムではなく 一定間隔更新
- 2026年2月時点の最新のMicrosoft 365では株価(English)版しか選択できないため、日本の企業コードでの取得には対応できていません
方法②:WEBSERVICE関数で株価を取得する
Web上の株価情報を 関数だけで取得 する方法です。
=WEBSERVICE("URL")
特徴
VBA不要
自由度が高い
サイト構造変更に弱い
向いているケース
簡易的な取得
検証・学習用途
例
|
1 |
=INDEX(TEXTSPLIT(TEXTBEFORE(WEBSERVICE("https://stooq.com/q/l/?s=7203.jp&i=d"),CHAR(10)),","),6) |

方法③:Power Queryで株価を自動取得(安定)
Power Queryを使うと、
WebページやCSVから株価データを定期取得 できます。
特徴
更新ボタン1つで再取得
複数銘柄・大量データ向き
業務利用でも安定
おすすめ用途
投資管理シート
定期レポート作成
CSV連携
例:Stooq(無料・APIキー不要)から日次データを取得(Power Queryだけで完結)
向いてる用途:とにかく手早く「日足(Open/High/Low/Close/Volume)」を自動取得したい
手順
- Excel → データ → データの取得 → Webから
- URLに以下を入力(例:トヨタ 7203 の日足・CSV)
https://stooq.com/q/d/l/?s=7203.jp&i=d - 取り込み画面で 変換データ(Power Queryエディター)を開く
- 列の型(Date / number)を整える → 閉じて読み込む
- データ → すべて更新 で最新化(ブックを開くたびに更新も設定可)
ポイント
取得できるのは「終値だけ」ではなく日足一式なので、最新終値だけ欲しいなら「最新日付の行を残す」変換を入れると便利
銘柄コードはサイト仕様に依存します(7203.jp のように市場サフィックスが必要)

方法④:VBAで株価を取得(高度)
VBAを使えば、
完全自動で株価を取得・更新 できます。
できること
起動時に自動更新
定時実行
複数サイト対応
注意点
VBA知識が必要
セキュリティ設定に注意
例1:WEBSERVICE()+VBAでセルに式を入れる(最短・簡単)
ポイント:VBAは“取得”というより「Webから取れるURLを組んで、セル関数で吸う」役。
(Microsoft 365 なら STOCKHISTORY / 株価 データ型でもっと簡単なことが多い)
|
1 2 3 4 5 6 7 8 9 |
Sub GetFxRate_Ex1_Webservice() ' 例:為替(USDJPY)をWebから取得して表示(デモ用) ' WEBSERVICE関数が使えるExcelで動きます。 Dim ws As Worksheet Set ws = ActiveSheet ws.Range("A1").Value = "USDJPY (demo)" ' 例として無料系のレートAPIを使う場合のイメージ(URLは適宜差し替え) ' ws.Range("B1").Formula = "=WEBSERVICE(""https://example.com/api/usdjpy"")" ' 実際はJSONを返すことが多いので、FILTERXMLではなくJSONパースが必要になります。 ws.Range("B1").Value = "※デモ:URLはあなたの取得先に合わせて差し替え" End Sub |
- メリット:Excel関数中心で速い
- デメリット:JSONが返ると結局パースが必要。取得先URLが重要
例2:HTTPでJSONを取得 → VBAで価格を抜き出す(汎用)
ポイント:MSXML2.XMLHTTP でGETして、JSONから必要値を抜き出します。
※VBA標準にはJSONパーサがないので、ここでは 超簡易の文字列抽出 で例示(本番はVBA-JSON等推奨)。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
Option ExplicitSub UpdateQuotes_Bulk() Dim ws As Worksheet: Set ws = ActiveSheet Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row If lastRow < 2 Then Exit Sub Dim r As Long For r = 2 To lastRow Dim sym As String sym = Trim$(ws.Cells(r, "A").Value) If sym <> "" Then ws.Cells(r, "B").Value = GetPriceOne(sym) End If Next r End SubPrivate Function GetPriceOne(ByVal symbol As String) As Variant ' 取得先APIは差し替え Dim url As String url = "https://example.com/api/quote?symbol=" & URLEncode(symbol) Dim http As Object Set http = CreateObject("MSXML2.XMLHTTP") http.Open "GET", url, False http.setRequestHeader "Accept", "application/json" http.send If http.Status <> 200 Then GetPriceOne = CVErr(xlErrNA) Exit Function End If GetPriceOne = ExtractJsonNumber(http.responseText, """price"":") End FunctionPrivate Function URLEncode(ByVal s As String) As String ' 最低限(英数字/.-_~ 以外を%エンコード) Dim i As Long, ch As Integer Dim out As String: out = "" For i = 1 To Len(s) ch = AscW(Mid$(s, i, 1)) Select Case ch Case 48 To 57, 65 To 90, 97 To 122 ' 0-9A-Z a-z out = out & ChrW(ch) Case 45, 46, 95, 126 ' - . _ ~ out = out & ChrW(ch) Case Else out = out & "%" & Right$("0" & Hex(ch), 2) End Select Next i URLEncode = out End FunctionPrivate Function ExtractJsonNumber(ByVal json As String, ByVal keyToken As String) As Variant Dim p As Long, q As Long p = InStr(1, json, keyToken, vbTextCompare) If p = 0 Then ExtractJsonNumber = CVErr(xlErrNA): Exit Function p = p + Len(keyToken) Do While p <= Len(json) And (Mid$(json, p, 1) = " " Or Mid$(json, p, 1) = vbTab) p = p + 1 Loop q = p Do While q <= Len(json) Dim c As String: c = Mid$(json, q, 1) If (c Like "[0-9]") Or c = "." Or c = "-" Then q = q + 1 Else Exit Do End If Loop If q = p Then ExtractJsonNumber = CVErr(xlErrNA) Else ExtractJsonNumber = CDbl(Mid$(json, p, q - p)) End Function |
- メリット:APIを変えても使い回せる
- デメリット:JSON処理はちゃんとやるならライブラリ導入が必要
例3:複数銘柄を一括更新(シートの銘柄一覧 → 価格列へ)
シート例
- A列:銘柄コード(例:
7203.T) - B列:価格(ここに入れる)
- 2行目以降に銘柄が並ぶ
実務でのおすすめ方針(失敗しにくい)
レート制限・エラー時のリトライ・キャッシュを入れる
Microsoft 365なら:STOCKHISTORY() / 「株価」データ型(VBA不要のことが多い)
VBAでやるなら:
取得先は 公式API(証券会社/データベンダー)
JSONパースは VBA-JSON(JsonConverter) など導入
方法⑤:外部CSV・API連携(本格運用)
証券会社やデータ提供元の APIやCSV を使う方法です。
特徴
精度が高い
リアルタイム性が高い
将来の自動化・拡張向き
向いている人
中〜上級者
業務・分析用途
長期運用
どの方法を選ぶべき?
| 目的 | おすすめ |
|---|---|
| 初心者・簡単 | 株価データ型 |
| 関数だけ使いたい | WEBSERVICE |
| 安定・実務 | Power Query |
| 完全自動化 | VBA |
| 本格分析 | API / CSV |
よくある質問(Q & A)
- Excelで取得できる株価はリアルタイムですか?
-
Excelで取得できる株価は、基本的に「リアルタイム」ではなく数分〜15分程度遅れた参考値になります。
Excelの「株価」データ型やWEBSERVICE関数、Power Queryなどで取得する価格は、証券会社の取引システムと直接接続しているわけではありません。そのため、
- トレードの売買判断
- スキャルピングやデイトレード
には向きませんが、
- 資産管理
- ポートフォリオの評価
- 日次・週次の価格確認
といった用途であれば十分実用的です。
- 日本株と米国株の両方をExcelで取得できますか?
-
はい、日本株・米国株ともにExcelで取得可能です。
例えば、
- 日本株:
7203.T(トヨタ自動車) - 米国株:
AAPL(Apple)
のようにティッカーシンボルを指定することで、株価データを取得できます。
Excelの「株価」データ型や、Webからの取得機能を使えば、
株価だけでなく以下の情報も取得できます。- 現在値
- 前日終値
- 始値・高値・安値
- 時価総額
- PER など
複数銘柄を一覧で管理できるため、資産管理表として活用できます。
- 日本株:
- 株価が取得できない・更新されない場合の原因は何ですか?
-
株価が取得できない場合は、以下の原因が多く見られます。
- ティッカーシンボルの入力ミス
- 市場コード(
.Tなど)の付け忘れ - 取得元サイトの仕様変更
- Excelのデータ更新がオフになっている
- ネットワーク接続エラー
対処法としては、
- 銘柄コードを正しく入力する
- 「すべて更新」を実行する
- 一度データを削除して再取得する
- Power Queryの場合は取得URLを確認する
といった点を見直すと改善することがあります。
まとめ
Excelでは、
用途・レベルに応じて複数の株価取得方法 が用意されています。
まずは株価データ型
安定運用ならPower Query
自動化したいならVBA
自分の投資スタイルに合った方法を選び、
株価管理を自動化・効率化 していきましょう。



