- ベストアンサー
XCELのVBAマクロで次のことが実行できますか。
XCELのVBAマクロで次のことが実行できますか。 (前提)WINDOWSで (1)MYDOCのフォルダAにExcelファイルA1.xlsからA9.xlsまで9個のファイルと、もう一つマクロBBの入ったExcelファイルB.xlsがあります。 (2)各Ai.xlsには、Aisheet(i=1カラ9)と名前のsheetが1つのみあります。 (処理したいこと) A1.xlsを開き、A1sheetを、B.xlsへcopyし、そのシートに対してマクロBBという処理を実行します。 続いて同様にA2.xlsを開き、A1sheetを、B.xlsへcopyし、そのシートに対してマクロBBという処理を実行します。 以下A9まで実行したい。 (質問)Bのマクロに新たにCCというマクロを作り、CCを実行することで、自動的に(処理したいこと)を実行してしまうようなものを作れますか。 また作るとしたらおおよそどんな風に作ればいいでしょうか。 ご回答よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
できるか? と聞かれれば、「できます」が回答になります 例えばマクロCC、BBは以下のようになるでしょう。 動作テストはしていませんし、質問者さまのVBA習熟度もわかりませんので、あくまで「ご参考まで」の回答になりますが… Sub cc() Const myPath As String = "D:\MYDOC\" Const trgSheet As String = "A1sheet" Dim wbList Dim idx, sCnt As Integer Dim psw As Boolean Dim wb As Workbook wbList = Split("A1,A2,A3,A4,A5,A6,A7,A8,A9", ",") ’ブックの数だけ繰り返し For idx = 0 To UBound(wbList) psw = False For Each wb In Workbooks ' 各ブックが開いているかチェック If wb.Name = wbList(idx) & ".xls" Then psw = True Exit For End If Next wb ’開いていないときはそのブックを開く If psw = False Then Workbooks.Open Filename:=myPath & wbList(idx) & ".xls" End If ’処理対象シートをB.XLSにコピー sCnt = Workbooks("B.xls").Worksheets.Count ActiveWorkbook.Sheets(trgSheet).Copy _ after:=Workbooks("B.xls").Worksheets(sCnt) ’コピーしたシート(アクティブシート)に対して BBマクロを実行 Call bb ' 開いていなかったブックは閉じる(開いていたブックはそのまま) If psw = False Then Workbooks(wbList(idx) & "xls").Close False End If Next idx End Sub Sub BB() ' このマクロをCallするとき処理対象シートがアクティブに ' なっている。だから ' ActiveSheet.Range("A1").value = ××× ' のように必ずアクティブシートを明示的に記述して処理を書くこと End Sub
その他の回答 (1)
- oji32
- ベストアンサー率21% (38/180)
他のブックを開いてコピーしてというのは簡単にできます。 マクロを新たに追加するというのは、調べたことがありますが、 できないと考えられたほうがよいかと思います。
お礼
参考となる意見ありがとうございました。#2を試してみます。
お礼
まだ試していませんが、今後これを 試してみようと思います。 イメージてきにはぴったしきます。 どうもお手数わずらわせどうもありがとうございました。