• ベストアンサー

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を実行することで、自動的に(処理したいこと)を実行してしまうようなものを作れますか。 また作るとしたらおおよそどんな風に作ればいいでしょうか。 ご回答よろしくお願いします。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.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

taktta
質問者

お礼

まだ試していませんが、今後これを 試してみようと思います。 イメージてきにはぴったしきます。 どうもお手数わずらわせどうもありがとうございました。

その他の回答 (1)

  • oji32
  • ベストアンサー率21% (38/180)
回答No.1

他のブックを開いてコピーしてというのは簡単にできます。 マクロを新たに追加するというのは、調べたことがありますが、 できないと考えられたほうがよいかと思います。

taktta
質問者

お礼

参考となる意見ありがとうございました。#2を試してみます。

関連するQ&A