ExcelのRTD関数の使い方|RTDサーバーからリアルタイムデータを取得する

スポンサーリンク

「Excelで株価や為替を秒単位で更新したい」「製造ラインのセンサー値をシートに流し込みたい」――こうした業務要件にピンポイントで応えるのが RTD関数 です。

RTD(RealTimeData)は、外部のRTDサーバーと通信してデータを継続的に取り込む仕組みです。証券会社のトレーディングツール、PLCや SCADA などの現場制御システム、Bloomberg のような金融データサービスで広く使われています。

ただし「サーバーが必要」「Windows版限定」「ProgID とトピックの理解が必要」と、初見ではハードルが高い関数でもあります。

この記事では、RTD関数の仕組み・書式・基本コード・DDE関数との比較・実務での活用例・エラー対処までを順番に解説します。読み終えるころには、自社環境で RTD を導入するための判断材料がそろうはずです。

  1. ExcelのRTD関数とは?RTDサーバーとリアルタイムデータ取得の仕組み
    1. 読み方と語源
    2. RTDサーバーとは何か
    3. どんな業務シーンで使うのか
    4. 対応バージョンと前提条件
  2. RTD関数の書式と引数の渡し方
    1. 基本構文
    2. 引数一覧
    3. ProgID とは何か
    4. トピックの設計思想
    5. 引数を渡すときの注意
  3. RTD関数の使い方①|基本的なRTDサーバー接続例
    1. 例1:ローカルのRTDサーバーから1つの値を取得する
    2. 例2:リモートサーバーからデータを取得する
    3. 例3:セル参照で動的にデータを切り替える
    4. 例4:複数項目を横並びで表示する
    5. 更新頻度の調整
  4. RTD関数の使い方②|DDE関数との比較と移行
    1. DDEとRTDの違い
    2. DDEからRTDへの移行イメージ
    3. 移行時のチェックリスト
  5. RTD関数の応用|株価・為替・センサーデータのリアルタイム取得
    1. 活用例1:株価・為替のダッシュボード
    2. 活用例2:製造現場のセンサーモニタリング
    3. 活用例3:自作RTDサーバーとの連携
    4. 活用例4:VBAと組み合わせたアラート発火
  6. RTD関数でよくあるエラーと対処法(N/A・接続失敗・更新されない)
    1. #N/A エラー:サーバーに接続できない
    2. #VALUE! エラー:トピックが解釈できない
    3. #REF! エラー:接続が途中で切れた
    4. データが更新されない
    5. セキュリティ警告でブロックされる
    6. トラブル切り分けの基本フロー
  7. ExcelのRTD関数 よくある質問(FAQ)
    1. Q1. RTD関数は Microsoft 365 でなくても使えますか?
    2. Q2. RTDサーバーは自分で作れますか?
    3. Q3. RTD関数とPower Queryはどちらを使うべきですか?
    4. Q4. RTD関数で取得した値を別のセルで計算に使えますか?
    5. Q5. RTD関数の更新でCPU使用率が高くなりすぎます。どう抑えればよいですか?
    6. Q6. ExcelファイルにRTD関数を残したまま閉じても問題ないですか?
  8. まとめ
    1. 関連記事

ExcelのRTD関数とは?RTDサーバーとリアルタイムデータ取得の仕組み

読み方と語源

RTD関数は「アール ティー ディー かんすう」と読みます。RTDは RealTimeData(リアルタイムデータ) の略です。外部プログラムから継続的にデータを受け取り、Excelのセル上に最新値を表示するための関数です。

通常の関数が「呼び出されたタイミングで一度だけ計算する」のに対し、RTD関数は サーバー側からのプッシュ通知 を待ち受けます。データが更新されるたびにセルを自動再計算する点が最大の特徴です。

RTDサーバーとは何か

RTDサーバーは、Microsoft の COM(Component Object Model) という仕組みで作られた外部プログラムです。IRTDServer というインターフェースを実装することで、Excelからの接続要求に応答できるようになります。

ExcelはCOMを通じてサーバーに「このトピックのデータがほしい」と伝えます。サーバーは値が変わるたびにExcelに通知を返します。この双方向通信のおかげで、Excelは画面を再読み込みすることなく最新値を保持できます。

どんな業務シーンで使うのか

RTD関数が特に活躍するのは、以下のような「秒〜分単位でデータが変わる業務」です。

  • 株価・為替・指数・先物・暗号資産のリアルタイム取得
  • 製造ラインの温度・圧力・回転数などのセンサー値モニタリング
  • 物流倉庫のタグ読み取り数や処理レーンの稼働状況
  • コールセンターの着信待ち件数・応対中件数の表示
  • スポーツのライブスコアや競技進行状況のダッシュボード

