お世話になります。
エクセルのマクロでファイルを検索しコピーしたくいろいろ試しているのですが、うまくいきません。
やりたいこととしては、
C:\Users\〇〇\Desktop\□□
|-2018年1月-AAA.xlsx
| 555-BBB.xlsx ←このファイルをコピーしたい
|
|-2018年2月-CCC.xlsx
| DDD.xlsx
|
|-2018年3月-333-EEE.xlsx
| 111-FFF.xlsx ←このファイルをコピーしたい
|
|- :
|- :
|- :
|-2018年12月-
検索コピー.xlsxファイルのA4セルから下にファイル名(一部の場合あり)名前を記入し、
マクロを実行すると
C:\Users\☆☆☆\Desktop\☆☆☆ というフォルダに、検索で見つかったファイルをコピーしたいです。
例、
検索コピー.xlsxファイルのA4セルに「BBB」
検索コピー.xlsxファイルのA5セルに「FFF」 検索ファイルは増える場合があります。
マクロ実行
C:\Users\☆☆☆\Desktop\☆☆☆ フォルダに
555-BBB.xlsx
111-FFF.xlsx ファイルがコピーされる。
※検索するファイル名の一部は、BBBやFFFです。
※検索コピー.xlsxファイルにマクロを組みたいです。
※コピー先のフォルダは、もともとありますが、マクロ実行と共に新規にできてもかまいません。
※検索元のファイルは、コピー後消しません。
単一のファイルコピーや、フォルダ全部のコピーは何とか出来たのですが、階層をまたぐ場合やファイル名の一部を検索するのがうまくいきません、、、
分かりにくい説明で申し訳ございませんが、何卒よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
こんにちは
>ファイル名の一部を検索するのがうまくいきません、、、
とのことですので、その部分に関しての一例を。
検索のルールが今一つわかりませんが、ひとまず以下の様に仮定しました。
A列のセルに「BBB」とある場合、拡張子の「.xlsx」は固定と考えて、
ファイル名の後ろ8文字が「BBB.xlsx」のものを検索することにします。
「hogeBBB.xlsx」や「fugaBBB.xlsx」は該当しますが、「piyoBB.xlsx」や「hogeBBB.xlsm」は該当しないものとしています。
以下のサンプルは、A列のA4セル以降に記入されている文字列に相当するファイルをデスクトップフォルダ以下から検索し、B列に該当ファイルのパスを書き出すサンプルです。
該当するものが複数存在する場合は、ひとまず全て書き出すようにしてあります。
Sub SampleY3()
Dim baseP As String, fName As String, r As Long
baseP = CreateObject("WScript.Shell").SpecialFolders("Desktop")
For r = 4 To Cells(Rows.Count, 1).End(xlUp).Row
fName = Cells(r, 1).Text
If fName <> "" Then
Call fileSearch(baseP, fName & ".xlsx")
End If
Next r
End Sub
Sub fileSearch(path As String, tf As String)
Dim FSO As Object, folder, file
Dim rw As Long, n As Integer
Set FSO = CreateObject("Scripting.FileSystemObject")
n = Len(tf)
For Each file In FSO.getfolder(path).Files
If Right(file.Name, n) = tf Then
' 該当ファイルのパスをシート(B列)に書き出す
rw = Application.Max(Cells(Rows.Count, 2).End(xlUp).Row, 4)
If Cells(rw, 2) <> "" Then rw = rw + 1
Cells(rw, 2).Value = file.path
End If
Next file
For Each folder In FSO.getfolder(path).SubFolders
Call fileSearch(folder.path, tf)
Next folder
End Sub
もしも、こんな感じの抽出で良いのであれば、シートに書き出す代わりにファイルをコピーすれば良いことになりますが、同名のファイルが複数抽出されていたり、同名のファイルが既に存在していたりする可能性がありますので、コピーの際には事前にチェックして名前を変えたり、コピー処理をスキップするなどの対策が必要なように思えます。
お世話になります。
ご回答ありがとうございます。
試してみたところ、一部ファイル名を含むファイルのパスを書き出すことができました。
今後勉強しいろいろ試していこうと思います。
誠にありがとうございました!
No.1
- 回答日時:
ファイル自体全体を単独でコピーは、ホルダーを移動しても支障はないものと考えますが、(新しく開いたときに「マクロを有効にする」クリック操作は必要)
ファイルの一部やセルの中に移しこむということは無理だと考えます。
=コピーされ内容が変わったファイルには新しいマクロの定義の挿入が必要です。
早々のご回答誠にありがとうございます。
こちらの説明不足のようです、申し訳ございません。
ファイル自体全体を単独でコピーは、ホルダーを移動しても支障はないものと考えますが、(新しく開いたときに「マクロを有効にする」クリック操作は必要)
⇒コピーしたいファイル、555-BBB.xlsxや111-FFF.xlsxにはマクロは組んでおりません。
マクロを組むのは検索コピー.xlsxファイルのみ(場所はデスクトップです。)なのですが、その場合でも難しいでしょうか?
ファイルの一部やセルの中に移しこむということは無理だと考えます。
=コピーされ内容が変わったファイルには新しいマクロの定義の挿入が必要です。
⇒コピーするファイルの内容は、変更せず、ファイル名もそのままでコピーしたいです。
うまく説明ができているかわかりませんが、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 1つのファイルを3つのフォルダにファイル名を【明日の日付】にして、コピーをしたい 2 2022/12/21 17:43
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Excel(エクセル) 1つのファイルを複数のフォルダにファイル名を【明日の日付】にして、コピーしたい 5 2022/12/13 20:11
- Visual Basic(VBA) Excelのマクロについて教えてください。 1 2023/03/12 12:16
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/07/01 12:54
- Excel(エクセル) VBA ふたつの同じ様式シートのセルをコピーしたい 2 2023/03/08 15:28
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 12:30
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
現在のブックを閉じないで、マ...
-
エクセルで複数のコメントのサ...
-
バッチファイル 別ファイルにリ...
-
ファイルをコピーできない
-
アクセス クエリを別のファイ...
-
ExeclVBAユーザーフォームから...
-
エクセルのマクロについて教え...
-
Vba初心者です。下記のコード助...
-
エクセルのハイパーリンクがコ...
-
同じファイル名 上書きしないフ...
-
vb.net コピーの進捗をプログレ...
-
共有フォルダへのフォルダ作成...
-
frxファイルの役目
-
ワード 一部のページだけをpdf...
-
vbsでファイルやフォルダのコピ...
-
プロパティを含めずにこのファ...
-
バッチファイル XCOPYで上書き...
-
ファイルのコビーで転送速度が...
-
ExcelシートをコピーするとA4用...
-
ゴミ箱に移動するような削除を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで複数のコメントのサ...
-
エクセルのハイパーリンクがコ...
-
バッチファイル XCOPYで上書き...
-
バッチファイル 別ファイルにリ...
-
frxファイルの役目
-
ファイルサーバ上のファイルが...
-
バッチファイルのコピーで
-
Vba初心者です。下記のコード助...
-
xcopyでのバッチコピー方法でコ...
-
同じファイル名 上書きしないフ...
-
エクセルVBAで開いているファイ...
-
エクセル2010、図が大きすぎま...
-
vbsでExcelのシートをコピーす...
-
アクセス クエリを別のファイ...
-
bat 同名ファイルコピー時にリ...
-
[エクセル]コピーするとオブジ...
-
ワード 一部のページだけをpdf...
-
パワポでスライドをコピーでき...
-
FSO.CopyFileでのエラー無視方法
-
VBSで作成したフォルダにファイ...
おすすめ情報