EXCEL VBAを利用して別ウィンドウでブックを起動する方法

このQ&Aのポイント
  • EXCEL VBAを使用して、A.xlsのセルをダブルクリックすると別のウィンドウでB.xlsのワークシートが開かれる方法を探しています。現在のVBAコードではA.xlsとB.xlsが同じファイルとして開かれてしまうため、両方のファイルを独立して表示したいと考えています。
  • A.xlsのセルをダブルクリックするとB.xlsの特定のワークシートが別ウィンドウで開かれるEXCEL VBAコードを作成しています。現在のコードではA.xlsとB.xlsが同じファイルとして開かれてしまうため、それぞれのファイルを別々のウィンドウで表示したいと考えています。
  • EXCEL VBAを使用してA.xlsのセルをダブルクリックすると別ウィンドウでB.xlsのワークシートが開かれるコードを作成しています。しかし、現在のコードではA.xlsとB.xlsが同じファイルとして開かれてしまい、画面下のタブを切り替えてファイルを確認する必要があります。
回答を見る
  • ベストアンサー

EXCEL VBAを利用して別ウィンドウでブックを起動する

エクセルファイル(A.xls)内のセル($A$1)をダブルクリックすることで、エクセルファイル(B.xls)のワークシート(1)を開くVBAを作成しています。 ここまでは出来たのですが、1つ問題があります。 上記VBAでは、A.xls と B.xls が1つのエクセルファイルとして開かれてしまいます。(表現が誤っていれば申し訳ないです) どういうことかと言いますと、A.xlsもしくは、B.xlsのどちらかを閉じると両方閉じてしまいます。また、A.xlsとB.xlsを画面上に並べて比較することができず、画面下のタブを切り替えてそれぞれのファイルを見なければなりません。 例えば、スタート→プログラム→MicroSoftOffice→EXCELを2回行えば、エクセルファイルが別ウィンドウでそれぞれ独立して立ち上がります。要は、A.xlsのセル($A$1)をダブルクリックした時にB.xlsはこのような状態で立ち上がってきて欲しいのです。 以下、作成途中のVBAコードの一部です。A.xlsのセル($A$1)をダブルクリックすると、独立したエクセルを開くことはできました。 Dim OP As Double   OP = Shell("EXCEL.EXE", vbMaximizedFocus) しかし、B.xlsのワークシート(1)はA.xlsと1つのファイルとして開かれてしまいます。 (例:A.xlsのセル($A$1)をダブルクリックすると、B.xlsと新規EXCELファイルの全部で3つの状態になります。) 目標は、A.xlsのセル($A$1)をダブルクリックすれば、B.xlsのワークシート(1)が開く。 A.xlsのセル($B$2)をダブルクリックすれば、B.xlsのワークシート(2)が開くです。 長くなりましたが、どうかご助言よろしくお願い致します。 【作成途中VBAコード】 Private Sub Worksheet_BeforeDoubleClick(ByVal target As Range, Cancel As Boolean) Dim OP As Double    Dim Bfile As String Bfile = target.Address Select Case Bfile Case "$A$1" OP = Shell("EXCEL.EXE", vbMaximizedFocus) Workbooks.Open ("C:\B.xls") Worksheets("ワークシート(1)").Activate Case Else End Select End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>A.xlsもしくは、B.xlsのどちらかを閉じると両方閉じてしまいます。 どんなコードで閉じているのでしょうか? 通常は個別に閉じることが出来ます。 >A.xlsとB.xlsを画面上に並べて比較することができず [ウィンドウ]-[整列] で並べて表示する事ができますよ。 コードは記録マクロでも取得できます。 --------------------------------------------------------------- CreateObject()を使えば、いくつでも別プロセスでエクセルを起動する事が出来ます。 VBからエクセルを操作する http://hanatyan.sakura.ne.jp/vbhlp/excel1.htm -------------------------------------------------------------- >目標は、A.xlsのセル($A$1)をダブルクリックすれば、B.xlsのワークシート(1)が開く。 A/Bのブックにコードを記入してくださいね。 下記を元に、希望のシートが開くようにコードを追加してみて下さい。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim c As Workbook If Target.Address = "$A$1" Then If Workbooks.Count >= 1 Then For Each c In Workbooks If c.Name = "B.xls" Then MsgBox "ブックは開いています。" End End If Next End If End If Workbooks.Open "B.xls" Windows.Arrange ArrangeStyle:=xlTiled End Sub

database_s
質問者

お礼

さっそくのご回答ありがとうございました。 わたくしの質問の書き方が悪かったので、少し違うご意見でした。 でも、知らなかったコードなどがあり、勉強になりました。 ありがとうございます。

database_s
質問者

補足