要するに「外部の何かが動き続けていて、その状態を一覧で見たい」シーンに向いています。

対応バージョンと前提条件

RTD関数は Excel 2002 以降 で利用できますが、いくつかの前提条件があります。

条件内容
OSWindows 版 Excel のみ対応(Mac版は COM を持たないため非対応)
RTDサーバー別途インストールまたは自作が必要
信頼設定マクロセキュリティで COM サーバーの実行が許可されている必要あり
更新間隔デフォルト2秒。Application.RTD.ThrottleInterval で変更可能

RTD関数だけを書いてもデータは取れません。「Excel + RTDサーバー」のセット で初めて機能する点を、最初に押さえておきましょう。

RTD関数の書式と引数の渡し方

基本構文

RTD関数の構文はとてもシンプルです。ただし、第3引数以降の「トピック」がやや独特です。

=RTD(ProgID, Server, Topic1, [Topic2], ...)

引数一覧

引数必須/任意内容
ProgID必須RTDサーバーの ProgID(COMサーバーの識別子)を文字列で指定。例:"MyCompany.StockRTD"
Server必須RTDサーバーが動作するコンピューター名。ローカルなら ""(空文字)または省略可
Topic1必須取得するデータを特定する第1キー。証券コードや銘柄シンボルなど
Topic2〜任意取得するデータをさらに絞り込むための第2〜第28キー。「銘柄+項目」のように複数キーで1データを特定する

ProgID とは何か

ProgID(Programmatic Identifier)は、COMサーバーごとに割り振られた 一意の識別文字列 です。形式は Vendor.Component または Vendor.Component.Version が一般的です。

ProgID は通常、サーバー提供元のマニュアルや、Windowsレジストリの HKEY_CLASSES_ROOT 配下で確認できます。証券会社のRTDサーバーであれば、セットアップガイドに必ず記載されています。

トピックの設計思想

トピックは「サーバー側で公開されているデータを特定するためのキー」です。1つのトピックで足りないケースも多く、たとえば株価サーバーなら「証券コード」と「項目名」の2つで1つの値を特定します。

=RTD("MyCompany.StockRTD", , "7203", "price")    → トヨタの現在値
=RTD("MyCompany.StockRTD", , "7203", "volume")   → トヨタの出来高
=RTD("MyCompany.StockRTD", , "7203", "bid")      → トヨタの買気配

トピックの組み合わせは サーバー側の仕様で決まっています。必ずサーバー提供元のドキュメントを確認してください。

引数を渡すときの注意

引数の文字列は 二重引用符で囲む 必要があります。セル参照を使う場合は引用符は不要です。

=RTD(A1, "", B1, C1)

セル参照にしておくと、参照先の値を変えるだけで取得対象を切り替えられます。保守性が大幅に上がるため、実務では推奨の書き方です。

RTD関数の使い方①|基本的なRTDサーバー接続例

ここからは、実際にどのような数式を書いてRTDサーバーに接続するかを具体例で見ていきます。

例1:ローカルのRTDサーバーから1つの値を取得する

もっともシンプルなパターンです。ローカルPCでサーバーが稼働している場合、Server 引数は空にします。

=RTD("MyCompany.StockRTD", , "7203", "price")
引数意味
ProgID“MyCompany.StockRTD”サーバーの識別子
Server(省略)ローカル実行
Topic1“7203”証券コード
Topic2“price”取得項目(現在値)

サーバーが稼働していれば、セルに現在値が表示されます。データ更新のたびに自動で書き換わります。

例2:リモートサーバーからデータを取得する

社内のデータ配信サーバーから値を引きたい場合は、Server 引数にコンピューター名を入れます。

=RTD("MyCompany.StockRTD", "DATA-SERVER01", "USDJPY", "ask")

ホスト名解決ができる前提で、DATA-SERVER01 というマシンのRTDサーバーに接続します。社内ネットワークのDNS設定やDCOM設定が必要なケースが多いので、情報システム部門と連携して進めましょう。

例3:セル参照で動的にデータを切り替える

実務では、銘柄や項目名を 入力セル に持たせる構成が便利です。

=RTD($A$1, $A$2, B3, C3)
セル入力例意味
A1“MyCompany.StockRTD”ProgID
A2“”サーバー(空=ローカル)
B3“7203”証券コード
C3“price”項目名

