• 締切済み

エクセルのセルからVB等で作成したアプリの変数を参照するには

エクセルのセルからVB等で作成したアプリの変数を参照する方法がわかりません。 また、そのアプリで変数が更新された際に自動的にセルの内容が変わるといった仕組みは無いでしょうか。 楽天証券のリアルタイムスプレッドシートは、セルで"=app|code!field"のような形で情報を参照できるので、何らかの方法があると思っています。 また、上記の式をエクセルに入力すると、「APP.EXEを起動しますか」といったメッセージが出ますので、参照はできるのだと思います。 VBのアプリからセルをいじると、パフォーマンスが悪く困っています。 アプリはVBにはこだわっておりません。 また、ヒントとなるような情報だけでもかまいません。 よろしくお願いします。

みんなの回答

回答No.6

同じような事でお悩みの方がいらっしゃるのだなと思って回答させて頂きます。結局私の場合も、散々悩みましたが、VBではないですが別のアプリケーションとの通信を、EXCEL側のセルの変化をイベントとして捉えて、アプリに渡したかったのですが、スキル不足の為諦めました。  結局、別のアプリから強引に取得しに行く、書き込みに行くという手段で行っております。  通信には、DDEを使いました。1秒間に約500項目をEXCELから読み出し、同様の数のデータを書き込みに行っています。  パフォーマンスは、マシンのスペック頼りです。ただ、取敢えずで使ってみた、P2、128MB、WIN2000SVで、上記のパフォーマンスが出ましたから結構これでいいっか・・と思っています。  P4 WIN-XPのマシンを新たに購入しましたが、このマシンの環境と考えられる他の要因で通信がうまくいかなかったので、原因究明している時間もないので、ほったらかしにしています。ご参考まで・・

  • taseki
  • ベストアンサー率66% (155/233)
回答No.5

すみません、「セルから参照」という意味がちょっと解らなかったのですが、単純にExcelとアプリで情報交換するだけと解釈すれば、SendMessageでウィンドウメッセージを送るなどの次元とは違うのでしょうか。 たとえばアプリ側に「ウィンドウメッセージなどでリクエストが来たら変数値を返す」機能を付けておき、Excelのほうには「リクエストを送り、その戻り値を返す」関数を用意しておき、セルからその関数を呼び出す、というようなイメージです。 見当違いでしたらすみません。

  • piyo2000
  • ベストアンサー率49% (144/293)
回答No.4

