フォルダの中にある複数のサブフォルダを一度に移動先フォルダに移動させたいと考えています。いろいろ参考にして、下のようにコードを用意しています。これで移動前のフォルダを指定した後、移動後のフォルダをしていして、移動することができました。ただしこれだと一つ一つのフォルダについて選択しなくてはならず、理想とはいえません。
改良して次の点を付加したいのですが、どのようにするのかわからずつまずいています。
(条件)
・移動先のフォルダの中にはサブフォルダがある階層。
・フォルダ名は英数字6~9文字
追加したい点は
1.一度に「移動前」のフォルダ内のサブフォルダを「移動先」フォルダの中に移動する。
2.名前が競合した場合は、「移動先」フォルダの中にすでにあるサブフォルダの中に移動する
という機能を付加したいのですが、行き詰っています。お知恵を拝借できないでしょうか?
Sub FolderMove()
Dim SourcFolderSpec, DestFolderSpec As String
Dim SourcFolder_Object, DestFolder_Object As Object
Dim FileNamePath As Variant
SourcFolderSpec = FolderPath
If SourcFolderSpec = "" Then
End
End If
DestFolderSpec = FolderPath
If DestFolderSpec = "" Then
End
End If
Set SourcFolder_Object = CreateObject _
("Scripting.FileSystemObject").GetFolder(SourcFolderSpec)
DestFolderSpec = DestFolderSpec & "\"
SourcFolder_Object.Move DestFolderSpec
End Sub
No.4ベストアンサー
- 回答日時:
こんにちは。
#3 です。#Const MYCMD1 As String = "CMD /C MOVE " '末尾は半角スペースを開>ける
これは、MS-DOS(コマンドプロンプト)のMOVE コマンドで行っています。
この方法が、一番早いはずです。
Win9x 系では、COMMAND.COM /C としていました。
#中身は、ショートネームで実行されています。
コマンドプロンプト上で、8.3 形式のファイル名で収まらないと、以下のようになるはずです。
"Stock Charts with Added Series.htm" (ロングネーム)
↓
"STOCKC~1.HTM" (ショートネーム)
ということです。
No.3
- 回答日時:
こんにちは。
ご説明の意図に見えない部分がありますが、こんな感じはどうかな?
>2.名前が競合した場合は、「移動先」フォルダの中にすでにあるサブフォルダの中に移動する
ただし、一回限りです。中身は、ショートネームで実行されています。
Win 9x 系は不可(変更は可能)
'-------------------------------------
Sub MoveDirectries()
Dim SourceFolder As String
Dim SourceDir As String
Dim DestFolder As String
Dim DestDir As String
Dim ArDirs() As String
Dim FOLname As String
Dim i As Integer
Dim v As Variant
Dim ret As Integer
'Win 2000以上
Const MYCMD1 As String = "CMD /C MOVE " '末尾は半角スペースを開ける
SourceFolder = ActiveWorkbook.Path & "\" 'ベースのフォルダ(元)\ は必ず付ける
DestFolder = ActiveWorkbook.Path & "\" 'ベースのフォルダ(先)\ は必ず付ける
SourceDir = SourceFolder & "Test1Fold\" '末尾に\ は付けなくてよい
DestDir = DestFolder & "Test1AFold\"
'最終フォルダに \ があったら省く
If Right(SourceDir, 1) = "\" Then SourceDir = Mid$(SourceDir, 1, Len(SourceDir) - 1)
If Right(DestDir, 1) = "\" Then DestDir = Mid$(DestDir, 1, Len(DestDir) - 1)
ReDim Preserve ArDirs(i)
FOLname = Dir(SourceDir & "\", vbDirectory)
Do While FOLname <> ""
If FOLname <> "." And FOLname <> ".." Then
If (GetAttr(SourceDir & "\" & FOLname) And vbDirectory) = vbDirectory Then
ReDim Preserve ArDirs(i)
ArDirs(i) = FOLname
i = i + 1
End If
End If
FOLname = Dir
Loop
'フォルダの下のフォルダを作るのは一回のみ
For Each v In ArDirs()
If Dir(DestDir & "\" & v, vbDirectory) = "" Then
ret = Shell(MYCMD1 & """" & SourceDir & "\" & v & """" & " " & """" & DestDir & """")
ElseIf Dir(DestDir & "\" & v & "\" & v, vbDirectory) = "" Then
ret = Shell(MYCMD1 & """" & SourceDir & "\" & v & """" & " " & """" & DestDir & "\" & v & """")
End If
Next v
End Sub
この回答への補足
ありがとうございました。これはすごいですね。ためさせていただいたのですが、うまくいきました。
初めて聞く技がたくさんあり、少し調べたのですが、よくわかりませんでした。
>中身は、ショートネームで実行されています。
>Const MYCMD1 As String = "CMD /C MOVE " '末尾は半角スペースを開>ける
この部分がまったくわかりません。どのようなことをしているのでしょうか?簡単で結構なので教えていただけると助かります。
No.2
- 回答日時:
Windows の動作としては移動先に同名のフォルダがある場合、通常
ユーザーに判断を仰ぐか、または上書きします。
> 2.名前が競合した場合は、「移動先」フォルダの中にすでにある
> サブフォルダの中に移動する
この仕様だと、
> 「移動先」フォルダの中にすでにあるサブフォルダの中
に再度同名フォルダがある場合、さらに深い階層にフォルダを移動
させることになるのでしょうか?
Windows のパス長の制限に引っかかりそうですから、あまり現実的
ではないと思いますが....
参考:Windows のファイル名長さの制限
・Windows 9x 系 絶対パスを含めて 255 バイト
・Windows NT 系 全角半角に関わらず 255文字 まで
※厳密には 260文字まで予約されているが、エクスプローラ
からは、255文字までにか入力できない
この辺はどのようにお考えですか?
No.1
- 回答日時:
条件のなかの「移動先のフォルダの中にはサブフォルダがある階層」の意味が今一歩理解できていませんが。
とりあえず「移動」ではなくて「複写」して元を「削除」という手順ではいかがでしょう。
具体的には最後の1行
SourcFolder_Object.Move DestFolderSpec
を
SourcFolder_Object.Copy DestFolderSpec
SourcFolder_Object.Delete
にすると良いように思います。
ただし、同名のファイルがあったときは上書きされると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Excel(エクセル) 【VBAファイル移動】2つのマクロを順に実行。1つ目のマクロが実行不可⇒2つ目が実行不可となる件 2 2022/07/29 12:17
- Excel(エクセル) 【マクロ】ファイルを古い順に、1個ずつ移動する 1 2022/09/06 20:30
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
- Excel(エクセル) マクロのコードを、少しでも削って短くしたい 3 2022/08/30 07:46
- Android VBA、フォルダのパスに環境文字 ㉑ があり、VBAが機能しません。 2 2022/07/27 09:16
- Excel(エクセル) 2つのマクロを連続して動かしたい 3 2022/09/20 23:46
- Visual Basic(VBA) 【マクロ】フォルダにファイルが1つも無い時に、ファイルがありませんとメッセージを表示する 4 2022/08/28 08:48
- Excel(エクセル) マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。 5 2022/05/28 16:03
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows11のデスクトップアイコ...
-
ファイルを隠し設定していない...
-
『HP/nx6120』の“Swsetup”とい...
-
複数フォルダをまとめて移動す...
-
del で確認なしで削除した
-
フォルダをきるって?
-
外付けSSDや外付けHDDにはフォ...
-
エクセル 図の挿入時の初期フ...
-
一つ上の、フォルダだけを消す...
-
バッチファイルで複数フォルダ...
-
ファイルエクスプローラーでフ...
-
Internet Explorer-11 を削除は...
-
mac メモ帳アプリ フォルダを移...
-
フォルダの中に同じフォルダが!
-
Program Files を2つ作ってしま...
-
Windows7でインターネット一時...
-
コマンド入力について
-
OneDriveの同期させるPCの変更方法
-
フォルダを意図した順番に並べたい
-
フォルダのタスクの属性?を変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows11のデスクトップアイコ...
-
ファイルを隠し設定していない...
-
複数フォルダをまとめて移動す...
-
『HP/nx6120』の“Swsetup”とい...
-
フォルダをきるって?
-
Internet Explorer-11 を削除は...
-
外付けSSDや外付けHDDにはフォ...
-
del で確認なしで削除した
-
一つ上の、フォルダだけを消す...
-
ファイル名やフォルダ名の名前...
-
エクセル 図の挿入時の初期フ...
-
バッチファイルで複数フォルダ...
-
差し込み印刷が他人のPCでは...
-
programdataフォルダがない
-
フォルダを開くと勝手に新たな...
-
バッチファイルでのフォルダ日...
-
パソコンの共有フォルダ移動に...
-
ファイルエクスプローラーでフ...
-
Program Files を2つ作ってしま...
-
連動しているピクチャのフォル...
おすすめ情報