【簡単エクセル/Excel VBA マクロ】ファイル名を変更する|Nameステートメント|ファイル操作 #009

アフィリエイト広告を利用しています。
Information
運営者・ポテ

いつもありがとうございます。

皆さん、こんにちは。ご覧いただきありがとうございます。

“日々の業務にちょうどいい自動化を”──

業務改善アプリケーションの開発を行っている ソフトデザイン工房 です。

この記事では、Excel VBA で「ファイル名を変更する方法」を解説します。

VBAにおけるファイル操作の全体像

VBAにおける「ファイル操作」の全体像は、以下の記事で解説しています。

この記事では、「ファイル操作」の一部である「ファイル名を変更する方法」を解説します。

【基礎編】VBAでファイル名を変更する方法

シナリオ

本稿では、次のようなシナリオを例として解説していきます。

フォルダ・ファイル構成

マクロを記述したファイルファイル名を変更する.xlsmがあります。

それ と同階層に001_変更前002_変更後 というが名称のフォルダがあります。

001_変更前には変更前のファイル名1.xlsxが入っています。

処理の流れ

変更のファイル名1.xlsx変更のファイル名1.xlsxに変更し、 002_変更後に保存します。

コード

上述のシナリオを実行するコードと、その実行結果を示します。

【コード】

Sub Sample()


' 変数宣言
Dim original_filename As String
Dim new_filename As String


' 変更前及び変更後のファイル名(パス)を変数に代入する
original_filename = ThisWorkbook.Path & "\001_変更前\変更前のファイル名1.xlsx"
new_filename = ThisWorkbook.Path & "\002_変更後\変更後のファイル名1.xlsx"


' ファイル名を変更する
Name original_filename As new_filename


End Sub

【実行結果】

実行後

運営者・ポテ

順を追って解説していきます。

変数の宣言
' 変数宣言
Dim original_filename As String
Dim new_filename As String

ここでは、コード内で使用する変数が宣言されています。

変数は Dim 変数名 As データ型 の構文で宣言します。

これにより、各変数は As 以降で指定したデータ型のデータを格納できるようになります。

なお、String型は文字列データを扱うためのデータ型です。

ファイル名(ファイルパス)の設定
' 変更前及び変更後のファイル名(パス)を変数に代入する
original_filename = ThisWorkbook.Path & "\001_変更前\変更前のファイル名1.xlsx"
new_filename = ThisWorkbook.Path & "\002_変更後\変更後のファイル名1.xlsx"

ここでは、「変更前」および「変更後」のファイル名(パス)を、それぞれの変数に代入しています。

  • original_filename・・・変更前のファイルを指すパス
  • new_filename・・・変更後のファイルを指すパス

なお、ThisWorkbook.Path は、自分自身(このコードを含むブック)が保存されているフォルダのパスです。その後ろにファイル名をつなげて、完全なファイルパスを作っています。

ファイル名の変更
' ファイル名を変更する
Name original_filename As new_filename

ここがファイル名を変更している部分です。

Nameステートメントoriginal_filename new_filename に変更しています。

Information

ステートメント
VBAの中で特定の動作や処理を定義する命令文のこと。
例)IfFor...NextWithSub など。

なお、Nameステートメントの基本構文は次の通りです。

Name 変更前のファイル名(ファイルパス) As 変更後のファイル名(ファイルパス)
Danger

Nameステートメントでは、変更前のファイル名変更後のファイル名に置き換わり、元の名前のファイルは残りません。コピーではなく、リネーム処理である点に注意してください。

運営者・ポテ

以上が、VBAでファイル名を変更する方法です。ぜひ日々のファイル整理や業務効率化に活用してみてください。

【発展偏】VBAでフォルダ内のすべてのファイルの名称を変更する方法

シナリオ

前のセクションで解説した方法は、変更したいファイルが1つで、しかもファイル名が固定値の場合にのみ有効です。

ただ、そのような場合はわざわざコードを書くより、手作業でファイル名を変える方が早いですよね。

マクロが本領を発揮するのは、多数のファイル名を一括で変更する必要があるときや、条件に応じて自動的に処理を切り替えたい場合です。

そこで、次のようなケースを想定したコードを紹介します。

  1. 001_変更前のフォルダに100個のファイルが入っている。
  2. 002_変更後 のフォルダにファイル名を変更したファイルを出力する。
  3. この際、条件に合致しないファイルは除外する。

