

お世話になります。よろしくお願いいたします。
Excel 2003で複数のワークブック、ワークシートを以下の方法以外に簡素にActivateする方法ありませんでしょうか?
Workbooks("ほげ.xls").Activate
Worksheets("ほげほげ").Activate
複数の違うワークブック、ワークシートを何度も処理の途中でActivateする為、Workbooksと、Worksheetsを変数に格納し、変数.Activateのような事ができないかと考えているですが、方法がわかりません。
よろしくお願いいたします。
No.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 を使うことは、まずありえません。そのまま値は取得できるので、そのまま、コンテナで取得すればよいです。
ご解答ありがとうございます。
ファイル自体はそこまで数はないのですが、シートが多い為、以下の方法を使用させていただきました。
Set wb = Workbooks("ほげ.xls")
Set sh1 = wb.Worksheets("ほげほげ")
Set sh2 = wb.Worksheets("ほげほげほげ")
sh1.Activate
sh2.Activate
ありがとうございました。
No.2
- 回答日時:
こういう説明で判るのではないですか。
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))のところを他ブックならどうなるかやってみてください。
No.1
- 回答日時:
下記のような感じでしょうか?
適当なプログラムに共通する処理を纏めてしまえば良いでしょう。
今回の場合、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できません。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft 365 Basic サブスク...
-
ACCESS VBA でのエラー解決の根...
-
列が255以上のCSVファイルをAcc...
-
Accessのリンクテーブルのパス...
-
Accessのクエリで、replace関数...
-
「テキストデータで送ってくだ...
-
ACCESSでの、データの並び替え...
-
access2019の起動が遅い
-
Excelの質問
-
Accessのレポートについて
-
Accessフォームの配色テーマを...
-
Accessのクエリの印刷設定
-
アクセスで、実行時エラー3075 ...
-
レポートの印刷を一括ではなく...
-
Excelを開く時と閉じる時に一度...
-
Accessのルックアップ
-
Accessデータベースを開くと同...
-
Accessで選択クエリを作成中で...
-
Excel上から、Accessのマクロビ...
-
access2021 コンパイルエラーの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロで空白セルを詰めて...
-
Excel で行を指定回数だけコピ...
-
Excel VBA インデックスの境...
-
VBA:同じ文字列データの比...
-
excelの差込印刷で可視セルだけ...
-
エクセル:VBAで月変わりで、自...
-
VBAで条件が一致する行のデータ...
-
VBA 貼付先範囲(行)がいっぱ...
-
VBAでのシートの色が
-
複数ブックの複数セルの抽出教...
-
エクセルVBAで 2種のリストを...
-
【WORD差し込み印刷】複数レコ...
-
別シートから検索値に一致した...
-
Excelマクロ データが上書きさ...
-
ExcelVBA、印刷ページを事前に...
-
VBA別シートの最終行の下行へ貼...
-
エクセルでデータの検索
-
Excel VBAでシート内全体に非表...
-
[EXCEL]全てのチェックボックス...
-
VBA 最終行取得からの繰り返し貼付
おすすめ情報