teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

同一フォルダ名が存在する場合のエラー回避処理追加

2018/10/22 10:17

投稿

TanakaHiroaki
TanakaHiroaki

スコア1065

answer CHANGED
@@ -24,7 +24,8 @@
24
24
  ```
25
25
  <追記>
26
26
   フォルダ名が固定でないことを踏まえ、For Each 構文の多重ループを使用してみました。
27
+  その後、移動先に同一フォルダ名が存在する場合のエラー回避処理を追加しました。
27
-  動作確認をしていませんが、参考にしてください。
28
+ 動作確認をしていませんが、参考にしてください。
28
29
  ```VBA
29
30
  '「画像」フォルダに移動
30
31
  Dim FSO As FileSystemObject
@@ -36,7 +37,11 @@
36
37
  If fol1.Name <> "画像" Then
37
38
  For Each fol2 In fol1.SubFolders
38
39
  For Each fol3 In fol2.SubFolders
40
+ If FSO.FolderExists(ThisWorkbook.Path & "\画像\" & fol3.Name) Then
41
+ MsgBox "同一フォルダ名がありますので処理をスキップします。"
42
+ Else
39
- Call FSO.MoveFolder(fol3.Path, ThisWorkbook.Path & "\画像\")
43
+ FSO.MoveFolder CStr(fol3), ThisWorkbook.Path & "\画像\"
44
+ End If
40
45
  Next fol3
41
46
  Next fol2
42
47
  End If

1

For Each 構文の多重ループを用いたコード追記

2018/10/22 10:17

投稿

TanakaHiroaki
TanakaHiroaki

スコア1065

answer CHANGED
@@ -21,4 +21,26 @@
21
21
  Next FSOfolder
22
22
 
23
23
  Set FSO = Nothing
24
+ ```
25
+ <追記>
26
+  フォルダ名が固定でないことを踏まえ、For Each 構文の多重ループを使用してみました。
27
+  動作確認をしていませんが、参考にしてください。
28
+ ```VBA
29
+ '「画像」フォルダに移動
30
+ Dim FSO As FileSystemObject
31
+ Set FSO = New FileSystemObject
32
+
33
+ Dim fol1 As Folder, fol2 As Folder, fol3 As Folder
34
+
35
+ For Each fol1 In FSO.GetFolder(ThisWorkbook.Path).SubFolders
36
+ If fol1.Name <> "画像" Then
37
+ For Each fol2 In fol1.SubFolders
38
+ For Each fol3 In fol2.SubFolders
39
+ Call FSO.MoveFolder(fol3.Path, ThisWorkbook.Path & "\画像\")
40
+ Next fol3
41
+ Next fol2
42
+ End If
43
+ Next fol1
44
+
45
+ Set FSO = Nothing
24
46
  ```