【VBA】大量のファイル名変更!指定したフォルダ内を一括操作!

f:id:yshgs_elec:20200909215949j:plain

大量のファイルの名前を書き換えないといけない。ひとつひとつ手作業でやっていたら日が暮れそうだ。

 

この記事では、こんな悩みをエクセル(VBA)を使って一瞬で解決します。

 

さっそくやっていきましょう!

 

スポンサーリンク

やりたいことのイメージ共有

本題に入る前に、この記事で紹介する内容を共有化しておきましょう。

 

以下のようにあるフォルダ内に名前を書き換えたいファイルがたくさん入っていることを想定しています。

(テンプレートファイルをコピーしたときなんかに、よくこうなりますよね。)

コピペでファイルを増やした際のファイル名一覧

 

この記事では、これらのファイルたちを、以下の画像のように好きな名前に一瞬で変更する方法をご紹介します。

マクロでファイル名をきれいに整えた結果

あなたのやりたいこととイメージが一致していれば、ぜひ続きをご覧ください。

 

スポンサーリンク

ファイル名一括変更の手順

今回は以下のようなエクセルファイルを作成することで、ファイル名を一括変更していきます。

ファイ名変更に使用する情報を一覧化した結果

 

このエクセルシートの作成手順は以下の通りです。

①まずは上の画像のようにエクセルファイルに情報を記入する準備をする

②VBAを使って変更前のファイルを一括取得する(A列の情報を自動で取得する)

③変更後のファイル名を自分でエクセルシートに入力する(B列の情報を記入する)

④ファイル名変更コードを実行し、ファイル名を変更する

 

ここからはこれらの手順を詳細に説明していきます。

 

手順①エクセルシートを整える

この記事では、A4セル以降に記入されている名前のファイルを、B4セル以降に記入されている名前にそれぞれ変更するという形でVBAコードを作成しています。

 

基本的には以下の画像を完璧に真似して作っていただければOKです。

A2セルのファイルの保存場所だけ、あなたの状況に合わせて書き換えてください。

ファイル名一覧を取得するためのエクセルシート

手順②A列の情報を自動で取得する

次は変更前のファイル名を取得していきます。

 

ここからはVBAコードを記入していきます。

VBAの使い方がわからない、という方は以下の記事を参考に、コードを記述できる環境を整えておきましょう。

www.higashisalary.com

 

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列に記入した名前に変わっているはずです。

 

スポンサーリンク

おわりに

というわけで今回は、指定したフォルダ内のファイルの名前を一括変更する方法をご紹介しました。

 

一度作っておけば、いろいろな場面で活用できるはずです。ぜひ時間のあるときに作っておきましょう。

 

なお、今回はファイル名変更専用のマクロでしたが、もしフォルダに対しても同じことをやりたい場合は以下の記事を参考にしてみてください。

【VBA】大量のフォルダ名を一括変更!既存のフォルダ名も自動取得!

 

このように、このブログでは、エクセル(VBA)を中心に、様々な業務効率化スキルを紹介しています。

■生産性の低い作業ははるべくしたくない。

■もっと業務を効率化したい。

こんな人はぜひ他の記事も読んでみてください。

 

また、VBAを使ってこんなことがしたいんだけど、やり方がわからない、という悩みを抱えているかたは、お気軽にコメント欄から質問してください。

私にわかる範囲であればご協力いたしますので。(もちろん無料です。)

 

最後に・・・

このブログを応援してあげても良いよ、という方は以下のボタンをポチっていただけると嬉しいです。

にほんブログ村 IT技術ブログ VBAへ
にほんブログ村

にほんブログ村 IT技術ブログへ
にほんブログ村

Twitterもやっていますので、興味があれば覗いてみてください。

それではまた!!

オススメ記事

www.higashisalary.com

www.higashisalary.com