マクロを使った作業の流れ

このマクロは次のようにな流れで使用します。

マクロで実行

001_変更前 フォルダに入っている100個のファイルを、シートのB列に書き出す。

人手で実行

B列をC列にコピーし、Excelの置換機能などを使って、変更したいファイル名に修正する。

(例:ファイル名に含まれる「2024」を「2025」に一括置換する)

マクロで実行

C列に書かれた名称を新しいファイル名として使い、002_変更後フォルダにファイルを出力する。

運営者・ポテ

👉この3ステップを、それぞれ次のセクションで解説していきます。

コード

①ファイル名をシートに書き出す(マクロで実行)

まず ①の処理として、001_変更前ファイルになるファイルの名称をエクセルシートのB列に書き出します。

以下にそのコードと実行結果を示します。

【コード】

Sub Sample2()

    ' 参照設定が必要なライブラリ
    ' Microsoft Scripting Runtime 

    
    ' 変数宣言
    Dim twb As Workbook
    Dim twb_ws1 As Worksheet
    
    Dim fso As FileSystemObject
    Dim source_directory As String
    Dim source_file As Object
    
    Dim row_idx As Long
    
    
    ' ワークブックとワークシートを変数に代入
    Set twb = ThisWorkbook
    Set twb_ws1 = twb.Worksheets(1)
    
    
    ' オブジェクトを変数に代入
    Set fso = New FileSystemObject
    
    
    ' ソースディレクトリを変数に代入
    source_directory = ThisWorkbook.Path & "\001_変更前"
    
    
    ' 書き込み用の行番号変数の初期値を設定
    row_idx = 6
    
    
    ' ソースディレクトリ内の全ファイルを順番に処理
    For Each source_file In fso.GetFolder(source_directory).Files
    
        ' シートにファイル名を出力
        twb_ws1.Cells(row_idx, 2) = source_file.Name
        
        
        ' 行番号変数に + 1
        row_idx = row_idx + 1
    
    Next source_file


End Sub

【実行結果】


このように、001_変更前フォルダに入っているファイルの名称が、シートのB列に書き出されます。

このリストを基に次のステップの作業を行っていきます。


なお、このシートの上部には、マクロ実行開始用の図形ボタンを配置してあります。

もちろん、Excel メニューの「表示」→「マクロ」→「マクロの表示」から実行したり、VBA エディター(VBE)から実行することも可能ですが、毎回の操作は手間になります。

そこでおすすめなのが、図形にマクロを登録しておく方法 です。

一度登録してしまえば、以後はこの図形をクリックするだけで、マクロがスタートします。

図形を右クリック → 「マクロの登録」から設定できます。

②ファイル名のコピペ&修正(人手で実行)

次に ②の作業内容を示します。ここは、手作業で実施する部分です。

B列にマクロで書き出したファイル名が入力されていますので、これをC列にコピーします。

その後、Excelの置換機能(Ctrl + H)などを使って、修正したいファイル名に修正します。

③ファイル名の変更(マクロで実行)

最後に③の処理として、C列に入力した新しい名前に従ってファイルをリネームします。

以下にそのコードと実行結果を示します。

【コード】

Sub Sample3()

    ' 参照設定が必要なライブラリ:
    ' Microsoft Scripting Runtime

    ' 変数宣言
    Dim twb As Workbook                    ' 現在のワークブックを格納する変数
    Dim twb_ws1 As Worksheet               ' 現在のワークブックの最初のワークシートを格納する変数
    Dim fso As FileSystemObject            ' ファイルシステム操作を行うオブジェクトを格納する変数
    Dim source_directory As String         ' 変更前のファイルがあるディレクトリパスを格納する変数
    Dim destination_directory As String    ' 変更後のファイルを保存するディレクトリパスを格納する変数
    Dim last_row As Long                   ' 処理対象の最終行を格納する変数
    Dim row_idx As Long                    ' ループ処理で使用する行番号を格納する変数
    
    
    ' ワークブックとワークシートを変数に代入
    Set twb = ThisWorkbook
    Set twb_ws1 = twb.Worksheets(1)
    
    
    ' オブジェクトを変数に代入
    Set fso = New FileSystemObject
    
    
    ' ソースディレクトリ、ディスティネーションディレクトリを変数に代入
    source_directory = ThisWorkbook.Path & "\001_変更前\"
    destination_directory = ThisWorkbook.Path & "\002_変更後\"
    
    
    ' 最終行の取得
    last_row = twb_ws1.Cells(twb_ws1.Rows.Count, 2).End(xlUp).Row
    
    
    ' 行をループして処理
    For row_idx = 6 To last_row
        
        ' ファイル名に"除外"を含むファイルを除外する
        If InStr(twb_ws1.Cells(row_idx, 3), "除外") = 0 Then
            
            ' 名称を変更したファイルを "002_変更後" に出力
            Name source_directory & twb_ws1.Cells(row_idx, 2) _
            As destination_directory & twb_ws1.Cells(row_idx, 3)
            
        End If
    
    Next row_idx

