自分と同じ階層の、特定のエクセルのみシートを全コピーする
月例会でバラバラに提出された報告資料を、総括ファイルにワンタッチでまとめるvba。
これで毎回ブックを開いて、シートのコピーをしなくてよいわけだ。
' 同じ階層の、特定のエクセルファイルのシートを結合する ' このvbaで発生するいかなる問題に対して、私は責任を持ちません。 ' コピペは自己責任でお願いします。 Private Sub cmdSum_Click() ' カレントパスの取得 Dim curPath As String curPath = ThisWorkbook.Path 'MsgBox (curPath) ' 配下のファイルを取得 Dim objFS As Object Set objFS = CreateObject("Scripting.FileSystemObject") Dim objDir As Object Set objDir = objFS.GetFolder(curPath) ' 目的のエクセルファイルならシートをコピーする ' もしマージ資料が増えたら、ここに追記していけばよい。 Dim tgt(2) As String tgt(0) = "@001_資料1.xls" tgt(1) = "@002_性能2.xls" tgt(2) = "@003_性能3.xls" Dim i As Integer For i = 0 To UBound(tgt) ' 対象ファイルが存在しない場合は、読み飛ばすか確認 If (objFS.FileExists(curPath + "\" + tgt(i)) = True) Then ' エクセルファイルを開いてシートをコピーする Dim wb, wbBase As workBook Set wb = Workbooks.Open(Filename:=curPath + "\" + tgt(i), ReadOnly:=True) Set wbBase = Workbooks("総括.xls") ' 総括ブックの、シート末尾に順次追加する Dim j, wbBaseSheetsCnt wbBaseSheetsCnt = wbBase.Sheets.Count For j = wb.Sheets.Count To 1 Step -1 wb.Sheets(j).Copy after:=wbBase.Sheets(wbBaseSheetsCnt) Next wb.Close Else If (MsgBox(tgt(i) + "が見つかりません。続行しますか?", vbYesNo) = vbNo) Then MsgBox ("処理を中断しました") Exit For End If End If Next ' 後始末 Set objFS = Nothing End Sub
肝は、総括ブックにシートを追加するときの順番。
末尾のシートから、総括ブックのシート末尾に追加しないと、、シートの順番がごちゃごちゃになる。