• ベストアンサー

文字指定したフォルダのみ移動させたい

質問させていただきます。 フォルダ名の一部を指定して、他フォルダに一括移動させたくて苦戦しております。 具体例としまして。。。 c:\06010100001 c:\06010100002 c:\06010200001   ・   ・ とあるうちの、5,6文字めが"01"のものだけをd:\に移動させたいのです。 移動元フォルダ、移動先フォルダ、指定文字を設定し、フォルダ移動できるようなVBAを教えていただけると助かります。 宜しくお願いします。

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.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

dachs13
質問者

お礼

回答ありがとうございます。 おかげさまで、私が思い描いていたものの何倍、いや、何十倍も素晴らしいものとして、動きました。 これで手作業だと数日かかる作業が、早くに終わらせることが出来そうです。 本当にありがとうございました。

その他の回答 (2)

noname#246547
noname#246547
回答No.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

dachs13
質問者

お礼

回答ありがとうございます。 「cmd.exeからmoveを呼び出して~」というのは、考え付きませんでした。 勉強が不十分なので、本やWeb情報を元に、今後とも勉強していきます。

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.1

移動元フォルダ、移動先フォルダ、指定文字を設定し、フォルダ移動できるようなVBAに関して VBA単品では、出来ないでしょう。 API関数やバッチ処理などと組み合わせる必要があります。 API関数やバッチ処理に関する勉強をすることをお勧めします。

dachs13
質問者

お礼

回答ありがとうございます。 勉強が不十分で、教えて君になっていましたね。 反省して、今後はさらなる勉強に努めたいと考えます。

関連するQ&A

専門家に質問してみよう