【Excel】「xlsx」で保存したのにマクロが消えた!Excelの保存形式によるVBAコード消失と対処法

【Excel】「xlsx」で保存したのにマクロが消えた!Excelの保存形式によるVBAコード消失と対処法
🛡️ 超解決

Excelで作成したVBAマクロが、保存形式を「xlsx」にした途端に消えてしまった経験はありませんか。

本来、マクロを含むファイルは「xlsm」形式で保存する必要があります。

しかし、誤って「xlsx」で保存してしまい、大切なマクロコードが失われてしまうケースは少なくありません。

この記事では、なぜ「xlsx」形式で保存するとマクロが消えるのか、その原因と具体的な対処法を解説します。

【要点】Excelの保存形式とVBAコード消失のメカニズム

  • xlsx形式: 標準的なExcelファイル形式であり、マクロやVBAコードを含まない。
  • xlsm形式: マクロ有効ブック形式であり、VBAコードやマクロを保存できる。
  • VBAコード消失の原因: マクロを含むブックをxlsx形式で保存すると、ExcelはVBAコードを削除して保存するため。

ADVERTISEMENT

Excelの保存形式とVBAコードの関係性

Excelには複数のファイル保存形式が存在します。その中でも、VBAマクロを含むファイルを保存する際に重要なのが「xlsx」と「xlsm」の2つの形式です。

「xlsx」は、Excelの標準的なファイル形式として広く使われています。この形式は、表計算データやグラフ、書式設定などを保存するために設計されており、マクロやVBAコードは含まれません。

一方、「xlsm」は「マクロ有効ブック」と呼ばれる形式です。この形式で保存されたファイルには、VBAコードやマクロを格納する領域が確保されており、作成したマクロをそのまま保持することができます。

お探しの解決策が見つからない場合は、こちらの「Excelトラブル完全解決データベース」で他のエラー原因や解決策をチェックしてみてください。

なぜ「xlsx」で保存するとマクロが消えるのか

ExcelでVBAコードを含むブックを「xlsx」形式で保存した場合、Excelは自動的にVBAプロジェクト(マクロコード)を削除してファイルを保存します。これは、「xlsx」形式がVBAコードを格納するための構造を持っていないためです。

ユーザーが意図せず「xlsx」形式で保存を確定した場合、Excelは「マクロを含まない形式に変換されますが、保存しますか?」といった警告を表示することがあります。この警告を無視して保存を進めると、VBAコードは失われてしまいます。

この動作は、Excelが「xlsx」形式を「マクロを含まない、よりシンプルなデータ保存形式」として定義していることに起因します。そのため、マクロを維持したい場合は、必ず「xlsm」形式で保存する必要があります。

マクロが消えてしまった場合の対処法

誤って「xlsx」形式で保存してしまい、VBAコードが消えてしまった場合でも、復旧できる可能性があります。ただし、復旧できるかどうかは、保存後の操作状況に依存します。

1. 直前に「上書き保存」した場合(復旧の可能性あり)

最も可能性が高いのは、マクロが消えた直後に「名前を付けて保存」を行わず、「上書き保存」のみを行った場合です。この場合、Excelの「元に戻す」機能を使って、VBAコードを復元できることがあります。

  1. Excelの「元に戻す」機能を使用する
    Excelの画面左上にある「元に戻す」ボタン(左向きの矢印アイコン)をクリックします。もしくは、キーボードショートカットのCtrl + Z を押します。
  2. VBAコードが復元されるか確認する
    「元に戻す」操作を繰り返すことで、直前の「xlsx」形式での保存操作を取り消し、VBAコードが復元されるか確認します。
  3. 「xlsm」形式で保存する
    VBAコードが復元されたことを確認したら、必ず「ファイル」タブから「名前を付けて保存」を選択し、ファイルの種類を「Excelマクロ有効ブック (*.xlsm)」に変更して保存します。

2. 「名前を付けて保存」で「xlsx」を選択した場合(復旧は困難)

「名前を付けて保存」で明示的に「xlsx」形式を選択して保存した場合、ExcelはVBAコードを削除した上で新しいファイルを保存します。この場合、「元に戻す」機能は直前の操作にしか適用されないため、すでに「xlsx」形式で保存されたファイルを開いた状態では、VBAコードを復元することはできません。

この状況でVBAコードを復旧するには、以下のいずれかの方法を試す必要があります。

2-1. 元のファイル(xlsm形式)が別途残っているか確認する

もし、誤って「xlsx」で上書き保存する前に、元のマクロ有効ブック(xlsm形式)を別の名前で保存していたり、バックアップを取っていたりする場合は、そのファイルを使用します。

  1. バックアップファイルを開く
    元のxlsm形式のファイルを、ファイルエクスプローラーなどから開きます。
  2. VBAコードを確認する
    開いたファイルに、目的のVBAコードが含まれているか確認します。
  3. 「xlsm」形式で再保存する
    確認後、再度「名前を付けて保存」から「Excelマクロ有効ブック (*.xlsm)」を選択して保存し直します。

2-2. Excelの自動保存機能や一時ファイルを探す

