大量のファイルの名前を書き換えないといけない。ひとつひとつ手作業でやっていたら日が暮れそうだ。
この記事では、こんな悩みをエクセル(VBA)を使って一瞬で解決します。
さっそくやっていきましょう!
やりたいことのイメージ共有
本題に入る前に、この記事で紹介する内容を共有化しておきましょう。
以下のようにあるフォルダ内に名前を書き換えたいファイルがたくさん入っていることを想定しています。
(テンプレートファイルをコピーしたときなんかに、よくこうなりますよね。)
この記事では、これらのファイルたちを、以下の画像のように好きな名前に一瞬で変更する方法をご紹介します。
あなたのやりたいこととイメージが一致していれば、ぜひ続きをご覧ください。
完成版マクロのダウンロード方法の紹介
以降で紹介している手順をひとつひとつ実行していけば、機能を実装することは可能ですが、手順は複雑です。
ということで「一人でできるか不安だ。」、「急いでいるから早く使いたい。」という方向けに、完成品ファイルを作成しております。
どんなものを作ったかは動画をご確認ください。
左側がエクセルマクロを操作している様子、右側が対象フォルダ内の中身の様子です。
慣れればこんな感じでサクサク名前を変更できます。
上記の完成版ファイルでは、この本記事内で紹介するものに加えて、以下の機能を追加しています。
①拡張子の選択機能
⇒選択した拡張子だけを対象に扱うことができる
②拡張子の引継ぎ機能
⇒変更後ファイル名に拡張子を含まないで記述可能に
➂マクロ実行ボタンの実装
⇒面倒な設定なしにボタン一つで実行できます。
④実行手順書、実行時の注意事項の記載
⇒同僚に展開する際にも安心です。
※とはいえ、実行する際はあくまでも自己責任にてお願いいたします。
何か問題が発生したとしても責任を負いませんのでご了承ください。
(なれるまではサンプルフォルダで練習することをオススメします。)
完成版マクロは有料ノートにて500円で販売しております。
ファイル名一括変更の手順
それではファイル名変更マクロの作り方の紹介に入ります。
今回は以下のようなエクセルファイルを作成することで、ファイル名を一括変更していきます。
このエクセルシートの作成手順は以下の通りです。
①まずは上の画像のようにエクセルファイルに情報を記入する準備をする
②VBAを使って変更前のファイルを一括取得する(A列の情報を自動で取得する)
③変更後のファイル名を自分でエクセルシートに入力する(B列の情報を記入する)
④ファイル名変更コードを実行し、ファイル名を変更する
ここからはこれらの手順を詳細に説明していきます。
手順①エクセルシートを整える
この記事では、A4セル以降に記入されている名前のファイルを、B4セル以降に記入されている名前にそれぞれ変更するという形でVBAコードを作成しています。
基本的には以下の画像を完璧に真似して作っていただければOKです。
A2セルのファイルの保存場所だけ、あなたの状況に合わせて書き換えてください。
手順②A列の情報を自動で取得する
次は変更前のファイル名を取得していきます。
ここからはVBAコードを記入していきます。
VBAの使い方がわからない、という方は以下の記事を参考に、コードを記述できる環境を整えておきましょう。
VBAコードを記入する準備が整ったら、以下のコードを記入します。
Sub get_file_name()
'変数の型を宣言
Dim folder_path As String
Dim file_name As String
Dim i As Integer
folder_path = Cells(2, 1) & "\"
file_name = Dir(folder_path, vbNormal)
i = 1
Do Until file_name = ""
Cells(i + 3, 1) = file_name
i = i + 1
file_name = Dir()
Loop
End Sub
記述が終わったらこのマクロをさっそく実行してみましょう!
いざ実行!!
実行すると、以下の画像のように変更したいファイルがA列に一覧表示されます。
手順③B列の情報を手動で記入する
変更後のファイル名はさすがに自動設定はできませんので、変更したい名前をそれぞれ記入してください。
私の場合は以下のように記入を行いました。
※上の画像のように連番ファイルを作成する場合は基準となるセルの角をダブルクリックすると一瞬で記入することができます。
ここまでで下準備完了です。
手順④ファイル名変更を実行する
準備が整ったら、もう一度VBAの記述に戻ります。
次はファイル名変更コードを記入しましょう。
以下のコードを丸ごとコピーしてください。
Sub file_rename()
'変数の型を宣言
Dim folder_path As String
Dim j As Integer
folder_path = Cells(2, 1) & "\"
j = 1
Do Until Cells(j + 3, 1) = ""
Name folder_path & Cells(j + 3, 1) As folder_path & Cells(j + 3, 2)
j = j + 1
Loop
End Sub
記述が終わったらこのマクロをさっそく実行してみましょう!
※今回はマクロが2つあるので、ご注意ください。
file_renameの方を実行します。
再び、いざ実行!!
(実行しても、エクセルシート上はなにも変化はおきません。)
実行が終わったら、ファイルが保存してあったフォルダを確認してみましょう。
ファイル名がエクセルシートのB列に記入した名前に変わっているはずです。
おわりに
というわけで今回は、指定したフォルダ内のファイルの名前を一括変更する方法をご紹介しました。
一度作っておけば、いろいろな場面で活用できるはずです。ぜひ時間のあるときに作っておきましょう。
繰り返しにはなりますが、本記事の内容からさらに機能強化したファイルをnoteで販売しております。
興味があればぜひこちらもご購入検討をよろしくお願いします。
なお、今回はファイル名変更専用のマクロでしたが、もしフォルダに対しても同じことをやりたい場合は以下の記事を参考にしてみてください。
【VBA】大量のフォルダ名を一括変更!既存のフォルダ名も自動取得!
このように、このブログでは、エクセル(VBA)を中心に、様々な業務効率化スキルを紹介しています。
■生産性の低い作業ははるべくしたくない。
■もっと業務を効率化したい。
こんな人はぜひ他の記事も読んでみてください。
また、VBAを使ってこんなことがしたいんだけど、やり方がわからない、という悩みを抱えているかたは、お気軽にコメント欄から質問してください。
コメント
教えてください。
この手順では、フォルダ名の変更は出来ないのでしょうか?
それともこれの文字を少し変更すれば、フォルダ名の変更にも対応出来るのでしょうか?
お手数ですがご教示いただけたら嬉しいです。
コメントありがとうございます(^^)
ざっとコードを見直した限りはコード中にあるvbnormalのところをvbDirectoryに変更すればできるのではないかと思います。
しかしながらそれだけだとフォルダもファイルもA列に取得されるはずですので、そこは注意が必要ですね。
(検証はしてないので動かなかったらすみません。)
いずれにせよそうゆう状況もよくありそうなので今度フォルダ専用のコードも書いて公開しますね(^^)
回答ありがとうございます。
また公開されるのを楽しみにしています。
なお、vbdirectlyへの変更を試したところ私の環境では何も変わらずファイル名のみが抽出されました。
なお、fireの部分を全てfolderに変更しても変わらずファイル名のみが抽出されました。
そうでしたか。
それはお手数おかけしてすみません。
フォルダ専用の記事を書いてみましたので、こちらを参考にしてみてください。
基本的な使い方は全く同じです。
【VBA】大量のフォルダ名を一括変更!既存のフォルダ名も自動取得!
またわからないことがあればいつでも聞いてください。(^^)
フォルダ変更の件、わざわざ記事を作成いただいてありがとうございました。
無事に出来ました。
助かりました。
一つ教えてほしいことがあります。
ファイル名を取得する際、昇順で出して欲しいですが、方法ないでしょうか?
ファイルが10個以上になると昇順ででてくれません。
ファイル名が下記のように保存されているデータで昇順でファイル名を取得してくれるとありがたいです。
保存場所
1台目.jpg
2台目.jpg
・
・
・
12台目.jpg
実際、だすと
1台目.jpg
10台目.jpg
11台目.jpg
12台目.jpg
2台目.jpg
3台目.jpg
・
・
・
順番通りにでません。
申し訳ないですが
初心者なので、そのまま貼り付けられるようコード作っていただけるとありがたいです。
よろしくお願いします。
ご質問ありがとうございます(^^)
そのような状況の場合、1台目.jpgという情報が書き出されたセルの右下をダブルクリックすれば1から12まで順番に並ぶと思いますが、これで問題解決できますでしょうか?
(できなかったらごめんなさい。)
教えて頂きたいです💦
「変更後ファイル名」の下に1行空けて
名前を変更したいのですが、できますでしょうか。
よろしくお願いします
手順4の
j=1を
j=2にすればできるはずです(^^)
初めまして。素晴らしいツールありがとうございます。試行錯誤して使えるようになりました。
変更後のファイル名ですが、別のシートに記載してある一覧をコピーして貼り付ける事はできますか?大量処理する際、全て記入は大変なのですが。
コメント失礼いたします。変更後のファイル名は他のシートからコピーして貼り付ける事は出来ますか?(すみません、もしかしたら質問重複したかもしれません)
宜しくお願いいたします。
ご質問ありがとうございます。
はい、可能です(^^)
別のシートからコピーして貼り付けたのですが、ファイルが見つかりませんと出てしまいます。やり方が悪いのでしょうか?
使えない文字や記号が含まれると出来ないのでしょうか?
何度もすみません。/を使うと出来ないみたいです。2001-001-1/4とかにしたいのですが、ファイルが見つかりませんとかパスが無効ですとなります。
/はフォルダの階層が変わることを意味しますので使えません。
substitute関数などを使って別文字に変換してから実行すると良いと思います。
承知しました。アドバイス本当にありがとうございます。
コメント失礼いたします。とても便利なマクロをありがとうございます。
質問なのですが、ファイル名取得のマクロでは変数としてiを用いており、ファイル名変更のマクロでは変数としてjを用いている理由は何でしょうか。
また、ファイル名取得の際、フォルダ内の順番にならないのはどんな理由があるのでしょうか。
教えていただけますと幸いです。
ご質問ありがとうございます。
変数i,jの違いは特に意味はないですね。
同じでも動くと思います。
ファイル名を取得した際の順番ですが、基本的には名前順に取得されるはずです。
一致しないのはそもそもフォルダが名前順でソートされていないとかですかね・・・。
素晴らしいマクロを拝見いたしました。ファイル名変換がこんなに簡潔にできるとは感動いたしました。一つどうかご教授頂きたい、重複していたら申し訳ありません。このマクロでは拡張子までが変換されてしまいます。ファイル名のみ変換をしたい場合のマクロをご教授頂けませんでしょうか。宜しくお願い致します。
ご質問ありがとうございます(^^)
まず変更後の名前を書き込むB列には拡張子をふくまない状態で記述しておきます。
そしてfile_renameマクロを次のように変更してみてください。
早朝でありながら、本当にありがとうございます。目から鱗です。深く深く感謝を致します。ありがとうございます。