このパターンなら、B列とC列を増やすだけで「銘柄一覧×複数項目」のリアルタイム表が完成します。

例4:複数項目を横並びで表示する

トピック2を「項目名」にして、列方向に複数項目を並べる構成もよく使われます。

A列: 銘柄コード
B列: =RTD("MyCompany.StockRTD", , $A2, "price")
C列: =RTD("MyCompany.StockRTD", , $A2, "volume")
D列: =RTD("MyCompany.StockRTD", , $A2, "change")

下方向にコピーするだけで、銘柄ごとの価格・出来高・前日比が一覧化されます。Excelの条件付き書式と組み合わせれば、値動きの大きな銘柄をハイライトする簡易ボードも作れます。

更新頻度の調整

RTDの更新間隔はデフォルトで 2秒 に設定されています。頻繁な更新は画面のチラつきやCPU負荷を招くため、用途に応じて間隔を変更しましょう。

Application.RTD.ThrottleInterval = 2000  ' 2秒(デフォルト)
Application.RTD.ThrottleInterval = 5000  ' 5秒に変更
Application.RTD.ThrottleInterval = 0     ' サーバーからの通知を即時反映

このコードはVBAのイミディエイトウィンドウや起動マクロから実行できます。0 を指定するとサーバー通知が来るたびに即座に再計算されます。CPU負荷とのトレードオフを意識して値を決めてください。

RTD関数の使い方②|DDE関数との比較と移行

リアルタイムデータ取得には、RTD登場以前から DDE(Dynamic Data Exchange) という仕組みも使われていました。古い証券アプリやレガシー業務システムには、いまも DDE 連携が残っています。

DDEとRTDの違い

項目DDERTD
通信方式プロセス間通信(旧式)COM ベースのプッシュ通知
安定性アプリ停止や再起動でリンク切れしやすいリンク切れに強く、自動再接続が容易
通知タイミングクライアントからのポーリング中心サーバー側からのプッシュ
パフォーマンス大量データに弱い大量データの差分更新が得意
Excelからの記述リンク貼り付け(`=サーバートピック!項目`)RTD関数
Microsoftの位置付けレガシー扱い・推奨されないリアルタイム連携の標準
サポート状況Excel 2016 以降は既定で無効現行バージョンで標準サポート

セキュリティ上の理由から、Excel 2016 以降は DDE が初期状態で無効化 されています。DDE を有効にすると外部からの攻撃面が広がるため、MicrosoftはRTDへの移行を推奨しています。

DDEからRTDへの移行イメージ

たとえば、古い DDE 形式のリンクが以下のように書かれていたとします。

=StockApp|Quote!7203

これと同等の情報をRTDで取得するなら、サーバー提供元が用意したRTDサーバーを介して次のような数式に置き換えます。

=RTD("StockApp.QuoteRTD", , "7203", "price")

DDE の アプリ名|トピック!項目 構造が、RTD の ProgID + Topic1 + Topic2 に対応するイメージです。サーバー側のリプレースが必要なので個人で完結できる作業ではありません。ただし提供元がRTDサーバーを用意していれば、Excelファイル側の数式書き換えは比較的シンプルです。

移行時のチェックリスト

  • 提供元が RTDサーバー版を提供しているか確認する
  • ProgID とトピック仕様のドキュメントを入手する
  • 既存ファイルの DDE リンクを棚卸しする(数式名前の管理 などから検索)
  • 試験用シートで小規模に RTD 化し、表示と更新を確認する
  • 本番ファイルを段階的に置き換える

DDE のままでは将来のExcelアップデートで動かなくなるリスクがあります。レガシーリンクを抱えている現場は早めの移行計画を立てましょう。

RTD関数の応用|株価・為替・センサーデータのリアルタイム取得

ここでは、業界別の代表的な活用パターンを紹介します。RTDサーバーを「自分で書く」場合の参考にもなります。

活用例1:株価・為替のダッシュボード

国内ネット証券のなかには、自社ツール経由でRTDサーバーを提供しているサービスがあります。FX業者の一部や、Bloomberg・LSEG(旧Refinitiv)などのプロ向け配信もRTDに対応しています。

代表的なシート構成は以下のようなものです。

内容数式例
A銘柄コード(7203, 6758 など)手入力
B現在値=RTD(ProgID, , A2, "price")
C前日比=RTD(ProgID, , A2, "change")
D出来高=RTD(ProgID, , A2, "volume")
Eアラート=IF(ABS(C2)>=100, "★急変", "")

