- ベストアンサー
Excel VBAで他のブックを選択する方法を教えてください。
こんにちは。VBA初心者です。 ブックを2つ開いた状態で、 マクロを保存してあるブック〔Book1〕から、 毎回ブック名が異なる[Book2]の選択されている2枚のシートを新しいブックに(仮Book3)コピーしたいのですが、どのように記述したらよいのでしょうか。(選択されるシートも毎回異なります。) 特に教えていただきたい部分は、 1.マクロが記録されているBOOK1以外のBookを操作する方法。 2.私以外の方が利用する為、Book1に保存したマクロから実行させる予定なのですが、Book1を毎回開いて実行させる方法がベストのやり方なのでしょうか。 マクロの記録では下記の感じになります。 Sub Macro4() Windows.Arrange ArrangeStyle:=xlVertical Windows("Book2.xls").Activate Sheets(Array("Sheet3", "Sheet4")).Select Sheets("Sheet4").Activate Sheets(Array("Sheet3", "Sheet4")).Copy End Sub 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
基本を述べます。 (1)一つのExcelプロセスには一つのApplicationがある。 (2)一つのApplicationは複数のブックを開ける。故にApplicationには Workbooksコレクションがある。(複数形に注意) (3)既存のワークブックを開くには上記コレクションに追加する。 Dim 既存 As Workbook '★単一オブジェクトなので単数形 Set 既存 = Workbooks.Open("C:\~\hoge.xls") (4)新しくワークブックを作るには上記コレクションに追加する。 Dim 新規 As Workbook Set 新規 = WorkBooks.Add 仮に既存から新規に2シートをコピーするとなると、以下のようになります。 既存.Sheets(Array("Sheet1", "Sheet2")).Copy After:=新規.Sheets(1) ポイントは次の4点です。 (1)既存ワークブックのパス名 (2)コピー元のシートの範囲 (3)コピー先の位置(例えば、先頭にコピーするとか・・・) (4)新規ワークブックの保存先のパス名 以上の点を解決できれば、Excelマクロ以外にもVBS、HTA等の方法で 処理することができます。個人的にはHTAがお勧めですが、好みです。
その他の回答 (2)
- winarrow07
- ベストアンサー率41% (143/346)
>教えていただいたやり方ですと、毎回ブック名が変わるので >無理ですよね。 回答したコードではそうですね。 他に、自動で「ファイルを開くダイアログ」を表示させてユーザーにファイル(ブック)選ばせることも可能です。 >他にもアドインとか他に方法があるようでしたら >その方法を教えていただきたかったです。 あぁ、そういうことですね。 他にも方法はあると思います。が、エクセルファイルを扱うのでしたら Excelマクロを使う方法が分かりやすくていいんじゃないですかね。
- winarrow07
- ベストアンサー率41% (143/346)
>1.マクロが記録されているBOOK1以外のBookを操作する方法。 マクロ内でそのbookを指定すればいいです。もちろん開いてないといけないですが。 (例) [あああという名前のブックを開く] Workbooks.Open Filename:="C:\happy\あああ.xls" [あああというブックのテストというシートをコピー] Workbooks("あああ.xls").Worksheets("テスト").copy 等など 自分のブックは、Thisworkbook.Worksheets(1).・・とかです。 >2.私以外の方が利用する為、Book1に保存したマクロから実行させる予定なのですが、Book1を毎回開いて実行させる方法がベストのやり方なのでしょうか。 Book1にマクロがあるのなら、Book1を開かずしてどうやって実行するのでしょうか?あなたが利用する場合はマクロが記述されているブックを開かずにマクロを実行できるということですか?
補足
なんだか回答をいただいているうちに、わかってきました。 教えていただいたやり方ですと、毎回ブック名が変わるので 無理ですよね。 自分のブックは、Thisworkbook.Worksheets(1).なので、 自分以外開いているのブックの名を取得すればいいんですね。 そこに気がつきませんでした。 2他にもアドインとか他に方法があるようでしたら その方法を教えていただきたかったです。/≧≦\