【簡単Excelマクロ・VBA】ファイル名を変更する|Name関数|ファイル操作 #009
いつもありがとうございます。
ノンプログラマー向け「Excelマクロ・VBA解説シリーズ」へようこそ。
本稿では、「ファイル名を変更する方法」を解説いたします。
ことばの意味
- ノンプログラマー
プログラミングを主な仕事にしていない人たちのことです。 - マクロ
VBAを使って作成される「機能」のことです。 - VBA
Visusal Basic for Application の略で、プログラミング言語のことです。
関連記事
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
には、現在のワークブックが保存されているフォルダのパスThisWorkbook.Path
に続いて「\001_変更前\変更前のファイル名1.xlsx
」というファイルパスが代入されます。new_filename
には、現在のワークブックが保存されているフォルダのパスThisWorkbook.Path
に続いて「\002_変更後\変更後のファイル名1.xlsx
」というファイルパスが代入されます。
' ファイル名を変更する
Name original_filename As new_filename
ここがファイル名を変更している部分です。original_filename
を new_filename
に変更しています。
Name関数の基本構文は以下の通りです。
Name 変更前のファイル名(ファイルパス) As 変更後のファイル名(ファイルパス)
マクロ実行結果をご覧いただくと分かる通り、Name
関数を使用すると、ファイル名を変更する際にoriginal_filename
は消去され、new_filename
が生成されます。
以上が、VBAでファイル名を変更する方法です。ありがとうございました。
【発展偏】VBAでフォルダ内のすべてのファイルの名称を変更する方法
前述のセクションで解説した方法は、変更したいファイルが1つで、しかもファイル名が固定値の場合にのみ有効です。
そのような場合、わざわざコードを書くより、手作業でファイル名を変更する方が早いことは言うまでもありませんね。
マクロが本領を発揮するのは、多数のファイル名を一括で変更する必要がある場合や、条件に応じて自動的に処理を切り替える場合です。
ここでは、その例として次のような場合のコードを紹介します。
001_変更前
のフォルダに100個のファイルが入っている。002_変更後
のフォルダにファイル名を変更したファイルを出力する。- この際、条件に合致しないファイルは除外する。
次にコードを示していきます。このマクロは次のように動作します。
- マクロで実行
001_変更前
フォルダに入っている100個のファイルをシートのB列に書き出す。 - 人手で実行
B列をC列にコピーし、Excelの置換機能などで変更したいファイル名に修正する。 - マクロで実行
C列で指定した名称にファイル名を変更し002_変更後
フォルダにファイルを出力する。
まず 1 のコードと、その実行結果を次に示します。
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)でマクロを実行する方法もありますが、手間がかかります。
そこで、右クリックメニューから図形にマクロを登録しておくと便利です。一度図形にマクロを登録してしまえば、以後はこの図形をクリックするだけで、マクロがスタートします。
次に 2 の作業内容を示します。ここは、手作業で実施する部分です。
B列にマクロで書き出したファイル名が入力されていますので、これをC列にコピーします。その後、Excelの置換機能(Ctrl + H)などで修正したいファイル名に修正します。
最後に 3のコードと、その実行結果を示します。
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使用経験約20年
実務に使用するマクロを多数作成してきました。 - Python 3 エンジニア認定基礎試験
経済産業省が定めたガイドライン「ITスキル標準(ITSS)」に掲載されている民間資格です。
VBAプログラミングスキルアップのための参考情報
ここでは参考図書を紹介いたしますが、これらに限らず自分に合うものを選ぶことが重要だと考えております。皆様の、より一層のご成功を心よりお祈りしております。
VBAプログラミングのスキルアップ
学習用としてもハンドブックとしても役立つ便利な書籍がこちらです。価格はやや高めですが、その内容は非常に充実しています。相応のスキルを身に付けるためには、こうしたしっかりとした書籍を一冊持っておくと良いでしょう。
入門書に関しては、どの書籍も大きな違いはありません。あまり迷うことに時間をかけるよりは、手頃なものを一冊選んでみると良いでしょう。VBAの入門書は数多く出版されていますので、興味がある方はぜひチェックしてみてください。
甲乙つけがたい場合、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。
\チェックしてみよう/
\チェックしてみよう/
\チェックしてみよう/
VBAのプログラミング能力を客観的に証明したい場合には「VBAエキスパート試験」があります。この試験はVBAの知識を公式に認定するものです。VBAの総合的な能力獲得を目指す方に適しています。以下の公式テキストが販売されております。
プログラミングの一般教養
「独学プログラマー」というプログラミングの魅力を解説した書籍があります。これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。
こちらの記事でも紹介しております。もしよろしければご覧ください。