>楽天証券のリアルタイムスプレッドシートでは >セルで"=app|code!field"のような形で情報を参照できるので これはExcelの「作業中のコンピュータにないアプリケーションのデータとのリンクを設定する数式について」というヘルプトピックを読んでもらえると分かると思いますが、DDE(Dynamic Data Exchange)を使った仕組みですね。 この場合RSS.EXE(リアルタイムスプレッドシート)がDDEサーバとして動作していますが、これと同じことをしたいなら、作成するアプリケーションにDDEサーバの機能を持たせてやれば良いだけです。 詳しくは「DDE」「DDEサーバ」などでWeb検索してみましょう。VC++が多いですがDDEサーバのサンプルが見つかるはずです。 >VBのアプリからセルをいじると、パフォーマンスが悪く困っています。 それはやり方(ロジック)が悪いのでしょう(^^; 確かに、一つのセルに書き込むだけであれば時間はあまり掛かりませんが、数が増えると(それを繰り返すだけだと)遅くなってしまうこともありますからね。 ブロックで書き込むときはタブ区切り&改行区切りにするとか、後述するExcelアドインを利用するなどパフォーマンスアップの方法は幾らでも考えられます。 #3さんがおっしゃっているように、こっちのほうが王道というか普通の方法ですね。 (ソースを見たわけではないので憶測ですが)RSSではExcelアドインを登録する必要がありますが、このアドインが定期的に対象となるフィールドの更新をチェックしているだけだと思いますので、変数が更新されたタイミングで変更されるわけではないと思われます。 「アプリの変数を参照する」というのは#1さんがおっしゃっているように「そういう仕組み(インターフェイス)が(参照される側に)無いと無理」です。 前述されてるようにDDEやCOM、ファイルマッピングのようなプロセス間通信が有名ですね。 # DDEを使う人は殆どいませんが・・・(^^;

momonga_excel
質問者

お礼

ご回答ありがとうございます。 DDEサーバですね。ちょっと試してみます。 たしかにセルひとつであれば、それほど問題ないのでしょうが、できるだけたくさんの情報を渡したい(100個ぐらい)ので、そもそも無理があるのかも知れません。 それが1秒間に数回更新ですから。 データを絞ってみたり、DDEを調べてみたりします。 DDEサーバにするとして、重要な項目の更新時にエクセル側のファンクションを呼び出して、そのときだけエクセルからDDEで取りにこさせるといった感じでもいけるかもしれません。 うまく行ったらまたご報告します。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>そのアプリで変数が更新された際に自動的にセルの内容が変わるといった仕組み 変数が更新されたタイミングは、そのアプリ以外からではうまくとれない と思います。(イベントでメッセージ送信?) パフォーマンスが悪くても、アプリ側からエクセルのセルに書き出すのが簡単でいいかと思います。

momonga_excel
質問者

お礼

ご回答ありがとうございます。 と、ここまで書いて気づいたのですが、No1,No2へは「お礼を投稿する」ではなく、間違えて補足の方で書いてしまいました。 すみません。お礼のつもりです。 No.1にも書きましたが、リアルタイム性が結構重要なので、どうしてもパフォーマンスがでなければ、エクセルはあきらめます。 でも楽天証券のは出来ているようですので、もう少し頑張ってみます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 WebのスプレッドシートとExcelは別物だと思いますね。ワークシートのサイズなどかなり違います。私は、Web のほうは、あまり詳しくありません。 通常、Excelの場合は、COMアドインにします。 EXE 型は、最近は、あまり流行らないようですが、OLEオートメーションにして、参照設定で呼び出すか、REGSVR32.EXE で、レジトスリに登録しておいて、CreatObject で呼び出します。 たぶん、以下のコーナーが参考になると思います。

参考URL:
http://www.moug.net/skillup/svbm/ya01-1.htm
momonga_excel
質問者

補足

ご回答ありがとうございます。 今は、Web上での動作は考えていません。 Webにも展開するつもりですが、その際はJavaアプリとする予定です。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

何か深遠な、スキルのいりそうなことをお望みのようですね。 失礼ですが、どの程度のことがお分かりになるのか匂わせていただければ、回答者のほうもそれに応じて、レベルにあった回答をしてくれるかも知れないと思ったわけです。 下記の言葉使いからちょっと感想を持ちました。 >アプリの変数を参照する 変数というのは、アプリとかOSでもプログラムを実行しているときの、ある瞬間のメモリの値であるはずです。アプリは実行中でないと変数は話になりません。 しかし一般にプログラムが動いているときに、その変数値を他のアプリから 覗けるようにには簡単に行きません。簡単にできたらむしろ危険な場合もあるでしょう。 一般のアプリとエクセルは実行単位・世界が別で、変数を共有するなどはできないと思います。エクセルからアプリを起動し(またはその逆)、実行中に変数を参照はできるとは思いますが、アプリの変数名(名だけわかってもダメですが)などは公表されていないはずです。 オフィスソフトはそういう仕掛けを苦労してMS社が作った結果、やさしいような片鱗を垣間見るものだから、できそうに思うのかもしれませんが、その辺の仕組みの理解とか、プログラムは、ごく上級者でないとできないでしょう。 エクセルはあくまで受け皿、記録ツールとして使われることがあります。 またポピュラーなソフトですし。 表形式で表現してくれるからです。なにもエクセルが特別な機能を持っているから使われるわけではないことが多い。 最近はクライアント側からWEB上のプログラムを動かせる仕組みを作っている場合が多々あるのでそれなら可能です。それはそのようにプロが仕組んであるのです。 一番やさしいのは、ディスク上のデータに記録して、そのデータを読みにいける仕組みを作ることです。 WEB上などのは全てそれで、プログラムが走っている途中の変数値を見ているのではないはずです。

momonga_excel
質問者

補足

ご回答ありがとうございます。 レベルといっても、VBからエクセルのセルはいじれても、その逆ができないといった感じです。 アプリはもちろん、ずっと動かします。 そのアプリはTCPでデータを受信し、それをエクセルでグラフなどで表示したいのです。 かなりリアルタイム性が求められますので、エクセルからのポーリングでは問題があります。 まずは、VB側でエクセルを更新したのですが、1秒に何度も更新があるので、ちょっと重過ぎるといった問題があります。 逆にしたら解消するという保証も無いのですが、ためせたらと思っています。

関連するQ&A

  • エクセル セル参照の変数

    エクセルの使い方で質問です。例えばA8というセルを参照する時は fx=A8 として関数の欄に記入する事で参照すると思うのですが、このA8の「8」という箇所を変数にして別のセルに記入した数字を入れる事は出来るのでしょうか。例えば別のセルに64という数字を入れるとこのA8がA64としたいと考えています。

  • エクセル 参照するセル番号を変数として扱えますか

    相対参照だと思い通りにできないので,自分の考えたやり方で参照したいのです。 例えば,あるセルにリンクを貼って, =$K4 と定義したとします。以後,4だけを1ずつ増やしたいのですが,=$K(4+S)というように,座標を変数のようにあつかうことはできないのでしょうか。何か良い方法があったら教えてください。

  • Excelを2つ起動してセルを参照する方法

    ご質問させていただきます。 Excel2007を2つ起動して、他方のシートのセルを参照したいのです。 具体的に説明いたしますと、1つ目のExcel2007をExcel(1)と呼び、2つ目のExcel2007をExcel(2)と呼ぶことにします。Excel(2)のsheet1のA1セル~A48セルまでcalculateイベントでリアルタイムに変化する値が入っています。それらの値をExcel(1)のsheet2のB1セル~B48セルで参照したいのです。 できるのでしょうか? どなたか教えていただけないでしょうか? よろしくお願いいたします。 もしVBAを使わなくてもできるようでしたら、そちらの方法も教えてください。 よろしくお願いいたします。

  • c言語で作成したデータをwindowsのアプリ(VB6で作成)で読み取りたいのですが

    VBで作成したアプリの中の変数の値をC言語で作成したプログラムで参照したり、C言語の変数(メモリの値)をVBのアプリで参照したいのですが、どのようにすればいいのでしょうか。 よろしくお願いします。

  • Excelセル参照方法(初心者で申し訳ありません)

    ExcelにてAファイルとBファイルを別々に立ち上げBファイルのセル内容をAファイルにて見たいのですがどのようにしたらよいか解りません。 Aファイルはアドイン関数?(名前これでいいのかわからないです?)で内容がリアルタイムで変わる為VBマクロにてある秒数ごとに変わる 情報をサンプリングしサンプリング内容にて処理をおこないたいのですが, VBマクロ(ウエイトを入れた無限ループ)を実行するとAファイルのセル内容が変わりません。当たり前ですね。 そこでBファイルにてマクロを実行しBファイルのセルの内容をAファイルにて参照して処理をおこないたいと思っております。 ただ基本的なところ参照のしかたが解りません。HELPをみてもgooの質問をみてもみあたりません 別々に立ち上げたファイル間でのセルは参照できないのでしょうか?初歩的な質問で申し訳ありませんが よろしくお願いします。

  • エクセルで飛び飛びのセルを参照するには

    エクセルの使い方で飛び飛びのセルを参照する方法を教えてください。 例えば、sheet1のA1セルにsheet2のA1セルをsheet1のA2セルにsheet2のA15セルをsheet1のA3セルにsheet2のA30セルを参照させるにはどうしたらいいのでしょうか。よろしくお願いします

  • エクセルのセル参照、一つずつ参照セルをずらしていきたい

    エクセルのセル参照の方法について教えてください。 2つのシートがあって、 ひとつのシートにはC4,D5,E6…というように行と列がひとつずつ増えていくところに値が入力されています。 このシートから、C4,D5,E6…のセルの値を取り出して 別のシートのA1,A2,A3…に縦に並んで表示させたいのですが、どのようにセルを参照させればC4,D5,E6…という 行と列がひとつずつ増えていくセルを参照できるでしょうか? よろしくお願いいたします。

  • フレームにExcelを表示させて、セルの情報を取得

    フレームにExcelを表示させて、セルの情報を取得したいのですが。 環境はVB2005です。 変数からテキストに表示させるのはできますが、 どうしてもWebBrowserのようにForm上に表示できません。 こういったことは、APIを使うものだと思い込んでいますが、 使わなくてもできるのでしょうか?また、APIのほうが問題が起きにくい、 構造やプログラミングが単純などメリットがあるのでしょうか? 下記画像のように、Excelを表示させる方法をご教授お願い致します。 できれば、変数にセルの情報を入力するところまで教えていただけると幸いです。 こちらのページの画像を参照お願い致します。 (実現したい様子の画像です。ボタンを押すと、Excelのセルの情報を取得、 変数に代入して、変数の内容をテキストに出力といった感じです。) http://blogs.yahoo.co.jp/tokyokeeper/1036127.html

  • Excelのセルの参照について

    Excelでセルを参照するにはB3やA7などのように指定しますが、以下のような参照はできるのでしょうか? 1、任意のセルに何らかの数字が入っている状態で 2、その数字を行として参照する。 たとえばA7に3という数字が入っているとします。 そのA7の値を行番号としてB3やC3を参照する、といった具合です。 あまりうまく説明できないのですが、情報が不足していましたらまた補足します。 よろしくお願いします。

  • VBからExcelのデータを参照するには?

    VBからExcelのデータを参照するには? ExcelのA列を、参照しようとしています。 このA列には数字も混じっています。 例えば A123 abc 456 qwer のように、4行あったとします。 VBのソースコードは、次の通り --------------------- Dim elSequence(10) As String i = 0 Do Until objSheet.Range("a2").Offset(i,0).Value = "" elSequence(i) = objSheet.Range("a2").Offset(i,0).Value i += 1 Loop --------------------- 問題は、Excelのセルに「数字だけの場合(上記の例で4行目)」で、VBはこれを、文字列として扱わずにDouble型と認識してしまいます。 例え、Excelのセルを、プロパティの文字列指定としても「456」はDouble型になってしまいます。 Excelから受け取ったデータを、文字列への変換はどのようにしたら良いですか。 参考になりそうなWeb等でも構いませんので、教えていただけませんか。

専門家に質問してみよう