
VBAでカレントフォルダ配下のフォルダに存在する指定したファイルを任意のフォルダにコピーするマクロを作成したいのですが、フォルダ(フルパス)とファイル名を指定してコピーするマクロしか作成できませんでした。ご教授いただきたいです。
【前提】
「SAMPLE.xlsm」が存在するフォルダをカレントフォルダにする。
【状況】
「C:\SAMPLE」にSAMPLE.xlsmが存在している。
下記のフォルダ構成図のような構成でファイルが格納されている。
【処理】
A列にコピーしたいファイルを列挙する。
カレントフォルダ(SAMPLE.xlsmがあるフォルダ)のサブフォルダに存在する、A列に列挙したファイルを任意フォルダにコピーする。(コピー先のフォルダはC1セルの値でパスを指定する)
A2~A●セルまでFor文でコピーを回す(空白セルになったらループを止める)
サブフォルダに指定したファイル以外のファイルがあっても指定したファイルのみをコピーできるようにする。(「C:\SAMPLE\AAA\AAA_04.c」はコピーしない)
フォルダ構成図
C:\SAMPLE
¦
¦---AAA
¦ ¦---AAA_01.c
¦ ¦---AAA_02.c
¦ ¦---AAA_03.c
¦ ¦---AAA_01.h
¦ ¦---AAA_02.h
¦ ¦---AAA_03.h
¦
¦---BBB
¦ ¦---BBB_01.c
¦ ¦---BBB_02.c
¦ ¦---BBB_03.c
¦ ¦---BBB_01.h
¦ ¦---BBB_02.h
¦ ¦---BBB_03.h
¦
¦---CCC
¦---CCC_01.c
¦---CCC_02.c
¦---CCC_03.c
¦---CCC_01.h
¦---CCC_02.h
¦---CCC_03.h

No.1ベストアンサー
- 回答日時:
こんばんは、
>「SAMPLE.xlsm」が存在するフォルダをカレントフォルダにする。
カレントフォルダとして他の処理に使われるのでしょうか?
ご質問の前提の場合、ThisWorkbook.Path (VBAが実行されているブックのパス)で
対応可能なので、ThisWorkbook.Pathにします。必要であればfolPath = ThisWorkbook.Pathを変更してください。
また、ThisWorkbook.Pathで不具合が発生する場合、ActiveWorkbook.Pathに変えてみてください。(過去の事例)
>A列にコピーしたいファイルを列挙する。
流石にコピーしたい情報は分かりません。添付図の様にすでに抽出されているものと考えています。
いくつか不明な点がありますが、こんな感じでどうでしょう。
SAMPLE.xlsmの標準モジュールに
Option Explicit
Sub sample()
Dim FSO As Object, f As Object
Dim AryF As Variant, i As Long
Dim folPath As String, exfol As String, Target As String
folPath = ThisWorkbook.Path '「SAMPLE.xlsm」が存在するフォルダ
exfol = Sheets(1).Range("C1").Text 'シート名が不明の為、インデックス1にしてあります。
Set FSO = CreateObject("Scripting.FileSystemObject")
AryF = Sheets(1).Range("A1:A" & Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row) 'シート名が不明の為、インデックス1にしてあります。A2~A●セルまでの値を配列に入れています。
On Error Resume Next '念のため
For i = 1 To UBound(AryF) '配列要素分ループ
For Each f In FSO.GetFolder(folPath).SubFolders 'サブフォルダすべてをループ
Target = f & "\" & AryF(i, 1)
If Dir(Target) <> "" Then FSO.GetFile(Target).Copy exfol & "\": Exit For 'あれば指定フォルダ内に保存
Next f
Next i
Set FSO = Nothing
MsgBox ("完了")
End Sub
A列セルのファイル名には拡張子を含めてください。例:hoge.xlsx hoge.png など
>C1セルの値でパスを指定する パスの最後に\は不要です。コード内で追加しています。例:C:\SAMPLE\hoge\huga
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- Excel(エクセル) Excel VBA 3 2023/04/22 10:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/01/26 09:50
- Excel(エクセル) excel 別のフォルダから列コピーする方法 8 2022/12/17 16:24
- Excel(エクセル) 1つのファイルを複数のフォルダにファイル名を【明日の日付】にして、コピーしたい 5 2022/12/13 20:11
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
- Excel(エクセル) 1つのファイルを複数のフォルダにファイル名を【明日の日付】にして、コピーしたい 5 2022/12/13 04:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
大量のフォルダからひとつのフ...
-
ファイルやフォルダのコピー、...
-
win10の「フォト」で、「次へ」...
-
一定のファイル数ごとにフォル...
-
バッチファイルでサーバーのフ...
-
一括でフォルダと同じ名前にフ...
-
MRI画像のCDR 家のパソコンで...
-
外付けのCD-RWが認識されない・...
-
leeyesでファイルの読み込みが...
-
Windows7のProgram Filesフォル...
-
エクスプローラが再起動すると...
-
ビルダーを使ってますがパソコ...
-
パソコンのフォルダー内のファ...
-
携帯動画を見ると必ずSMILとい...
-
Thunderbirdで社内共有フォルダ...
-
特定フォルダ内のファイルを自...
-
binフォルダーとは?
-
PCに画像取り込みができない
-
DVDメーカーをWin7から8.1へコ...
-
フォルダが削除できない場合の理由
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のフォルダからひとつのフ...
-
一括でフォルダと同じ名前にフ...
-
バッチファイルでサーバーのフ...
-
パソコンのフォルダー内のファ...
-
ファイルやフォルダのコピー、...
-
win10の「フォト」で、「次へ」...
-
Thunderbirdで社内共有フォルダ...
-
特定フォルダ内のファイルを自...
-
一太郎がイントラで開けません...
-
同名のフォルダを検索・削除したい
-
一定のファイル数ごとにフォル...
-
Teraterm scprecvの上書き確認...
-
「ファイルがオープンできませ...
-
名前の変更ができない動画ファイル
-
ビルダーを使ってますがパソコ...
-
ファイルのサイズを0にする or ...
-
PCのアプリケーションを別のPC...
-
binフォルダーとは?
-
virualboxで仮想マシンフォルダ...
-
DVD Flickを使用していてDVDを...
おすすめ情報