Excelブックは一度閉じないと名前を変更できない

Excelブックのファイル名はファイルが開いている状態では変えることが出来ません。ファイル名を変えたい場合はブックを閉じる必要があります。

ブックを閉じたあとにエクスプローラでファイル名の変更を行って再度開く、という流れになりますが結構手間です。ブックをショートカットで開いている場合は元のブックのフォルダまで行ってファイル名を変えなければならず、さらに時間が掛かります。

そこで、ブックを開いたままでファイル名を変更する方法を紹介します。

処理の流れ

Excelの仕様上、ファイル名を変更したい場合はどうしても一度閉じなければなりません。これはVBAでやっても同じです。

なので、マクロでは「保存」→「閉じる」→「ファイル名を変更」→「再度開く」という流れの処理になります。

そのため、このマクロはファイル名を変更したいブックに書くと途中でブック自体が閉じられてしまい想定通りの動作をしません。そのため個人用マクロブック(Personal.xlsb)に書いて実行することをお勧めします。

ブックを開いたままファイル名を変更するコード

コード説明

処理の流れは先に書いた通りでコメントに書いたままですが、以下のようになります。

  1. 保存してよいか確認メッセージを出す。キャンセル時は以降の処理を行わない。
  2. アクティブブックを保存する。未保存のブックの場合はカレントディレクトリにBook1であればBook1.xlsxとして保存されます。
  3. 事前にアクティブブックのファイル名とフルパスを取得しておく。
  4. ファイル保存ダイアログを利用して変更後のファイル名を入力して保持しておく。
  5. キャンセルした場合やファイル名が変更されていない場合は以降の処理を行わず処理を抜ける。
  6. アクティブブックを閉じる。
  7. ファイル名を変更する。
  8. ファイル名変更後に再度開く。

ファイル名の変更に利用しているのがApplication.GetSaveAsFilenameメソッドです。ブックが置いてあるフォルダを初期表示するようにし、ダイアログのタイトルを”変更後ファイル名”として既定のタイトルから変えています。GetSaveAsFilenameメソッド自体はダイアログを表示するだけでファイル名を変更することはありません。ダイアログで入力したファイル名を保持するための役割をします。

ダイアログでキャンセルボタンや保存ボタンやウィンドウの×ボタンを押すと、入力結果が戻り値として取得できます。その取得値でキャンセルボタンやファイル名が変わらなかったかどうかの判定をして、変更されなかった場合は以降の処理をしないようにしています。キャンセルボタンかウィンドウの×ボタンを押した場合は文字列の”False”が返され、保存ボタンを押した場合はファイル名欄の名前のフルパスが返されます。

先にも書きましたが、このマクロはどのブックにも利用できるように個人用マクロブックに登録することをお勧めします。

使い方

  1. 普段通りにブックを開きます。
  2. ChangeOpenBookName関数を実行します。
  3. ファイル名変更前に保存してよいか確認するメッセージボックスが表示されます。よければOKを押します。キャンセルボタンを押すと以降の処理は行われません。
  4. 変更後ファイル名ダイアログが表示されます。ファイル名欄に変更後のファイル名を入力します。キャンセルボタンを押すと以降の処理は行われません。
  5. アクティブブックが一度閉じられ、変更後ファイル名ダイアログで入力したファイル名に変更され、ファイル名を変更後のブックが再度が開きます。