お世話になります。よろしくお願いいたします。
Excel 2003で複数のワークブック、ワークシートを以下の方法以外に簡素にActivateする方法ありませんでしょうか?
Workbooks("ほげ.xls").Activate
Worksheets("ほげほげ").Activate
複数の違うワークブック、ワークシートを何度も処理の途中でActivateする為、Workbooksと、Worksheetsを変数に格納し、変数.Activateのような事ができないかと考えているですが、方法がわかりません。
よろしくお願いいたします。
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できません。
よろしくお願いいたします。
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.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
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) エクセルvba シートを順次アクティブにするマクロ 3 2022/06/24 16:37
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 指定の条件に応じたセルの場所に〇印(図形)を描く 2 2022/11/08 15:26
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- 数学 単振り子とルンゲ・タック法 1 2022/07/15 00:05
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Access(アクセス) Access2016でフォーム内にExcelの複数シートを 表示させるイメージで複数テーブルの デー 1 2022/11/25 15:30
- Excel(エクセル) マクロを簡潔にしたい 6 2022/09/16 10:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA 別シートの複数の...
-
シャープのアクオス sh-m25 を...
-
excel:色付き文字の抽出と変換法
-
重複データの集計マクロについて
-
VBA 貼付先範囲(行)がいっぱ...
-
VBA別シートの最終行の下行へ貼...
-
[EXCEL]全てのチェックボックス...
-
Excel VBA元データから別シー...
-
Excel VBA インデックスの境...
-
WorkbooksとWorksheetsを簡単に...
-
エクセルVBAで 2種のリストを...
-
スマホ機種変更で旧機種のGoogl...
-
LAVIE Direct DT PC-GD298ZZAL...
-
外付けHDDをフローリングに落と...
-
ドコモの電話帳バックアップに...
-
拡張子「.HUF(.huf)」のファ...
-
au(MEDIASKIN)からiPhoneへの...
-
Docomo携帯メールをコピーした...
-
パソコンから携帯でフルうたを
-
自作した3pgかmp4ファイルを着...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel で行を指定回数だけコピ...
-
エクセルVBA 別シートの複数の...
-
シャープのアクオス sh-m25 を...
-
excelの差込印刷で可視セルだけ...
-
Excel VBA インデックスの境...
-
VBA:同じ文字列データの比...
-
エクセルVBAで 2種のリストを...
-
エクセル:VBAで月変わりで、自...
-
歯抜けの時間を埋めて行の挿入
-
エクセルVBAで SendKeys "{TAB}"
-
VBAで条件が一致する行のデータ...
-
VBA別シートの最終行の下行へ貼...
-
EXCELマクロで全シート対...
-
Excel VBAでシート内全体に非表...
-
VBA 貼付先範囲(行)がいっぱ...
-
VBAで複数シート選択
-
【VBA】UserForm1の中で使うワ...
-
【WORD差し込み印刷】複数レコ...
-
VBAで複雑な構成の転記
-
エクセルVBAでの日付順のデ...
おすすめ情報