• ベストアンサー

エクセルVBAで全てのサブフォルダ内にファイルをコピー

お世話になります。 サブサブフォルダが、100個くらい入ったサブフォルダがさらに20個くらいメインフォルダの中にあります。 エクセルのマクロで、全てのフォルダの中に、 メインフォルダにおいてあるファイルをコピーして入れたいのですが、 どなたかご教授ください。

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

  • ベストアンサー
  • kigoshi
  • ベストアンサー率46% (120/260)
回答No.1

メインフォルダの名前を1行目で定義しています。適宜変更して下さい。 「メインフォルダにおいてあるファイル」というのはエクセルファイルのみかどうか 不明でしたので、とりあえずどんなファイルでもコピーする事にしました。 エクセルファイルのみを対象にしたい場合は、 fName = Dir(MainDir)   の行を fName = Dir(MainDir & "*.xls")   に変えて下さい。 Const MainDir As String = "c:\main\" Dim fCnt, cpCnt As Integer Sub MainFileSelect() Dim fName As String fCnt = 0 fName = Dir(MainDir) ' fName = Dir(MainDir & "*.xls") Do Until fName = "" If (GetAttr(MainDir & fName) And vbDirectory) <> vbDirectory Then fCnt = fCnt + 1 Cells(fCnt, 1).Value = fName End If fName = Dir Loop Call MainFileCopy(MainDir) MsgBox (CStr(fCnt) & "個のファイルを合計" & CStr(cpCnt) & "回コピーしました。") End Sub Sub MainFileCopy(targetDir As String) Dim rIdx, dIdx, dCnt As Integer Dim sDir As String Dim sDirN(300) As String sDir = Dir(targetDir, 22) Do Until sDir = "" If (GetAttr(targetDir & sDir)) = 16 Then If (sDir <> ".") And (sDir <> "..") Then dCnt = dCnt + 1 sDirN(dCnt) = sDir End If End If sDir = Dir() Loop For dIdx = 1 To dCnt Call MainFileCopy(targetDir & sDirN(dIdx) & "\") Next If targetDir <> MainDir Then For rIdx = 1 To fCnt FileCopy MainDir & Cells(rIdx, 1).Value, targetDir & Cells(rIdx, 1).Value cpCnt = cpCnt + 1 Next End If End Sub

Rin-u_u
質問者

お礼

ありがとうございました。助かりました。

