質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1970閲覧

VBAでフォルダ内のファイル名を一括変換

aoi_xxx

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/10/07 07:49

VBAでファイル名の一括変換

VBAで、
①フォルダ内のファイル名をBセルに取得
②Cセルに変更後のファイル名を入力(手動)
③Bセルのファイル名をCセルのファイル名に変換
という処理をしたいと考え、
以下のようなコードを書きました。

VBA

1Option Explicit 2'プログラム1|プログラム開始 3Sub ファイル名取得() 4 5 'プログラム2|FileSystemObjectの設定 6 Dim fs As Scripting.FileSystemObject 7 Set fs = New Scripting.FileSystemObject 8 9 'プログラム3|シート設定 10 Dim ws As Worksheet 11 Set ws = Worksheets("ファイル名変換") 12 13 'プログラム4|ダイアログを開いてフォルダ選択 14 Dim path As String 15 With Application.FileDialog(msoFileDialogFolderPicker) 16 If .Show = True Then 17 path = .SelectedItems(1) 18 End If 19 End With 20 21 'プログラム5|選択したフォルダが存在するかどうかチェック 22 If fs.FolderExists(path) = False Then 23 MsgBox "フォルダを選択してください" 24 Exit Sub 25 End If 26 27 'プログラム6|フォルダを取得 28 Dim basefolder As Scripting.Folder 29 Set basefolder = fs.GetFolder(path) 30 31 'プログラム7|フォルダ内のファイルを取得 32 Dim myfiles As Scripting.Files 33 Set myfiles = basefolder.Files 34 35 'プログラム8|変数設定 36 Dim I As Long 37 Dim myfile As Scripting.File 38 39 'プログラム9|フォルダ内のファイルを取得 40 For Each myfile In myfiles 41 I = I + 1 42 ws.Range("A1").Offset(I, 0).Value = I 43 ws.Range("B1").Offset(I, 0).Value = fs.GetFileName(myfile) 44 Debug.Print fs.GetBaseName(myfile) 45 Next 46 47 Dim filesort As Long 48 filesort = Range("B" & Rows.Count).End(xlUp).Row 49 Range("B1:B" & filesort).sort Columns("B"), xlAscending, Header:=xlYes 50 51 'プログラム10|オブジェクト解放 52 Set myfile = Nothing 53 Set myfiles = Nothing 54 Set basefolder = Nothing 55 Set fs = Nothing 56 57'プログラム11|プログラム終了 58End Sub 59'プログラム1|ファイル名変更 60Sub ファイル名変更() 61 62 Dim changeSheet As Worksheet 63 Dim lastRow, I As Long 64 Dim folderName, oldFile, newFile As String 65 66 Set changeSheet = Worksheets("ファイル名変換") 67 68 With Application.FileDialog(msoFileDialogFolderPicker) 69 If .Show = True Then 70 folderName = .SelectedItems(1) 71 End If 72 End With 73 74 lastRow = changeSheet.Cells(Rows.Count, "B").End(xlUp).Row 75 76 For I = 2 To lastRow 77 78 oldFile = folderName & "\" & changeSheet.Cells(I, "B") 79 newFile = folderName & "\" & changeSheet.Cells(I, "C") 80 81 Name oldFile As newFile 82 83 Next I 84 85End Sub

元のファイル名は『令和3年10月11.docx』~『令和3年10月132.docx』です。
変更後のファイル名は『番号_名前_分類1_分類2_内容.docx』です。
上のコードで、『令和3年10月11.docx』から『令和3年10月119.docx』まではうまく実行できました。
ところが、『令和3年10月120.docx』で

実行時エラー '52'
ファイル名または番号が不正です

と出てしまい、そこから先が変更できなくなってしまいました。
エラーが出ているのは Name oldFile As newFile の行です。
原因は何でしょうか。
そしてどのように書き換えれば解決できるでしょうか。
ご指導いただければ幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hex309

2021/10/07 08:13

エラーになる『令和3年10月120.docx』のときの変換後のファイル名を教えて下さい。
guest

回答1

0

ベストアンサー

newFile にファイル名に使えない記号などが入っているということはないですか。

ファイルやフォルダーの名前に使用できない文字について

投稿2021/10/07 08:13

hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoi_xxx

2021/10/07 08:20

ありがとうございます! 記号は問題なかったのですが、漢字に問題がありました。 具体的には、名前に『鷗』の字が入っていたために動かなかったようです。 『鴎』にしたところ問題なくすべて変換することができました。 VBA初心者ということもあり、自分の書いたプログラムの問題と思い込んでいました。 ファイル名に問題があるとは想像もしていなかったです。 ありがとうございました!もっと勉強します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問