- ベストアンサー
Excelを2つ起動してセルを参照する方法
- Excel2007を2つ起動して、他方のシートのセルを参照する方法を教えてください。
- 具体的な手順としては、Excel(1)とExcel(2)という2つのExcel2007を起動し、Excel(2)のsheet1のA1セル~A48セルまでの値をExcel(1)のsheet2のB1セル~B48セルで参照する方法を教えてください。
- もしVBAを使わずにこの操作が可能な場合は、別の方法も教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
幾つか方法はありますが, 方法1) >エクセルを2つ開いて 判っていてそういう言い方をしているのだとすると,やはりそういう危うい方法はやめて1つのエクセルの中で2つのブックを開く運用にすれば,単純にリンク貼り付けの参照式で直ちに値を参照してくる事が出来ます。 数式例: =[Book2.xls]Sheet1!A1 通常はこれが最も安全かつ簡便な方法です。 方法2) 敢えて2つエクセルを開いて運用しなければならない事情があってそうしているのでしたら,Book2のcalculateイベントの中で併せてブックを保存させ,ブック1の方では保存された更新後の値を外部参照式でこまめに参照させるような事でも出来ます。 数式例: ='c:\test\[book2.xls]Sheet1'!A1 なお,この参照式は「再計算」では更新できないので,もしマクロを使うならupdatelinkをします。 方法3) DDEを使ってExcel(1)から直接Excel(2)に外部リンクすることも,一応出来ます。 簡易には,たとえば元のブックのA1からA48のセル範囲にTargetと名前を定義しておき, =INDEX(excel|book2.xls!Target,ROW(A1)) 以下コピー などのような式で,目的のA1以下の値を表示できます。 リンクは即座に更新されます。
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
>そのような場合でも教えていただいた方法でExcel(1)と(2)をDDE接続できるのでしょうか? まず実際にご自分の手を動かして,やってみてください。何か競合する要素が無ければ,出来ます。 そもそもそんな状況だなんてお話は聞いてませんし,現状ではあなたのデータベンダーが何でどんなDDE接続をしているのか不明なので,出来るともデキナイとも答えられません。 (知ってるならやってみれば?ってふつー思いますよ) >マクロ そちらも実際にご自分の手を動かして,まずやってみたらどうでしょう。 ていうか,あなたがそのマクロで「一体何をしたい」のか不明なので,どんなマクロにしたらいいのか回答出来ません。 敢えて空想すると worksheets("Sheet2").range("B1:B48").formula= "=INDEX(excel|book2.xls!Target,ROW(B1))" みたいな事でしょうか。 お話しが広がりそうなので,この件は改めて何をしたいのかきちんと考えてから,新しいご相談として別途投稿して下さい。
お礼
keithin 様 ご回答ありがとうございます。 私の質問が言葉足らずで申し訳ございません。 私はVBA初心者で、書籍やネットを色々と参照しながらプロシージャを作成しています。そのため、プロシージャの作成に非常に時間がかかってしまいます。また、平日の9:00~15:00の間でしかデータベンダーとDDE接続してテストすることができないので、明日のテストに備えてあえて質問させていただきました。 言葉足らずで申し訳ありませんでした。 この度は、ご回答ありがとうございました。
お礼
keithin 様 ご回答ありがとうございます。 >敢えて2つエクセルを開いて運用しなければならない事情があってそうしてい>るのでしたら はい。そのような事情があります。 教えていただいた2つ目の方法なのですが、1つのセルが1秒間に複数回データ更新される時もあるので、今回は3つ目の方法でやってみたいと思います。そこで、質問なのですが、Excel(1)と(2)はそれぞれ同じデータベンダーとすでにDDEリンク接続しているのですが、そのような場合でも教えていただいた方法でExcel(1)と(2)をDDE接続できるのでしょうか? 私はExcelもVBAも初心者なので、もう一つお伺いしたいのですが、以下のプロシージャだけでDDE接続できるのでしょうか? ご回答よろしくお願いいたします。 worksheets("Sheet2").range("B1").value=INDEX(excel|book2.xls!Target,ROW(A1))