Excel のファイルを開いて作業しつつ、ファイル名を変更したいときってありませんか?
ファイル名を変更するときって、とりあえず上書き保存してファイルを閉じてからファイル名を変更しますよね。
作業を継続するためには再度そのファイルを開く必要があります。
これを手動でやるとけっこう面倒なので、マクロを作ってみました。
ファイルを開いたまま名前を変更することができます。
1、ファイルを開いたまま名前を変更する仕組み
さて、まずどのような仕組みにしたかお話ししますね。
「ファイルを開いたまま名前を変更」と書きましたが、厳密には素早くファイルを閉じて再度開いています。
マクロで自動化することで、開いたままとほぼ同じ状態を作り出したということですね。
ファイル名の変更は必ずファイルを閉じてから(あるいは閉じると同時に)でなければできません。
さて仕組みですが
マクロを実行すると次のように、現在のファイル名が入ったインプットボックスが出てきます。
(マクロはショートカットキーで実行すると良いでしょう。)
ファイル名って少しだけ変更したい場合が多いですよね。
今の「テスト.xlsm」というファイル名を頭に日付を付けて「19012 テスト.xlsm」と変更してみます。
変更して「OK」を選択すれば、それだけで見た目上はファイルが開いたままファイル名を変更できるようにしてあります。
この時、実際には以下の流れが高速で行われています。
・別名でファイルを保存して閉じる
・保存したファイル ↑ を開く
・元のファイルを削除する
2、ファイルを開いたまま名前を変更する VBA コード
さて、VBA コードを示します。
先にも書いたようにこのコードによるマクロばショートカットキーを設定して実行すると良いでしょう。
全 VBA コード
全 VBA コードは以下のようになります。
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 |
Sub File_Name() Dim Cur_Path As String 'ファイルのパス' Dim Cur_Name As String '元のファイル名' Dim New_Name As String '変更後のファイル名' 'ファイルのパス、ファイル名の読み込み' Cur_Path = ThisWorkbook.Path Cur_Name = ThisWorkbook.Name 'インプットボックスの表示とファイル名の変更' New_Name = InputBox(Prompt:="ファイル名を入力して下さい。", Default:=Cur_Name) '「キャンセルボタン」または「×ボタン」を押した場合' If New_Name = "" Then Exit Sub Else End If 'ファイルの別名保存して閉じて再度開く' ThisWorkbook.SaveAs Cur_Path & "\" & New_Name Workbooks.Open Cur_Path & "\" & New_Name 'ファイルの別名保存して閉じて再度開く' If Cur_Path & "\" & New_Name <> Cur_Path & "\" & Cur_Name Then Kill Cur_Path & "\" & Cur_Name Else End If End Sub |
VBA コード説明
変数の定義
まずは変更の定義です。
1 2 3 |
Dim Cur_Path As String 'ファイルのパス' Dim Cur_Name As String '元のファイル名' Dim New_Name As String '変更後のファイル名' |
ファイルのパス、元のファイルの名前、変更後のファイルの名前を文字列型で定義しています。
ファイルのパス、ファイル名の代入
次は変数にファイルのパスとファイル名を代入するところです。
1 2 |
Cur_Path = ThisWorkbook.Path Cur_Name = ThisWorkbook.Name |
ThisWorkbook.Path とは、この VBA コードが書かれたフォルダのパスです。
ファイル名が「テスト.xlsm」のファイルがデスクトップにあったとします。
ファイルのパスは以下のようになります。
「C:\Users\aaa\Desktop\テスト.xlsm」
この場合、ThisWorkbook.Path はファイル名よりも前の部分の
「C:\Users\aaa\Desktop」
になります。
これを変数 Cur_Path に代入します。
また ThisWorkbook.Name はファイル名になり、今回の場合
「テスト.xlsm」
になります。
これを変数 Cur_Name に代入します。
インプットボックスの表示とファイル名の変更
インプットボックスを表示すると同時に、現在のファイルの名前を表示させています。
1 |
New_Name = InputBox(Prompt:="ファイル名を入力して下さい。", Default:=Cur_Name) |
「Prompt:=”ファイル名を入力して下さい。”」 とすることで、このメッセージがボックスに表示されます。
また、「Default:=Cur_Name」とすることで、ボックスが開いた状態で現在のファイル名が入っています。
今回は「テスト.xlsm」
なぜこうしてあるかというとファイル名って少し変更したいだけの場合が多いからです。
日付を付けたり、「-2」「-3」のように番号をくっつけたり。
ボックスに希望するファイル名を入力して「OK」を押せば、変数 New_Name にそのファイル名が代入されます。
今回、元のファイルの頭に日付を付けて「190123 テスト.xlsm」としてみます。
これで、変数 New_Name に「190123 テスト.xlsm」という新しいファイル名が入りました。
「キャンセルボタン」または「×ボタン」を押した場合
先のインプットボックスで「キャンセルボタン」または「×ボタン」を押した場合、VBA コードを終了させます。
1 2 3 4 |
If New_Name = "" Then Exit Sub Else End If |
その場合、変数 New_Name には “”(空白)が入ることになります。
ファイルの別名保存して閉じて再度開く
さて、次はファイル名を別名で保存してから、再度開く処理を行っています。
1 2 |
ThisWorkbook.SaveAs Cur_Path & "\" & New_Name Workbooks.Open Cur_Path & "\" & New_Name |
SaveAs メソッドは、名前を付けて保存を行うメソッドです。
以下のように記述して使います。
今回は、新しいファイルのパス「Cur_Path & “\” & New_Name」を指定して保存します。
Workbooks.Open メソッドは、ファイルを開くメソッドです。
以下のように記述して使います。
今回は、新しいファイルのパス「Cur_Path & “\” & New_Name」を指定して開きます。
つまり、先に別名で保存したファイルをすぐに開くということですね。
元のファイルを削除する
最後に Kill 関数を使って、ファイル名を変更した場合に元のファイル「テスト.xlsm」を削除します。
(同じファイル名「テスト.xlsm」の場合は削除しません。)
1 2 3 4 |
If Cur_Path & "\" & New_Name <> Cur_Path & "\" & Cur_Name Then Kill Cur_Path & "\" & Cur_Name Else End If |
Kill 関数は以下のように記述して使います。
ファイルのパスは「Cur_Path & “\” & Cur_Name」
元のファイルのパスですね。
これによって変更前の元のファイルは削除されました。
ファイル名の変更
以上のコードを実行すると、ファイルを開いた状態で名前を変更したように見えます。
デスクトップ上に元のファイルを置いた状態で実行すると
ファイルの名前が変わって同じくデスクトップ上に表示されます。
以下に動画も作成しましたので確認下さい。
マクロはショートカットキー「Ctro + Shift + A」で実行しています。
デスクトップの左側にあるファイルの名前が新しくなることを確認して下さい。
(ファイルは開いたままに見えます。)
3、まとめ
Excel VBA(マクロ)ファイルを開いたまま名前を変更する方法についてお話ししました。
手動でファイルを一度閉じてからファイル名を変更するよりは早いです。
頻繁に出番があるようなケースであれば、マクロとしてファイルに組み込んでおくと良いかと思います。
編集後記
昨日(1/22)は償却資産申告書の作成が中心でした。
また、夜には 1/28 に開催するセミナーの準備を行いました。
30代半ばから税理士になった体験談セミナーに向けて準備進めて行きます。