業務で使用できたらと思い質問させていただきました。 もう少し実現したいことを詳細に書きたいと思います。 A.xlsのセル($A$1)は、1号棟1階と入力されています。 A.xlsのセル($B$2)は、2号棟2階と入力されています。 B.xlsのワークシート(1)には、1号棟1階の地図が貼っています。 B.xlsのワークシート(2)には、2号棟2階の地図が貼っています。 A.xlsを開いている状態で、1号棟1階の地図が見たくなったとします。A.xlsのセル($A$1)をダブルクリックするとB.xlsのワークシート(1)が独立した別ウィンドウで開きます。お互いのファイルが独立しているので並べて両方見ることができます。 次に、この2つのエクセルファイルが開いている状態で、再びA.xlsのセル($B$2)をダブルクリックすると、今開いているB.xlsのワークシート(2)がアクティブになるということを実現したいのです。 A.xlsのセルをダブルクリックした時のアクションに2つの意味を持たしたいのです。1つは、B.xlsが開いてなければB.xlsを開いて目的のワークシートをアクティブにする。もう1つは、B.xlsが開いていれば、その中の目的のワークシートをアクティブにする。です。 ややこしいことを長々と書きましたが、もう少し自身でも考えたいと思います。ご協力お願いします。

関連するQ&A

  • Excel 2010 VBAで教えてください。

    Excel 2010 VBAで教えてください。 Doubleの配列 Dim A(100) as double に ワークシート "Sheet1" セル A1:A100 の値を一発(For loop等を利用しない) で読み込むにはどうすればよいのでしょうか。 同じく、 Doubleの配列 A(100)を ワークシート "Sheet2" セル B1:B100 に一発で書き出すのはどうすればよいのでしょうか。  Variantにて Dim A as Variant では  A = Sheets("Sheet1").Range("A1:A100") で 読み込めました。 また Sheets("Sheet2").Range("B1:B100")で書き込みできましたが、double等でどうすれば良いのか知りたいです。

  • エクセルVBAのエラー

    よろしくお願いします。 VBA初心者のものです。 下記のコードを作成しましたが、 アプリケーション定義?がされていません というエラーが出ます。 わかりやすく教えていただけないでしょうか。 修正方法を教えてください。 0901名簿.xlsという名前の ファイルAのsheet1の 情報(ファイルBのセルBD1に日付4桁が記入されている)を ファイルBのセルA1の情報を元にファイルBのセルB1に抽出したい Sub 関数の挿入() Dim i As Long Dim あ As String Dim い As String Dim う As String あ="=VLOOKUP(A1,[" い=Range("BD1") う="名簿.xls]Sheet1!$F:$I,1,0)" For i = 2 To 50 Range("A" & i )= あ & い & う Next i End Sub

  • EXCEL VBAで別ファイル作成

    エクセル97です。 エクセルファイル AAA.xls のすべてのワークシートのうち、セルA1に TRUE がはいっているもの、(枚数はそのときにより不定です。)のみをコピーして、別のエクセルファイルを作成したいのです。 その際、新しいファイルに貼り付けるのは書式と値のみで、シート名は 元ファイルのシート名と同じにしたいのです。 どのようなVBAを書けばよいかご教示ください。 (AAA.xls にはワークシート以外にグラフシートやダイアローグシートが入っています。)

  • excel vba 配列の一部 一気に書き出し

    Excel VBAの配列の一部分をワークシートのセルに一気に書き出す方法を教えてください。 Dim A(12000,100) as double があります。 この中の A(1 ~ 12000 , 10) を ワークシートの cells(11,3) へ一気に縦方向に書き出したいのですが(B11から縦方向)、やり方を教えていただけないでしょうか。 cellsとしているのは、あとで 11,3 などを変数で指定したいためです。 doubleでダメな場合は、variantでもOKです。 よろしくお願いします。

  • 自作DLLをエクセルVBAで使用したい

    こんにちは。 自作DLLをエクセルVBAで使用したいのですが、知識不足でうまく動かせません。どうぞお知恵をお貸しください。 例えば足し算をするCのプログラムを以下のように作ります。ファイル名は"wa.c"とします。 #define EXPORT __declspec(dllexport) __stdcall EXPORT double wa(double a,double b) { return(a+b); } これをコンパイルして、DLLファイル"test.dll"を作ります。 gcc -shared -o test.dll wa.c エクセルVBAのモジュールには次のように記述しました。 Declare PtrSafe Function wa Lib "test.dll" (ByVal a As Double, ByVal b As Double) As Double ここで作成した関数をワークシート関数として呼び出したいのですが、ワークシート上での返り値は常にゼロになってしまいます。例えば、ワークシートのセルに"=wa(1.2,3.5)"と記入すると、"4.7"を返してほしいところですが、ゼロとなってしまいます。ワークシート関数として正しく動作させるにはどうしたらよいでしょうか? ちなみに、この関数をエクセルVBAのサブルーチンで使うことはできます。例えばこんな感じです。 Sub test() x = 1.2 y = 3.5 Call MsgBox(wa(x, y)) End Sub また、上記の"test.dll"を他のCのプログラムから呼び出すことも正しくできます。 なお、64bitのエクセルを使っています。Cのコンパイラも64bitです。 どうぞよろしくお願いいたします。

  • EXCEL VBA 別ブックから貼り付け

    お世話になります。 A、Bという2つのブックがあります。 A.xls データファイル B.xls 処理実行ファイル Bブックを開いてSheet1に置いてあるボタンを押すとファイル洗濯ダイヤログが出てきて、そこで指定したBブックをsrtPathに格納(シートは1つだけ)のBブックのA1から全データをAブックのSheet1に貼り付けたいのです。 下記VBAを書いてみましたがエラーになってうまく動きません。 Workbooks(strPath).Range("A1").Copy ActiveWorkbooks.Worksheets("Sheet1").Range("A1").PasteSpecial どなたが解決方法をご教授いただけませんでしょうか。 よろしくお願い致します。

  • Excel VBA ブックが本当に閉じられた時だけ別のブックを閉じたい

    Excel VBA ブックが本当に閉じられた時だけ別のブックを閉じたい A.xls B.xls と二つのブックがあります。 A.xlsが閉じられる時、B.xlsも同時に閉じたいです。 A.xlsに以下のマクロを入れました。 Private?Sub?Workbook_BeforeClose(Cancel?As?Boolean) ?Workbooks("B.xls").Close?SaveChanges:=False End?Sub 問題はA.xlsが保存してない場合、「A.xlsへの変更を保存しますか?」というメッセー ジが 出てきますが、そこでキャンセルを押された場合でもB.xlsが閉じられてしまいます。 A.xlsが本当に閉じられた時だけB.xlsを閉じたいのですが そのようなことは可能でしょうか?

  • Excel VBA別ブックのシートをコピーするには

    Excel2010のVBAで別ブックのシートをコピーしてくる方法 Excelファイル(C:\test\BOOK2.xls)のシート名が TESTというシートを自分のExcelファイル(C:\doc\BOOK1.xls)に コピーするにはどのように記述すればよいのでしょうか。 ・コピー先:自分のExcelファイル(C:\doc\BOOK1.xls)  VBAのコードがあるファイルです ・コピー元:C:\test\BOOK2.xlsのTESTシート  なお、TESTシートを持つ同じ名前(BOOK2.xls)のファイルが  別フォルダにもあります   Workbooks( )の引数にファイル名(BOOK2.xls)は指定できるのですが、 フルパス名(C:\test\BOOK2.xls)で指定できないので困っています。

  • エクセルVBAで出来ますか??

    はじめまして。 私の質問を読んで下さりありがとうございます。 上司にエクセルで少々複雑な?仕組みを作るように指示されたのですが、私自身はエクセルに詳しくはなく、社内にも詳しい人がいなくて困っています。 「Excel VBA パーフェクトマスター」という本を購入して勉強を始めたのですが、あまりに情報が多すぎてどこを参考にすればよいのかすら分かりません・・・。 来週末までに作らないといけないため休日返上でお仕事しながら勉強していますが、さっぱり分からなくて泣きそうです・・。 エクセルVBAに詳しくて親切な方がいらっしゃいましたら、無理のない範囲で構いませんので、どうか教えて頂けないでしょうか。宜しくお願い致します。 前置きが長くなってしまいましたが、具体的には以下のような処理はどうすれば良いのかが分かりません。 (1) 「Sheet1」のセル[A2]をダブルクリックすると「Sheet3」が表示される。 (2) 「Sheet3」のセル[D5]をダブルクリックすると「Sheet2」のセル[C2]の値(文字か数字)が「Sheet1」のセル[A2]と「Sheet4」のセル[B5]に表示され、更に「Sheet5」のセル[F10]の数値が「Sheet1」のセル[N5]に表示される。 (3) 上記の一連の処理が完了すると「Sheet1」が表示される。(「Sheet1の画面に戻る) 以上のような処理を複数組み合わせればできそうなのですが、このような事はエクセルVBAで出来るでしょうか? (私には出来るのか出来ないのかすら分かりません。命令した上司も分かってないと思います。) 出来るか出来ないかだけでも結構なので、どうか教えてください。 もし可能なら、具体的なアドバイスを頂けると、とても助かります。 どうか宜しくお願い致します。

  • エクセルVBAで別のファイルのセルの中身を表示したい

    エクセルVBAを使って別のファイルのセルの中身を表示させようとしているのですが思うように出来ません。 イメージとしては、シートのA列に名前、B列に点数が入力されている「テスト.xls」というファイルがあるのですが、 この「テスト.xls」のB列に入力されている点数が100~80に該当する名前を「優.xls」というファイルに表示させていきたいというものです。 つたない質問文で申し訳ありませんが、 どなたか回答よろしくお願いします。