こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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


宜しくお願い致します。

投稿日時 - 2009-07-29 10:15:54

QNo.5164601

困ってます

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

基本を述べます。
(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がお勧めですが、好みです。

投稿日時 - 2009-07-29 11:03:06

ANo.2

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

>教えていただいたやり方ですと、毎回ブック名が変わるので
>無理ですよね。
回答したコードではそうですね。
他に、自動で「ファイルを開くダイアログ」を表示させてユーザーにファイル(ブック)選ばせることも可能です。

>他にもアドインとか他に方法があるようでしたら
>その方法を教えていただきたかったです。
あぁ、そういうことですね。
他にも方法はあると思います。が、エクセルファイルを扱うのでしたら
Excelマクロを使う方法が分かりやすくていいんじゃないですかね。

投稿日時 - 2009-07-30 08:56:24

ANo.1

>1.マクロが記録されているBOOK1以外のBookを操作する方法。
マクロ内でそのbookを指定すればいいです。もちろん開いてないといけないですが。
(例)
[あああという名前のブックを開く]
Workbooks.Open Filename:="C:\happy\あああ.xls"
[あああというブックのテストというシートをコピー]
Workbooks("あああ.xls").Worksheets("テスト").copy
等など
自分のブックは、Thisworkbook.Worksheets(1).・・とかです。

>2.私以外の方が利用する為、Book1に保存したマクロから実行させる予定なのですが、Book1を毎回開いて実行させる方法がベストのやり方なのでしょうか。
Book1にマクロがあるのなら、Book1を開かずしてどうやって実行するのでしょうか?あなたが利用する場合はマクロが記述されているブックを開かずにマクロを実行できるということですか?

投稿日時 - 2009-07-29 10:50:49

補足

なんだか回答をいただいているうちに、わかってきました。
教えていただいたやり方ですと、毎回ブック名が変わるので
無理ですよね。
自分のブックは、Thisworkbook.Worksheets(1).なので、
自分以外開いているのブックの名を取得すればいいんですね。
そこに気がつきませんでした。

2他にもアドインとか他に方法があるようでしたら
その方法を教えていただきたかったです。/≧≦\

投稿日時 - 2009-07-29 22:28:56

あなたにオススメの質問