EXCEL VBA ファイル名の変更・ファイルの一括変更・ファイルの指定変更 (ファイルの操作)
EXCEL VBA ファイル名の変更・ファイルの一括変更・ファイルの指定変更 (ファイルの操作・取得)
社内の業務で色々なファイルを取り扱う事があると思いますが、10ファイル程度でしたら、手動で取り扱う事が出来ると思いますが、100件・1000件以上となると、とても大変です。ここで説明するのは、ファイル名の一括変更方法です。VBAプログラムを利用する事で、連続でファイル名を変更する事が出来ます。それでは、サンプルプログラムを交えて説明いたします。
●ファイルオブジェクト Name
Name 旧ファイル名 As 新ファイル名
※ファイル名を変更します。
●【FileSystemObject】とは、さまざまなファイルやフォルダー情報を調べたり、ファイルやフォルダーをVBAプログラムで操作する時に、FileSystemObjectを利用して簡単に情報取得や操作を行う事が出来ます。これから説明するプログラムにも利用していますので、必ず下記の通りに設定して下さい。
●FileSystemObjectを利用するための参照設定
【設定方法】
①VBE(Visual Basic Editor)から【ツール】を選択する
②【参照設定】をクリックする
③【参照設定ーVBAProject】の中から「Microsoft Scripting Runtime」にチェックする
④【OK】ボタンをクリックして設定します。
指定したファイル名を変更する (ファイルパス設定)
下記のサンプルプログラムは、指定したファイル名を変更するサンプルプログラムです。
旧ファイル名を新ファイル名に変更します。事前にA列の【旧ファイル名】とB列の【新ファイル名】を設定します。
プログラムを実行すると、指定した【旧ファイル名】を【新ファイル名】に変更されます。
【注意】新ファイル名は、同じファイル名を割り振るとエラーになります。なお、サンプル②では、このエラーを解消する方法も説明いたします。
【下記のプログラムを実行準備】
① シート名を「Sheet1」
② ”C:\DATA”のフォルダーを作成します。
③ ②で作成したDATAフォルダー内に、アンケート①~⑤.pdfを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
' '******** AKIRA55.COM ******* https://akira55.com/file_change_name ' ' Sub FilenameChange01() '指定したファイル名を変更します。 Dim ws01 As Worksheet Dim lRow, I As Long Dim FolderName, OldFile, NewFile As String Set ws01 = Worksheets("Sheet1") FolderName = "C:\DATA" '保存されている保存先(フォルダー) lRow = ws01.Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得 For I = 6 To lRow '最終行まで繰り返す OldFile = FolderName & "\" & ws01.Cells(I, "A") NewFile = FolderName & "\" & ws01.Cells(I, "B") MsgBox NewFile Name OldFile As NewFile 'ファイル名を変更します。 Next I End Sub ' |
(画面クリックして拡大)
指定したファイル名を変更する (新しいファイル名を確認してエラー制御)
下記のサンプルプログラムは、サンプル①プログラムの応用になります。旧ファイル名から新ファイル名へ変換しますが、今回のプログラムは、機能追加として下記の機能を追加しました。
【機能追加】
①新ファイルが変換出来るか事前にチェックする。
②旧ファイル名から新ファイル名へ変換した結果がC列に反映する。
【下記のプログラムを実行準備】
① シート名を「Sheet2」
② ”C:\DATA”のフォルダーを作成します。
③ ②で作成したDATAフォルダー内に、アンケート①~⑤.pdfを作成します。
注意:【FileSystemObject】の設定を必ず行って下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
' '******** AKIRA55.COM ******* https://akira55.com/file_change_name ' ' Sub FilenameChange02() 'ファイルを確認してエラー制御 Dim File_function As New Scripting.FileSystemObject Dim ws01 As Worksheet Dim lRow, I As Long Dim FolderName, OldFile, NewFile As String Set ws01 = Worksheets("Sheet2") FolderName = "C:\DATA" '保存されている保存先(フォルダー) lRow = ws01.Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得 For I = 6 To lRow 'A列の最終行まえ繰り返す OldFile = FolderName & "\" & ws01.Cells(I, "A") 'A列から旧ファイル名を取得 NewFile = FolderName & "\" & ws01.Cells(I, "B") 'B列から新ファイル名を取得 If File_function.FileExists(NewFile) = False Then 'ファイル名の存在を確認します。既に新ファイル名があれば、変換不可 Name OldFile As NewFile 'ファイル名を変更します。(旧ファイル⇒新ファイル) ws01.Cells(I, "C") = "完了" Else ws01.Cells(I, "C") = "変換不可" End If Next I End Sub ' |
(画面クリックして拡大)
指定したファイル名を変更する (新しいファイル名を確認してエラー制御)
下記のサンプルプログラムは、サンプル①+②プログラムの応用になります。基本的に旧ファイル名から新ファイル名へ変換しますが、今回のプログラムは、機能追加として下記の機能を追加しました。
●プログラムの説明
(今回のプログラムは2つのプログラムで構成されています。)
「ファイル名取得」・・・・Sub FilenameChange03()
「ファイル名変換」・・・・Sub FilenameChange04()
【機能追加】
①新ファイルが変換出来るか事前にチェックする。
②旧ファイル名から新ファイル名へ変換した結果がC列に反映する。
③ファイル名を変換するファイルをダイアログボックスから選択する(複数選択)
④旧ファイル名から新ファイル名に変換する際に、事前に新ファイル名が登録されているかチェックします。【下記のプログラムを実行準備】
・ シート名を「Sheet3」
・ 実行ボタンを作成
「ファイル名取得」・・・・Sub FilenameChange03()
「ファイル名変換」・・・・Sub FilenameChange04()
注意:【FileSystemObject】の設定を必ず行って下さい。
●「ファイル名取得」・・・・Sub FilenameChange03()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
' '******** AKIRA55.COM ******* https://akira55.com/file_change_name ' ' Sub FilenameChange03() 'ダイアログボックスを表示してファイル名一覧を作成します。 Dim File_function As New Scripting.FileSystemObject Dim lRow, I, F As Long Dim FolderName, OldFile, NewFile As String Dim FileName As Variant Dim ws01 As Worksheet Set ws01 = Worksheets("Sheet3") FileName = Application.GetOpenFilename(MultiSelect:=True) 'ダイアログボックスが表示(MultiSelect:=Trueでファイルを複数選択) If FileName(1) <> False Then FolderName = File_function.GetParentFolderName(FileName(1)) '選択した最初のファイル名からフォルダーまでのルートを取得する Else MsgBox "作業をキャンセルされました" Exit Sub 'プログラムを終了 End If lRow = ws01.Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得 ws01.Range("A6:A" & lRow + 1).ClearContents 'A列のデータ(文字列のみ)をクリアー F = 1 '選択ファイルの1件目を設定 For I = 6 To 5 + UBound(FileName) '選択したファイルの数を繰り返す。(最大値) ws01.Range("A" & I) = File_function.GetFileName(FileName(F)) 'ファイル名を順番にA列(セル)へ転記します。 F = F + 1 '次のファイル名を指定するために+1加算する。 Next I ws01.Range("A3") = FolderName '選択したフォルダーバスをセル「A3]へ転記 End Sub ' |
●「ファイル名変換」・・・・Sub FilenameChange04()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
' '******** AKIRA55.COM ******* https://akira55.com/file_change_name ' ' Sub FilenameChange04() '指定した新ファイル名を変換します。 Dim File_function As New Scripting.FileSystemObject Dim RC As Integer Dim lRow, I As Long Dim FolderName, OldFile, NewFile As String Dim ws01 As Worksheet Set ws01 = Worksheets("Sheet3") lRow = ws01.Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得 For I = 6 To lRow If IsEmpty(ws01.Range("B" & I)) = True Then MsgBox "新ファイル名を指定していないセルがあります。" Exit Sub End If Next I RC = MsgBox("選択したファイル名を変更しますか?", vbYesNo + vbQuestion, "確認") 'ファイル名変換を実行するか確認します。 If RC = vbNo Then MsgBox ("ファイル名変換をキャンセルしました。") Exit Sub 'プログラムを中断 End If FolderName = ws01.Range("A3") '保存されている保存先(フォルダーパス) For I = 6 To lRow OldFile = FolderName & "\" & ws01.Cells(I, "A") 'A列から旧ファイル名を取得 NewFile = FolderName & "\" & ws01.Cells(I, "B") 'B列から新ファイル名を取得 If File_function.FileExists(NewFile) = False Then Name OldFile As NewFile 'ファイル名を変更します。(旧ファイル⇒新ファイル) ws01.Cells(I, "C") = "完了" Else ws01.Cells(I, "C") = "変換不可" End If Next I End Sub ' |
①ファイル名を選択するとダイアログボックスが表示されます。
②ファイルを選択して、旧ファイル名としてファイル名とフルパスを取得します。
③変換する新しいファイル名を入力します。
④「ファイル名変換」ボタンをクリックします。(実行)
⑤変換結果が表示されます。
※変換結果が「完了」ならば、新ファイル名へ変換されています。
(画面クリックして拡大)
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。