- ベストアンサー
文字指定したフォルダのみ移動させたい
質問させていただきます。 フォルダ名の一部を指定して、他フォルダに一括移動させたくて苦戦しております。 具体例としまして。。。 c:\06010100001 c:\06010100002 c:\06010200001 ・ ・ とあるうちの、5,6文字めが"01"のものだけをd:\に移動させたいのです。 移動元フォルダ、移動先フォルダ、指定文字を設定し、フォルダ移動できるようなVBAを教えていただけると助かります。 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでどうでしょうか。 Sub MoveFolders() Dim Shell As Object, FromPath As Object, ToPath As Object Dim FSO As Object, FolderObj As Object, F As Object Dim CondStr As String Set Shell = CreateObject("Shell.Application") Set FromPath = Shell.BrowseForFolder(0, "異動元フォルダを選択してください", &H11) If FromPath Is Nothing Then Exit Sub Set ToPath = Shell.BrowseForFolder(0, "異動先フォルダを選択してください", &H11) If ToPath Is Nothing Then Exit Sub CondStr = InputBox("移動するフォルダ名の条件を指定してください") If CondStr = "" Then Exit Sub Set FSO = CreateObject("Scripting.FileSystemObject") Set FolderObj = FSO.GetFolder(FromPath.Items.Item.Path) For Each F In FolderObj.SubFolders If Mid(F.Name, 5, 2) = CondStr Then FSO.MoveFolder F.Path, ToPath.Items.Item.Path & "\" & F.Name End If Next Set FolderObj = Nothing Set FSO = Nothing Set Shell = Nothing Set FromPath = Nothing Set ToPath = Nothing End Sub
その他の回答 (2)
Dir関数でディレクトリを取得して、 cmd.exeからmoveを呼び出して移動はどうでしょう? Const CMDPATH = "\windows\system32\cmd.exe /C " Dim fileName As String fileName = Dir("c:\temp\????01?????", vbDirectory) While fileName <> "" Shell (CMDPATH & """move c:\temp\" & fileName & " c:\temp2""") fileName = Dir() Wend
お礼
回答ありがとうございます。 「cmd.exeからmoveを呼び出して~」というのは、考え付きませんでした。 勉強が不十分なので、本やWeb情報を元に、今後とも勉強していきます。
- Nayuta_X
- ベストアンサー率46% (240/511)
移動元フォルダ、移動先フォルダ、指定文字を設定し、フォルダ移動できるようなVBAに関して VBA単品では、出来ないでしょう。 API関数やバッチ処理などと組み合わせる必要があります。 API関数やバッチ処理に関する勉強をすることをお勧めします。
お礼
回答ありがとうございます。 勉強が不十分で、教えて君になっていましたね。 反省して、今後はさらなる勉強に努めたいと考えます。
お礼
回答ありがとうございます。 おかげさまで、私が思い描いていたものの何倍、いや、何十倍も素晴らしいものとして、動きました。 これで手作業だと数日かかる作業が、早くに終わらせることが出来そうです。 本当にありがとうございました。