条件付き書式で「前日比がプラスなら緑、マイナスなら赤」と色分けすれば、視覚的にもわかりやすい簡易トレードボードになります。

活用例2:製造現場のセンサーモニタリング

PLC(プログラマブルロジックコントローラ)や SCADA は、OPCサーバー経由で値を公開していることが多く、OPC-RTDブリッジを介すことでExcelから直接読み取れます。

A2: 設備ID("LINE-01-MOTOR")
B2: =RTD("OpcRtd.Server", , A2, "Temperature")
C2: =RTD("OpcRtd.Server", , A2, "Pressure")
D2: =RTD("OpcRtd.Server", , A2, "RPM")

温度や圧力が閾値を超えたら背景色を赤に変えるだけで、現場の朝礼で見せられるリアルタイム監視シートが完成します。

活用例3:自作RTDサーバーとの連携

社内システムやIoTデバイスからのデータをExcelに流したい場合、RTDサーバーを自作する選択肢もあります。Microsoftの公式ドキュメントには IRTDServer インターフェースの実装サンプルが用意されています。C# / VB.NET / VBA など複数の言語で記述できます。

自作RTDサーバーから値を受け取る側のExcel数式は、市販製品と同じ書式です。

=RTD("MyOrg.SensorRTD", , "SENSOR-001", "value")
=RTD("MyOrg.SensorRTD", , "SENSOR-001", "status")

サーバー側で1秒ごとに UpdateNotify を呼ぶ実装にしておけば、Excel側でほぼ遅延なく値が更新されます。

活用例4:VBAと組み合わせたアラート発火

RTDで取得した値をトリガーに、VBAで通知やログ保存を自動化することもできます。値が閾値を超えたタイミングでOutlookメールを送る、別シートにタイムスタンプ付きで履歴を残すといった処理が定番です。

Private Sub Worksheet_Calculate()
    Dim rng As Range
    Set rng = Me.Range("B2")
    If rng.Value > 100 Then
        Application.EnableEvents = False
        Me.Range("D2").Value = "★閾値超過 " & Now
        Application.EnableEvents = True
    End If
End Sub

Worksheet_Calculate イベントは、RTDによる再計算でも発火します。EnableEvents = False で囲んでイベントの無限ループを防ぐ点だけ注意してください。VBAのイベント設計をしっかり押さえたい場合は、ExcelVBAの自動化ガイド もあわせて参照してください。

RTD関数でよくあるエラーと対処法(N/A・接続失敗・更新されない)

RTD関数のトラブルは「サーバー側」「Excel設定」「数式」「ネットワーク」のどこかに原因があります。症状別に切り分けていきましょう。

#N/A エラー:サーバーに接続できない

原因対処
RTDサーバーが起動していないサーバープログラムを起動。サービス化されている場合は services.msc で稼働状況を確認
ProgID が間違っているレジストリ HKEY_CLASSES_ROOT で正確な ProgID を確認。typo がないかチェック
COM コンポーネントが未登録regsvr32 で DLL を再登録。インストーラ付属のセットアップを再実行
32bit / 64bit の不一致Excelのビット数とサーバーのビット数を揃える(混在不可)

#VALUE! エラー:トピックが解釈できない

原因対処
トピック名が辞書にないサーバーのドキュメントで正しい名称を確認
引数の数や型が仕様外引数を文字列として渡す。空セルを "" に置き換える
データ型の変換に失敗サーバー側の戻り値型を確認。VALUE 関数で明示的に数値化

#REF! エラー:接続が途中で切れた

原因対処
サーバー側のクラッシュプロセスを再起動。イベントログでエラー詳細を確認
ネットワーク切断ping や Test-NetConnection で経路を確認
DCOM 権限不足dcomcnfg でアクセス権・起動権を確認・付与

データが更新されない

エラー値は出ていないのに値が動かない、というケースもよくあります。原因と対処は以下のとおりです。

原因対処
計算モードが手動数式計算方法の設定 を「自動」に変更
ThrottleInterval が長すぎApplication.RTD.ThrottleInterval = 2000 で2秒に戻す
マクロセキュリティで COM がブロックトラストセンターマクロの設定 を確認
サーバーが Heartbeat を返していないサーバー側ログで通知送信状況を確認

セキュリティ警告でブロックされる

「セキュリティに関する警告:COMサーバーをアクティブ化しようとしました」と表示される場合は、信頼できる発行元のサーバーであることを確認したうえで許可してください。出所不明なRTDサーバーは絶対に有効化しないことが鉄則です。