コメント

  1. ユウ より:

    教えてください。
    この手順では、フォルダ名の変更は出来ないのでしょうか?
    それともこれの文字を少し変更すれば、フォルダ名の変更にも対応出来るのでしょうか?
    お手数ですがご教示いただけたら嬉しいです。

    • ヒガシ ヒガシ より:

      コメントありがとうございます(^^)
      ざっとコードを見直した限りはコード中にあるvbnormalのところをvbDirectoryに変更すればできるのではないかと思います。
      しかしながらそれだけだとフォルダもファイルもA列に取得されるはずですので、そこは注意が必要ですね。
      (検証はしてないので動かなかったらすみません。)

      いずれにせよそうゆう状況もよくありそうなので今度フォルダ専用のコードも書いて公開しますね(^^)

      • ユウ より:

        回答ありがとうございます。
        また公開されるのを楽しみにしています。
        なお、vbdirectlyへの変更を試したところ私の環境では何も変わらずファイル名のみが抽出されました。
        なお、fireの部分を全てfolderに変更しても変わらずファイル名のみが抽出されました。

  2. コウスケ より:

    一つ教えてほしいことがあります。

    ファイル名を取得する際、昇順で出して欲しいですが、方法ないでしょうか?

    ファイルが10個以上になると昇順ででてくれません。

    ファイル名が下記のように保存されているデータで昇順でファイル名を取得してくれるとありがたいです。

    保存場所
    1台目.jpg
    2台目.jpg



    12台目.jpg

    実際、だすと
    1台目.jpg
    10台目.jpg
    11台目.jpg
    12台目.jpg
    2台目.jpg
    3台目.jpg



    順番通りにでません。

    申し訳ないですが
    初心者なので、そのまま貼り付けられるようコード作っていただけるとありがたいです。
    よろしくお願いします。

    • ヒガシ ヒガシ より:

      ご質問ありがとうございます(^^)

      そのような状況の場合、1台目.jpgという情報が書き出されたセルの右下をダブルクリックすれば1から12まで順番に並ぶと思いますが、これで問題解決できますでしょうか?
      (できなかったらごめんなさい。)

  3. より:

    教えて頂きたいです💦
    「変更後ファイル名」の下に1行空けて
    名前を変更したいのですが、できますでしょうか。
    よろしくお願いします

  4. サトシ より:

    初めまして。素晴らしいツールありがとうございます。試行錯誤して使えるようになりました。
    変更後のファイル名ですが、別のシートに記載してある一覧をコピーして貼り付ける事はできますか?大量処理する際、全て記入は大変なのですが。

  5. サトシ より:

    コメント失礼いたします。変更後のファイル名は他のシートからコピーして貼り付ける事は出来ますか?(すみません、もしかしたら質問重複したかもしれません)
    宜しくお願いいたします。

    • ヒガシ ヒガシ より:

      ご質問ありがとうございます。
      はい、可能です(^^)

      • サトシ より:

        別のシートからコピーして貼り付けたのですが、ファイルが見つかりませんと出てしまいます。やり方が悪いのでしょうか?

        • サトシ より:

          使えない文字や記号が含まれると出来ないのでしょうか?

          • サトシ より:

            何度もすみません。/を使うと出来ないみたいです。2001-001-1/4とかにしたいのですが、ファイルが見つかりませんとかパスが無効ですとなります。

          • ヒガシ ヒガシ より:

            /はフォルダの階層が変わることを意味しますので使えません。
            substitute関数などを使って別文字に変換してから実行すると良いと思います。

  6. サトシ より:

    承知しました。アドバイス本当にありがとうございます。

  7. ナナシ より:

    コメント失礼いたします。とても便利なマクロをありがとうございます。
    質問なのですが、ファイル名取得のマクロでは変数としてiを用いており、ファイル名変更のマクロでは変数としてjを用いている理由は何でしょうか。
    また、ファイル名取得の際、フォルダ内の順番にならないのはどんな理由があるのでしょうか。
    教えていただけますと幸いです。

    • ヒガシ ヒガシ より:

      ご質問ありがとうございます。
      変数i,jの違いは特に意味はないですね。
      同じでも動くと思います。

      ファイル名を取得した際の順番ですが、基本的には名前順に取得されるはずです。
      一致しないのはそもそもフォルダが名前順でソートされていないとかですかね・・・。

  8. うめ吉 より:

    素晴らしいマクロを拝見いたしました。ファイル名変換がこんなに簡潔にできるとは感動いたしました。一つどうかご教授頂きたい、重複していたら申し訳ありません。このマクロでは拡張子までが変換されてしまいます。ファイル名のみ変換をしたい場合のマクロをご教授頂けませんでしょうか。宜しくお願い致します。

    • ヒガシ ヒガシ より:

      ご質問ありがとうございます(^^)
      まず変更後の名前を書き込むB列には拡張子をふくまない状態で記述しておきます。
      そしてfile_renameマクロを次のように変更してみてください。

      Sub file_rename()
          '変数の型を宣言
          Dim folder_path As String
          Dim j As Integer
          Dim objFileSys As Object
          Dim extensionName As String
          Set objFileSys = CreateObject("Scripting.FileSystemObject")
          folder_path = Cells(2, 1) & "\"
          j = 1
          Do Until Cells(j + 3, 1) = ""
              extensionName = objFileSys.GetExtensionName(folder_path & Cells(j + 3, 1))
              Name folder_path & Cells(j + 3, 1) As folder_path & Cells(j + 3, 2) & "." & extensionName
              j = j + 1
          Loop
      End Sub
      
  9. うめ吉 より:

    早朝でありながら、本当にありがとうございます。目から鱗です。深く深く感謝を致します。ありがとうございます。

タイトルとURLをコピーしました