- ベストアンサー
WorkbooksとWorksheetsを簡単にActivateする方法
お世話になります。よろしくお願いいたします。 Excel 2003で複数のワークブック、ワークシートを以下の方法以外に簡素にActivateする方法ありませんでしょうか? Workbooks("ほげ.xls").Activate Worksheets("ほげほげ").Activate 複数の違うワークブック、ワークシートを何度も処理の途中でActivateする為、Workbooksと、Worksheetsを変数に格納し、変数.Activateのような事ができないかと考えているですが、方法がわかりません。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >複数のワークブック、ワークシートを以下の方法以外に どういうコードを書いているのか分かりませんが、あまり、そういう方向に考えないほうがよいと思います。 すでに開いているものなら、 Set wb = Workbooks("ほげ.xls") Set sh1 = wb.Worksheets("ほげほげ") Set sh2 = wb.Worksheets("ほげほげほげ") sh1.Activate sh2.Activate で済みますが、数多くあるものなら、こういうのは面倒です。最初に、ブックをオブジェクト変数に入れておけば、そのままActivate できるはずです。 '------------------------------------------- Dim org_wb As Workbook Dim dest_wb As Workbook Dim i As Integer Set org_wb = Workbooks("TEST_A.xls") Set dest_wb = Workbooks("TEST_B.xls") For i = 1 To 3 org_wb.Worksheets("Sheet" & i).Activate dest_wb.Worksheets("Sheet" & i).Activate Next i Set org_wb = Nothing Set dest_wb = Nothing '------------------------------------------- しかし、実際のマクロコードでは、このようなActivate やSelect を使うことは、まずありえません。そのまま値は取得できるので、そのまま、コンテナで取得すればよいです。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
こういう説明で判るのではないですか。 Sheet1とheet2,Sheet3,Sheet5というシートが現にあります。 Sheet2 のA1 aaa Sheet3 のA1 bbb Sheet5 のA1 ccc のデータが入っています(内容は何でも良い)。 ーー Sub test01() Dim sh1, sh2 As Worksheet Set sh1 = Worksheets("Sheet1") s = Array("Sheet2", "Sheet3", "Sheet5") For i = 0 To 3 - 1 Set sh2 = Worksheets(s(i)) sh1.Cells(i + 1, "A") = sh2.Cells(1, "A") Set sh2 = Nothing Next i End Sub ーーー 実行するとSheet1の A1 aaa A2 bbb A3 ccc となります。 ーーー 一度もActivateは使っていません。 実はSheet4がありますが、ここをActivateして実行してもOKです。 ーー ブックの場合もブック指定の部分が前に引っ付くだけです。 CurDirの中にあるブックなら、記述が簡単でしょう。 まずSet sh2 = Worksheets(s(i))のところを他ブックならどうなるかやってみてください。
お礼
ご返答ありがとうございます。 参考にさせていただきます
- hana-hana3
- ベストアンサー率31% (4940/15541)
下記のような感じでしょうか? 適当なプログラムに共通する処理を纏めてしまえば良いでしょう。 今回の場合、Call Job で呼び出し。 Sub test() Dim WB As Variant Dim WS As Variant Dim i As Integer WB = Array("hoge1.xls", "hoge2.xls") WS = Array("sheet1", "sheet2") For i = lbounb(WB) To UBound(WB) Workbooks(WB(i)).Activate Worksheets(WS(i)).Activate Call Job Next End Sub ---------------------------------------------------------- Array関数で一度に値を格納する http://www.officepro.jp/excelvba/array/index6.html
お礼
Arrayを使えばよかったのですね。 ありがとうございます。 For文で得に連続して開く事は考えていなかったのですが、大変参考になりました。 以下を試してみると インデックスが有効範囲にありません とエラーが出てしまいます。 Dim WB As Variant Dim WS As Variant Dim i As Integer Dim ii As Integer Workbooks("ほげ.xls").Activate Worksheets("ほげほげシート").Activate hoge = ActiveSheet.Range("A1").Value WB = Array("お試し.xls", hoge) WS = Array("Sheet1", "Sheet2") i = 1 ii = 1 Workbooks(WB(i)).Activate Worksheets(WS(ii)).Activate 'A1に他エクセルファイル名が絶対パスで入っており、MsgBox (WB(1))でファイル名が取得できているのですが、Activateできません。 よろしくお願いいたします。
お礼
ご解答ありがとうございます。 ファイル自体はそこまで数はないのですが、シートが多い為、以下の方法を使用させていただきました。 Set wb = Workbooks("ほげ.xls") Set sh1 = wb.Worksheets("ほげほげ") Set sh2 = wb.Worksheets("ほげほげほげ") sh1.Activate sh2.Activate ありがとうございました。