トラブル切り分けの基本フロー

  1. サーバー単体で動くか確認:付属のテストツールがあれば先にそちらで疎通を取る
  2. 別の簡単なトピックで試す:複雑な数式の前に「サーバー側のサンプルトピック」で接続だけ確認
  3. 同じPCでローカル接続を試す:リモート問題かExcel側問題かの切り分けに有効
  4. イベントログ・サーバーログを見る:Windowsの「アプリケーション」ログにエラーが出ていることが多い

ExcelのRTD関数 よくある質問(FAQ)

Q1. RTD関数は Microsoft 365 でなくても使えますか?

はい、使えます。RTD関数は Excel 2002 以降の全Windows版 に標準搭載されています。Microsoft 365 サブスクリプションは必須ではありません。ただし Mac版Excelでは利用不可 です。MacにはWindowsと同じCOM基盤が存在しないためです。Macで類似のことをしたい場合は、Power QueryでのAPI定期取得や、Office Scriptsでの代替を検討してください。

Q2. RTDサーバーは自分で作れますか?

はい、作れます。Microsoftの公式ドキュメントに IRTDServer インターフェース仕様が公開されており、C# / VB.NET / Delphi などで実装できます。ただしCOM登録・DCOM設定・ビット数管理など、Excel関数を「書く」よりも前段で覚えることが多めです。自社でIoTデータをExcelに流したいといった要件であれば、社内の開発リソースと相談しながら段階的に進めるのが現実的です。

Q3. RTD関数とPower Queryはどちらを使うべきですか?

更新の 粒度 で使い分けます。秒〜数秒単位で値が変わるデータ(株価・為替・センサー)はRTD関数が向きます。数分〜数時間に1回の更新で十分なデータ(Web上のCSV、社内DBのスナップショット)はPower Queryのほうが扱いやすく、可視化や変換の自由度も高くなります。ファイルを開いたときの自動更新でよければPower Query、開きっぱなしで流し見したいならRTD、と覚えておくと選びやすいです。

Q4. RTD関数で取得した値を別のセルで計算に使えますか?

使えます。RTDが返す値は通常のセル値と同じように扱えます。四則演算・IF判定・条件付き書式・グラフのデータソースなど、Excelのあらゆる機能と組み合わせられます。値が更新されるたびに参照先の数式も再計算されるので、リアルタイム集計のダッシュボードが組みやすいのがRTDの強みです。

Q5. RTD関数の更新でCPU使用率が高くなりすぎます。どう抑えればよいですか?

主に3つの方法で抑えられます。まず Application.RTD.ThrottleInterval を 2000〜5000 程度に引き上げ、更新間隔を広げます。次に、不要なトピックの購読を減らします。表示しなくなった列のRTD関数は削除するか、別シートに退避させてください。さらに、サーバー側にThrottling機能がある場合は、サーバー側で配信頻度を間引く設定を行うのも有効です。

Q6. ExcelファイルにRTD関数を残したまま閉じても問題ないですか?

問題はありません。ただし次回ファイルを開いたときに、RTDサーバーが稼働しているマシンと再接続できる状態である必要があります。サーバーが停止している環境でファイルを開くと、セルに #N/A が並ぶことになります。配布用のファイルでRTD関数を含める場合は、サーバーがない閲覧者向けに 値貼り付けのスナップショットシート を別途用意しておくと親切です。

まとめ

RTD関数のポイントを整理します。

  • RTD関数は、外部の RTDサーバー と COM 通信し、リアルタイム値をExcelセルに表示する関数
  • 構文は =RTD(ProgID, Server, Topic1, [Topic2], ...) のシンプル3要素+追加トピック
  • ProgID とトピックの仕様は サーバー提供元のドキュメント が一次情報。まずはそこを読む
  • DDE は既定で無効化されており、MicrosoftはRTDへの移行を推奨している
  • 株価・為替・センサー・物流・コールセンターなど、秒単位で変わるデータの表示に最適
  • エラーの切り分けは「サーバー → COM登録 → 数式 → ネットワーク → セキュリティ設定」の順
  • Macでは使えない。MacならPower QueryやOffice Scriptsでの代替を検討する

RTD関数はやや専門性が高いものの、対応するRTDサーバーさえあれば、Excelを リアルタイムダッシュボード として活用できる強力な機能です。最初の一歩は、自社で使っている業務システムやデータプロバイダーが「RTD対応」を謳っているかを確認することです。対応していれば、本記事の数式テンプレートをコピペするだけで、すぐに値が流れ込んでくるはずです。

関連記事

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