分かる方教えてください。 現在EXCELのVBAでフォルダ内のEXCELファイル全てを1つのシートに統合するマクロを組もうとしてます。
分かる方教えてください。 現在EXCELのVBAでフォルダ内のEXCELファイル全てを1つのシートに統合するマクロを組もうとしてます。 各ファイルにシートが何種類か入っており、統合したいのは見出し色が黄色のシートだけになります。 色々と調べてみたのですが、シートを指定してPDF統合のマクロはあるのですがそれを使ってもうまくできない上、ネットのEXCELVBAのシート指定方法という中にタブ色指定というのが表示されてないのですが、もしかしてPDF化以外はタブ色指定はできないのでしょうか? やりたい事は、ボタン1プッシュでそのVBAファイルが入ってるフォルダの全てのEXCELファイルの黄色タブだけ新しいbookの1つのシートに上から順に統合、数式は違う色のシートから読み込んでる為、黄色を読み込むと壊れるので値として貼り付け。 これらを同時にやりたいのですが知識が無いので1プッシュでは無理だと判断したので、とりあえず全ファイルの黄色のシートだけ値として1bookに抽出(1シートに統合じゃなくていいので)するコードがあれば教えて頂きたいです。 ちなみに今作った統合するコードはこれです。 Sub フォルダ内の全ブックを1ブック化するマクロ() Dim filePathList() As String Dim fileName As Variant Dim i As Integer: i = 0 '同フォルダ内のExcelファイルを走査してリストを作ります fileName = Dir(ThisWorkbook.path & "\" & "*.xls*") Do While fileName <> "" If (fileName <> ThisWorkbook.Name) Then '自分は含めない ReDim Preserve filePathList(i) filePathList(i) = ThisWorkbook.path & "\" & fileName 'フルパスで i = i + 1 End If fileName = Dir() Loop '対象が無かったらやめます If (i = 0) Then Exit Sub End If '1つ目のブックに全部移動します Dim filePath As String Dim targetBook As Workbook Dim tmpBook As Workbook For i = LBound(filePathList) To UBound(filePathList) filePath = filePathList(i) If (i = 0) Then Set targetBook = Workbooks.Open(filePath) Else Set tmpBook = Workbooks.Open(filePath) Sheets().Move after:=targetBook.Sheets(targetBook.Sheets.Count) '末尾に移動 End If Next i End Sub 当然シート指定してませんので全てのシートが数式の状態で統合されます。 なので黄色以外のシートを削除すると数式が入ってるセルは死にます。 黄色シートのみPDF化する時に使ったコードはこちらです。 'すべてのシートをループ For i = 1 To Sheets.Count 'シートタブ黄色で条件分岐 If Sheets(i).Tab.Color = 65535 Then Worksheets(i).Select Activate これを合わせてもエラーばっかが出て作れないので、他にやり方があるのであればどなたかわかる方教えて頂きたいです。 よろしくお願いします。
Visual Basic | Excel・89閲覧・25
ベストアンサー
ファイルをループで順番に開く シートをループでタブ色を確認 黄色だったら末尾にCopy 値に直す 次のシートへ 次のブックへ という流れならば、こんな感じになります。 Sub Sample() Dim f As String, fld As String Dim sh As Worksheet, wb As Workbook Application.ScreenUpdating = False With ActiveWorkbook fld = "D:\VBA\Sample\Excel\data" f = Dir(fld & "\*.xlsx") Do While f <> "" Set wb = Workbooks.Open(fld & "\" & f, ReadOnly:=True) For Each sh In Worksheets If sh.Tab.Color = 65535 Then sh.Copy After:=.Sheets(.Sheets.Count) ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value End If Next sh wb.Close False f = Dir() Loop End With Application.ScreenUpdating = True MsgBox "処理完了" End Sub
お早い回答ありがとうございます。 まさに抽出したいデータそのものだったのですが、もう一つ教えて頂きたい事が出てきました。 コピーされた時に元データが外部のデータにリンクついていまして、リンク先の名前の重複みたいなタブが個数分出現するようになりました。 はい すべて いいえ で、はいやすべてを選択しても何十回も出現するのですが、コピーした際にそれらリンクを削除して出てこないようにするマクロを先ほどの中に組み込む事は出来ますか? 調べてみて、そういったマクロがあったみたいなのですが、少し長文で尚且つどこに入れ込んだらいいのかさっぱりで困ってます。 何度も申し訳ないですがお願いいたします。
質問者からのお礼コメント
ド素人で全く分かっていなかったのに何度もわかりやすく教えて頂き有難う御座いました。 本当に助かりました。
お礼日時:7/1 14:41