Excelには、予期せぬ終了に備えて自動保存機能や一時ファイルが作成されることがあります。これらの中に、VBAコードが残っているファイルが見つかる可能性もゼロではありません。

  1. Excelの自動保存フォルダを確認する
    Excelの「ファイル」>「オプション」>「保存」タブから、自動保存ファイルの場所を確認できます。そのフォルダ内を検索してみてください。
  2. Windowsの一時ファイルフォルダを確認する
    Windowsの一時ファイルフォルダ(通常は「%temp%」フォルダ)にも、Excelの一時ファイルが残っていることがあります。ファイル名に「Excel」やブック名の一部が含まれるものを探してみてください。
  3. ファイル拡張子を「.xlsm」に変更してみる
    見つかった一時ファイルやバックアップファイルに、拡張子「.xlsm」を付けて開けるか試してみてください。

注意点: この方法は確実ではなく、見つかったファイルが破損していたり、VBAコードが含まれていなかったりする可能性も高いです。あくまで最終手段として試みてください。

ADVERTISEMENT

Excelの保存形式に関する誤解しやすい点

Excelの保存形式は、機能や互換性に関わる重要な要素です。特にVBAマクロを扱う際には、正しい知識が不可欠です。

「xlsx」はマクロを保存できない

繰り返しになりますが、「xlsx」形式はマクロやVBAコードを保存できません。これはExcelの仕様であり、バージョンによる違いはありません。

もし、マクロを含むブックを「xlsx」で保存してしまった場合、ExcelはVBAコードを削除して保存します。これは、Excelが「xlsx」形式を「マクロを含まないデータファイル」として定義しているためです。

「.xls」形式との違い

古いExcelバージョン(Excel 2003以前)では、「.xls」形式が標準でした。この「.xls」形式はマクロを保存できましたが、最新の「.xlsx」形式に比べてファイルサイズが大きくなる傾向がありました。

Excel 2007以降では、「.xlsx」形式が標準となり、ファイル構造がXMLベースに変更されました。そのため、「.xls」形式で保存されたマクロ有効ブックを「xlsx」形式で保存しようとすると、マクロが消えるという現象が発生します。

セキュリティ警告について

Excelでは、マクロを含むファイルを開く際にセキュリティ警告が表示されることがあります。これは、悪意のあるマクロが実行されるリスクがあるためです。この警告が表示された場合は、「コンテンツの有効化」をクリックしないとマクロは実行されません。

「xlsx」形式で保存されたファイルにはマクロが含まれていないため、このセキュリティ警告は表示されません。しかし、これは「マクロが消えた」という事実を裏付けるものであり、喜ばしいことではありません。

VBAコード消失を防ぐための予防策

大切なVBAコードを失わないためには、日頃から予防策を講じることが重要です。

1. ファイル保存時の確認を徹底する

ファイルを保存する際は、必ずファイルの種類を確認する習慣をつけましょう。「名前を付けて保存」ダイアログボックスで、「Excelマクロ有効ブック (*.xlsm)」が選択されているかを必ずチェックしてください。

2. 自動保存の設定を確認・活用する

Excelの自動保存機能を有効にしておくことで、万が一のファイル消失に備えることができます。設定方法は前述の通り、「ファイル」>「オプション」>「保存」タブから確認・変更できます。

自動保存の間隔を短く設定しておくと、より頻繁にファイルが保存されるため、復旧できる可能性が高まります。

3. 定期的なバックアップを行う

重要なブックや複雑なVBAコードを含むブックについては、定期的にバックアップを作成することをお勧めします。バックアップは、別のフォルダや外部ストレージに保存しておくと安心です。

手動でのバックアップに加え、OneDriveなどのクラウドストレージのバージョン履歴機能を利用するのも有効な手段です。

4. VBAプロジェクトをエクスポートしておく

さらに確実な方法として、VBAプロジェクト全体をエクスポートしておくことが挙げられます。これにより、万が一ブックファイルが破損した場合でも、VBAコードを個別のファイルとして復元できます。

  1. VBAエディタを開く
    Excelでブックを開き、Alt + F11 キーを押してVBAエディタを開きます。
  2. プロジェクトエクスプローラーを表示する
    VBAエディタのメニューから「表示」>「プロジェクトエクスプローラー」を選択します。(表示されていない場合)
  3. VBAプロジェクトを右クリックする
    プロジェクトエクスプローラーで、保存したいVBAプロジェクト(通常はブック名)を右クリックします。
  4. 「.vba」ファイルとしてエクスポートする
    表示されたメニューから「.vba ファイルとしてエクスポート」を選択します。
  5. 保存場所とファイル名を指定する
    エクスポートするファイル名と保存場所を指定して保存します。

このエクスポートした「.vba」ファイルは、後からVBAエディタの「ファイル」>「インポート ファイル」から読み込むことで、VBAプロジェクトを復元できます。

まとめ

ExcelでVBAマクロが消えてしまう問題は、保存形式の誤りが主な原因です。

「xlsx」形式はマクロを保存できず、「xlsm」形式のみがVBAコードを保持できます。

誤って「xlsx」で保存してしまった場合は、「元に戻す」機能やバックアップの確認で復旧を試みてください。

今後は、保存時のファイル形式確認と、定期的なバックアップ・VBAプロジェクトのエクスポートを習慣づけることで、大切なマクロコードを守りましょう。

📊
Excelトラブル完全解決データベースこの記事以外にも、様々なエラー解決策をまとめています。困った時の逆引きに活用してください。

ADVERTISEMENT

この記事の監修者
📈

超解決 Excel・Word研究班

企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel・Word運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。ExcelとWordを使った「やりたいこと」「困っていること」「より便利な使い方」をクライアントの視点で丁寧に提供します。

🏆
超解決 Excel検定 あなたのExcel実務能力を3分で測定!【1級・2級・3級】