Excel VBA 質問スレッド №1567 (解決済)
フォルダ名の取得について
投稿者 : ぴか 投稿日時 : 2023/09/15(Fri) 12:13:21 OS : 未指定 EXCEL : 未指定
先日からご相談している内容に関して、追加の質問です。
五層目に格納されたフォルダの内、Sheets(1)のRange("F" & i)のセル内に書かれた文字列の左から10個の文字を含むフォルダがあれば、コピペする、とういう内容のロボットを作りたいです。
また、格納場所については、Sheets(1)のRange("D" & i)のセル内に書かれた文字列の左から3文字が「大阪府」であれば、指定した処理をしたうえで、指定したフォルダに格納し、「大阪市」、「その他」であれば、それぞれ別の処理を行いたいです。
★★の部分で、Destinationを使う場合、ワイルドカードが使用できないため、.Sheets(1)のRange("D" & i)の文字列によって決まる保存先フォルダを調べて、.Sheets(1)のRange("M" & i)に書き込み、そのフォルダパスにフォルダを保存したいと考えておりますが、
★の箇所で下記エラーが起きています。
実行時エラー52:
「ファイル名または番号が不正です。」
何かお気づきの点ありましたらご教授くださいませ。
先日からご相談している内容に関して、追加の質問です。
五層目に格納されたフォルダの内、Sheets(1)のRange("F" & i)のセル内に書かれた文字列の左から10個の文字を含むフォルダがあれば、コピペする、とういう内容のロボットを作りたいです。
また、格納場所については、Sheets(1)のRange("D" & i)のセル内に書かれた文字列の左から3文字が「大阪府」であれば、指定した処理をしたうえで、指定したフォルダに格納し、「大阪市」、「その他」であれば、それぞれ別の処理を行いたいです。
★★の部分で、Destinationを使う場合、ワイルドカードが使用できないため、.Sheets(1)のRange("D" & i)の文字列によって決まる保存先フォルダを調べて、.Sheets(1)のRange("M" & i)に書き込み、そのフォルダパスにフォルダを保存したいと考えておりますが、
★の箇所で下記エラーが起きています。
実行時エラー52:
「ファイル名または番号が不正です。」
何かお気づきの点ありましたらご教授くださいませ。
Sub 大阪府() Application.ScreenUpdating = False Dim fso As New FileSystemObject Dim fld1 As Folder, fld2 As Folder, fld3 As Folder, fld4 As Folder, fld5 As Folder Dim i As Long For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row With ActiveWorkbook Set fld = fso.GetFolder("Z:¥〇〇¥〇〇〇") For Each fld2 In fld.SubFolders For Each fld3 In fld2.SubFolders For Each fld4 In fld3.SubFolders For Each fld5 In fld4.SubFolders If fld5.Name Like "*" & Left(.Sheets(1).Range("F" & i), 10) & "*" Then Select Case Left(.Sheets(1).Range("D" & i), 3) Case "大阪府" .Sheets(1).Range("D" & i) = Replace(.Sheets(1).Range("D" & i), "大阪府", "") .Sheets(1).Range("D" & i) = Replace(.Sheets(1).Range("D" & i), "大阪", "") ★.Sheets(1).Range("M" & i) = Dir("C:\Users\〇〇\Desktop\お大阪2\2.二次官庁\大阪府\*" & Left(.Sheets(1).Range("D" & i), 3) & "*\", vbDirectory) ★★fld5.Copy Destination:=.Sheets(1).Range("M" & i) Case "大阪市" fld5.Copy Destination:="C:¥Users¥〇〇¥Desktop¥お大阪2¥3.市町村¥オ大阪市¥*" & Mid(.Sheets(1).Range("D" & i), 4, 3) & "*" Case Else fld5.Copy Destination:="C:¥Users¥〇〇¥Desktop¥お大阪2¥3.市町村¥*" & Left(.Sheets(1).Range("D" & i), 2) & "*" End Select End If Next Next Next Next End With Next End Sub
スポンサーリンク
[返信 1] Re : フォルダ名の取得について
投稿者 : さんこう 投稿日時 : 2023/09/15(Fri) 12:47:42
>.Sheets(1)のRange("D" & i)の文字列によって決まる保存先フォルダを調べて、.Sheets(1)のRange("M" & i)に書き込み、そのフォルダパスにフォルダを保存したい
セルに書き込んだなら、どこに保存しようとしているか
確認できるので、正しいか確認しましょう。
>.Sheets(1)のRange("D" & i)の文字列によって決まる保存先フォルダを調べて、.Sheets(1)のRange("M" & i)に書き込み、そのフォルダパスにフォルダを保存したい
セルに書き込んだなら、どこに保存しようとしているか
確認できるので、正しいか確認しましょう。
[返信 2] Re : フォルダ名の取得について
投稿者 : 通行人 投稿日時 : 2023/09/15(Fri) 12:56:44
> 実行時エラー52:
> 「ファイル名または番号が不正です。」
文字通り、パス名が間違っているのでは?
Left(.Sheets(1).Range("D" & i), 3)に変な制御文字が入っているとか、「\」マークが余分とか。
もう少し、トライ&エラーした方が良いと思います。(VBAの上達がしたいのなら)
十中八九、最後の「\」マークが邪魔していると思いますけど。
> 実行時エラー52:
> 「ファイル名または番号が不正です。」
文字通り、パス名が間違っているのでは?
Left(.Sheets(1).Range("D" & i), 3)に変な制御文字が入っているとか、「\」マークが余分とか。
もう少し、トライ&エラーした方が良いと思います。(VBAの上達がしたいのなら)
十中八九、最後の「\」マークが邪魔していると思いますけど。
[返信 3] Re : フォルダ名の取得について
投稿者 : higeru 投稿日時 : 2023/09/15(Fri) 14:52:56
実行時エラーの原因は通行人さんの指摘通り、★行の最後の方「..."*¥", vbDirectory)」の '\' ですね。
ただこれを削除してエラーが出ないようになったとして、Range("M" & i) に書かれるのはフォルダの名前「だけ」ですから、次の Copy のコピー先にはそのままでは使えませんよ。
実行時エラーの原因は通行人さんの指摘通り、★行の最後の方「..."*¥", vbDirectory)」の '\' ですね。
ただこれを削除してエラーが出ないようになったとして、Range("M" & i) に書かれるのはフォルダの名前「だけ」ですから、次の Copy のコピー先にはそのままでは使えませんよ。
[返信 4] Re : フォルダ名の取得について
投稿者 : higeru 投稿日時 : 2023/09/15(Fri) 15:01:26
自分のコメントに補足しつつ、次にまたひっかかりそうなことについて先に書いときます。
■[返信 3] higeruさん(2023-09-15 14:52:56)の記事
> ただこれを削除してエラーが出ないようになったとして、Range("M" & i) に書かれるのはフォルダの名前「だけ」ですから、次の Copy のコピー先にはそのままでは使えませんよ。
そのままでは使えないというのは、つまりフォルダを「フルパス」で書かないとダメということですが、その後に '\' を付けるか付けないかで挙動が変わってきます(この辺はわたしも覚えきれないので、都度実験して再確認しますが)。以下参照。
【Office TANAKA - FileSystemObject[Copyメソッド]】
http://officetanaka.net/excel/vba/filesystemobject/folder16.htm
自分のコメントに補足しつつ、次にまたひっかかりそうなことについて先に書いときます。
■[返信 3] higeruさん(2023-09-15 14:52:56)の記事
> ただこれを削除してエラーが出ないようになったとして、Range("M" & i) に書かれるのはフォルダの名前「だけ」ですから、次の Copy のコピー先にはそのままでは使えませんよ。
そのままでは使えないというのは、つまりフォルダを「フルパス」で書かないとダメということですが、その後に '\' を付けるか付けないかで挙動が変わってきます(この辺はわたしも覚えきれないので、都度実験して再確認しますが)。以下参照。
【Office TANAKA - FileSystemObject[Copyメソッド]】
http://officetanaka.net/excel/vba/filesystemobject/folder16.htm
[返信 5] Re : フォルダ名の取得について
投稿者 : ぴか 投稿日時 : 2023/09/19(Tue) 10:57:02
皆さま
たくさんのアドバイスありがとうございます。
アドバイスの通り、「¥」を除くと次に移りました。
しかし、.Range("M" & i)には何も書き込まれていません。
また何かお気づきの点ありましたら教えてください。
皆さま
たくさんのアドバイスありがとうございます。
アドバイスの通り、「¥」を除くと次に移りました。
しかし、.Range("M" & i)には何も書き込まれていません。
また何かお気づきの点ありましたら教えてください。
[返信 6] Re : フォルダ名の取得について
投稿者 : ぴか 投稿日時 : 2023/09/19(Tue) 11:39:23
新たな発見がありましたので、自分で試してみます。
解決できなければまた教えてください。
■[返信 5] ぴかさん(2023-09-19 10:57:02)の記事
> 皆さま
>
> たくさんのアドバイスありがとうございます。
> アドバイスの通り、「¥」を除くと次に移りました。
>
> しかし、.Range("M" & i)には何も書き込まれていません。
> また何かお気づきの点ありましたら教えてください。
>
>
>
>
新たな発見がありましたので、自分で試してみます。
解決できなければまた教えてください。
■[返信 5] ぴかさん(2023-09-19 10:57:02)の記事
> 皆さま
>
> たくさんのアドバイスありがとうございます。
> アドバイスの通り、「¥」を除くと次に移りました。
>
> しかし、.Range("M" & i)には何も書き込まれていません。
> また何かお気づきの点ありましたら教えてください。
>
>
>
>
[返信 7] Re : フォルダ名の取得について
投稿者 : ぴか 投稿日時 : 2023/09/21(Thu) 13:16:24
無事に解決いたしました。
親切に教えてくださりありがとうございました。
無事に解決いたしました。
親切に教えてくださりありがとうございました。
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
( 処理日時 : 2023-10-01 23:32:40 )