End Sub

【実行結果】


除外されたファイルは元のフォルダに残り、修正されたファイルのみが変更後のフォルダに出力されました。

運営者・ポテ

以上で発展偏の解説は終了です。いかがでしたでしょうか?

実際の業務では、大量のファイルをまとめて処理したり、条件に応じて分岐させたい場面で、このようなマクロが非常に役立ちます。

VBAスキルアップの参考情報

近年は、ChatGPTをはじめとするAIの登場によって、学習のスタイルが大きく変わりました。

分からないことがあれば、AIに尋ねれば答えがすぐに見つかる時代です。

とはいえ、AIを使いこなすには、自分自身の基本的な知識や理解力が欠かせません。

全体像をつかむためには、やはり書籍などで体系的に学んでおくことが今でも有効です。

そのうえでAIを活用すれば、自分の理解度に合わせた的確な解説や、応用のヒントを得ることができます。

「学んで基礎を築く → AIで補い発展させる」──このサイクルを重ねることで、VBAスキルは着実に高まっていくでしょう。

VBAのスキルアップ

VBAを学び始めるなら

入門書は、どれを選んでも大きな差はないように感じます。

どれを選ぶかに悩むことに時間をかけるよりも、まずは手頃な一冊を手に取って進めてみるのがおすすめです。

もし迷ったときには、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。

基礎を超えて力をつけたいなら

私は上級者を目指していましたので、入門書にとどまらず、このような内容の濃い一冊を選んで学んでいました。

今は誰でもAIを活用できる時代になりましたが、上級者を目指す方にとっては、AIをより上手に活用するという意味でも、こうした本は今なお価値があります。

このレベルの本を一冊持っておくことに、損はないでしょう。


資格で能力を証明したいなら

VBAのプログラミング能力を客観的に示したい場合には「VBAエキスパート試験」があります。

特に「スタンダード」の方は上級者向けです。

あなたが社内業務の改善を行う立場であっても、VBAで作成したシステムをお客様に納める立場であっても、この資格は信頼や安心につながるでしょう。

以下の公式テキストが販売されています。



プログラミングの一般教養

「独学プログラマー」というプログラミングの魅力を解説した書籍があります。

これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。

今はAIにコードを尋ねれば、答えが返ってくる時代です。

しかし、この本からは「コード」以上に、プログラミングに向き合う姿勢や考え方を学ぶことができるでしょう。


こちらの記事でも紹介しています。もしよろしければご覧ください。

【初心者歓迎】無料相談受付中 

運営者・ポテ

いつもありがとうございます!

限られた時間をより良く使い、日本の生産性を高めたい──

みんなの実用学を運営するソフトデザイン工房では、業務整理や業務改善アプリケーション作成のご相談を承っております。

お気軽にご相談ください。


こちらの記事でも紹介しております。

おわりに

運営者・ポテ

ご覧いただきありがとうございました!

この記事では、Excel VBA で「ファイル名を変更する方法」を解説しました。

お問い合わせやご要望がございましたら、「お問い合わせ/ご要望」フォームまたはコメント欄よりお知らせください。

この記事が皆様のお役に立てれば幸いです。

なお、当サイトでは様々な情報を発信しております。よろしければトップページもあわせてご覧ください。

この記事を書いた人

運営者・ポテソフトデザイン工房|日々の業務にちょうどいい自動化を
■人生を追求する凡人 ■日本一安全で、気の向くままに自分の時間を過ごせる、こだわりのキャンプ場を作るのが夢 ■ソフトデザイン工房運営(個人事業者) - 業務改善アプリケーションをご提供 ■人生は時間そのもの。ひとりでも多くの人が「より良い人生にするために時間を使って欲しい」と願い、仕事のスキルの向上、余暇の充実、資産形成にチャレンジ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です