関連するQ&A

  • VBA サブフォルダ内のエクセルファイル転記

    VBAについてお尋ねします。 当方VBA初心者です。 やりたい事は下記です。 ・サブフォルダ(2階層目)に入っているエクセルファイルからマクロ実行ファイルにセルデータを転記 ・全てのサブフォルダを網羅 サブフォルダに対しての扱いが難しくて理解に困ってます。 サルプルなどありましたらいただけると幸いです。 よろしくお願いします。

  • バッチでサブフォルダ内のファイルも含めたコピー処理をするには

    DOSコマンドのコピーコマンドについての質問です。 指定されたフォルダ内のファイル全て(サブフォルダ内に格納されているファイルも全て)をc:\bkup\にコピーするバッチを組みたいのですがどのようにすればよいのでしょうか。 xcopy /y /e %1 c:\bkup\ とした場合、サブフォルダもコピー対象に入りますがサブフォルダ内のファイルの格納先がc:\bkup\サブフォルダ名\になってしまい、私の実現したい処理とは異なります。 サブフォルダ内のファイルもc:\bkup\にコピーするにはどうすればよいのでしょうか。 宜しくお願い致します。

  • VBAでフォルダにあるエクセルファイルを開く

    こんにちは このコードがうまく動かないのですが、 どこがいけないのかわからなく助けてください。 なおフォルダの中には******データ.xlsと言うファイルがあり、アスタリスク部分は日付が不規則に変化して上書きされるのです。 このファイルを開くマクロを作りたいのですが。 うまく行きません。 よろしくおねがいします。 Sub excelopen() ' ' Dim エクセル As String 'エクセル = Dir(ActiveWorkbook.Path & "\*データ.XLS") If エクセル = "" Then Exit Sub エクセル = ActiveWorkbook.Path & "\" & エクセル Workbooks.Open Filename:=エクセル End Sub

  • Excel VBAでサブフォルダ内のファイルを呼び出したい

    フォルダの下に複数階層のサブフォルダがあり、その下に複数のエクセルブックがあります。これらのブックのシート複数ですが、名前は統一されています。 これらのファイルを呼び出した上でのある特定の名前のシートを呼出し、それぞれ1枚のシートに上から順に貼り付けたいと考えています。 よろしくご教授お願いします

  • エクセルでフォルダとファイルを作りたい

    お世話になります。 エクセル2007で質問です。 下記のような表をエクセルで作り、A列の名称でフォルダを作り、 そのフォルダの中にすべて同じファイル名のテキストファイルを作り、 その内容をB列の文字としたいのですが、マクロなどでの作成方法を教えてくだい。 A列 B列 a1  ああああああ a2  いいいい a5  かかかかか いままで使っていたマクロはテキストのファイル名がすべてバラバラだった ので同じフォルダ内に書き出していましたが、変更があり同じファイル名で内容が 違うデータが必要となってしまいましたので、違う名称のフォルダの中に、 同じ名称のテキストデータを格納したいと思っています。 テキストデータの名称は何でもいいです。 作成するデータの数は決まっていなく、最大で1000くらいあります。 ぜひ、ご教授お願いします。

  • マクロでフォルダ内の全てのExcelファイルを開くには?

    Excelのマクロ機能で、マクロを実行すると、あるフォルダ内にある全てのExcelファイルを開くことってできますでしょうか?

  • サブフォルダを含めた最新のエクセルを取得したいです

    VBA初心者です。 ①サブフォルダを含めた最新更新日のエクセルファイルを取得したいです。 ②そして、最新更新日のエクセルファイルは、そのエクセルが入っていたフォルダの名前に変更し、別フォルダへコピーしたいです。 お手数ですが、ご教授ください。

  • サブフォルダのファイルごと「送る」ことができる手段ありますか?

    Aというフォルダのサブフォルダで A-A,A-B.A-Cというフォルダがあるとします。 その中には無数のファイルがフォルダ内にそれぞれあるとします。 Aという親フォルダを「送る」して、clipnameというソフトでサブフォルダA-A.A-B.A-Cの中の沢山のファイルの 絶対ファイル名を一気にコピーしたいんですが、 そういう感じで「送る」ができる手段はありますでしょうか? つまり、Aという親フォルダを送るしたら、サブフォルダ内のファイルを全て「送る」するというような挙動をしたいということです

  • サブフォルダ内の全てのテキストファイルを1発処理する方法

    Excel2007のVBAを使い、下記のようなマクロを作成しました。 (質問に必要そうな所だけ掲載しています。) Dim dir_name As String ' ディレクトリ名 Dim file_name As String ' ファイル名 Dim EffectiveRow As Integer ' 開始行数/Excel/Row(行) Dim ShellApp As Object ' SHDOCVW.DLL / MIC Dim oFolder As Object ' フォルダパス EffectiveRow = Range("A65536").End(xlUp).Row Set ShellApp = CreateObject("Shell.Application") Set oFolder = ShellApp.BrowseForFolder(0, "フォルダ選択", 1) dir_name = oFolder.items.Item.Path ChDir dir_name file_name = Dir("*.txt", vbNormal) Do Until file_name = "" EffectiveRow = EffectiveRow + 1 Call ImportText(file_name, EffectiveRow) file_name = Dir() Loop ShellApp.BrowseForFolderを使い、指定したフォルダを選択すると、 その中に有る、テキストファイル(.txt)を、全てExcelに書き込む というマクロを作成したのですが、もっと汎用性を高くするために、 下記の内容を実現したく思っています。 - ↓ 実現したい事↓ - - 状況 - *フォルダの中に、サブフォルダが複数有り、そのサブフォルダの中に、 テキストファイル(.txt)が複数入っている。 - 処理 - サブフォルダを格納している*フォルダを、ShellApp.BrowseForFolderで 選択し、一度でサブフォルダ内のテキストファイルを全てExcelに書き込 めるようにしたい。 上記のマクロから発展させて、このような処理を行う事は出来るでしょうか? また、どのようにすれば実現させることが出来るでしょうか? ご教授のほど、よろしくお願いします。m(_ _)m ※ [*フォルダ ] は同一フォルダです。

  • バッチファイルにてフォルダのみをコピーしたい

    たくさんのフォルダが有って、その下にもサブフォルダがあります。 また、フォルダの中にはファイルも存在します。 このような状況の中、サブフォルダもフォルダもコピーせず、フォルダのみをコピーしたいのですが、バッチファイルにて可能でしょうか?

専門家に質問してみよう