この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:guest
更新日時:2026-06-11 07:07:02

タイトル: 次の機能はマクロなしのブックに保存できません
SEOタイトル: Excel 「次の機能はマクロなしのブックに保存できません」の原因と対処

この記事の要点
  • Excel で 「次の機能はマクロなしのブックに保存できません」 = ブック内に VBA マクロが含まれているが、保存形式が .xlsx (マクロなし)
  • 対処1: マクロ有効ブック (*.xlsm) として保存(推奨)
  • 対処2: VBA エディタでマクロを削除してから .xlsx 保存
  • Form コントロール / ActiveX もマクロ扱いになる場合あり
  • 企業 IT ポリシーで .xlsm が禁止されている場合は Power Query / Office Scripts で代替

エラーメッセージ

Microsoft Excel

次の機能はマクロなしのブックに保存できません:
  ・VB プロジェクト

これらの機能を含むファイルを保存するには、[いいえ] をクリックして
Excel マクロ有効ファイル形式を選択してください。

[はい]    [いいえ]    [ヘルプ]

このメッセージは Excel が「ブックに VBA / マクロが含まれているのに、それを保持できないファイル形式で保存しようとしている」と警告するものです。

.xlsx と .xlsm の違い

拡張子名称マクロ保持用途
.xlsxExcel ブック不可マクロなし共有用
.xlsmExcel マクロ有効ブック可能マクロあり業務ファイル
.xlsbExcel バイナリブック可能大量データ・高速読込
.xlsExcel 97-2003 形式可能(古い)互換性用
.xltmマクロ有効テンプレ可能テンプレ配布
.xlamアドイン可能機能拡張配布

対処1: マクロ有効ブック (.xlsm) として保存(推奨)

  1. 「いいえ」をクリックして警告ダイアログを閉じる
  2. ファイル → 名前を付けて保存
  3. ファイルの種類のドロップダウンから 「Excel マクロ有効ブック (*.xlsm)」 を選択
  4. ファイル名は同じで OK(拡張子のみ .xlsm に)
  5. 「保存」

対処2: マクロを削除して .xlsx 保存

マクロが不要な場合(特に他者から受け取ったファイルで、マクロを使わない場合)は VBA を削除します。

1. Alt + F11 で VBA エディタを開く
2. 左ペインのプロジェクトツリーを展開
   - VBAProject (Book1.xlsx)
     - Microsoft Excel Objects
       - Sheet1, Sheet2, ...
       - ThisWorkbook
     - 標準モジュール
       - Module1, Module2, ...
3. 各モジュールを右クリック → 「Module1 の解放」
4. 「エクスポートしますか?」→「いいえ」
5. Sheet/ThisWorkbook のコードもすべて削除(コードペインで全選択 → Delete)
6. Excel に戻る → 上書き保存

原因: 何がマクロ扱いされるか

VBA だけでなく、以下も警告の対象になります:

  • 標準モジュール / クラスモジュール / フォーム
  • シート / ThisWorkbook のイベントプロシージャ(Worksheet_Change 等)
  • ActiveX コントロール(フォームのコマンドボタンなど)
  • 古い Excel 4.0 マクロシート(XLM)
  • 名前定義のうち =EVALUATE() 等を使った関数マクロ

マクロが混入したかの確認方法

方法1: VBA エディタ
  Alt + F11 → プロジェクトツリーで Module/Class が存在するか

方法2: 開発タブ
  ファイル → オプション → リボンのユーザー設定
  → 右側で「開発」にチェック → OK
  → 開発タブ → Visual Basic / マクロ で確認

方法3: ファイル名から推測
  *_master.xlsm / *_業務.xlsm 等のリネーム履歴を確認

方法4: アンチウイルスログ
  業務 PC で .xlsm がブロックされた履歴を確認

対処3: CSV / .xlsb で保存(用途別)

用途推奨形式
マクロを残して保存.xlsm
マクロ不要・互換性重視.xlsx
大量データ(10 万行超).xlsb(バイナリ・高速)
システム間連携.csv(UTF-8 BOM 付き)
レガシー Excel と共有.xls(Excel 97-2003)

マクロを使わない代替手段

企業 IT 部門の方針で .xlsm が禁止されているケースは多いです。代替を検討:

Power Query

データの取り込み・加工・更新は Power Query で組めば .xlsx のままマクロ不要です。

  • データタブ → データの取得 → ファイル / DB / Web から
  • クエリエディタで整形(フィルタ / 結合 / 集計)
  • 「閉じて読み込む」でシートに反映
  • 「すべて更新」でデータ再取得

Power Automate

ファイル操作・メール送信・他システム連携は Microsoft Power Automate で実装。

Office Scripts(Excel for the web / 365)

// Office Scripts は TypeScript ベース・クラウド保存
function main(workbook: ExcelScript.Workbook) {
    const sheet = workbook.getActiveWorksheet();
    const range = sheet.getRange("A1:A100");
    range.setValues(/* ... */);
}

Office Scripts は VBA とほぼ同等のシート操作を、クラウド保存・組織内ガバナンス下で実行できます。

企業 IT ポリシーでの .xlsm 制限

制限背景回避
.xlsm をメール添付禁止マクロ感染のリスクSharePoint / Teams 共有
マクロ自動実行を完全ブロックEmotet 等のマクロウイルス対策署名付きマクロ / 信頼できる場所
外部受領ファイルは保護ビュー不審マクロ実行防止編集を有効にする時要注意
SaaS 連携で .xlsm 不可API 標準形式が .xlsxPower Query / API 経由に変更

署名付きマクロ(証明書)

業務利用で .xlsm を承認するには、デジタル署名を付けて配布元を保証する方法があります。

1. VBA エディタ → ツール → デジタル署名
2. 社内 PKI が発行したコード署名証明書を選択
3. 署名 → ファイル保存
4. 受領側は「信頼できる発行元」リストに発行者を追加
5. → マクロ警告なしで実行可能

FAQ

Q: 「はい」をクリックしたらマクロが消えた
A: 警告で「はい」= .xlsx のままマクロ削除して保存、です。元ファイルから復元できなければ復旧不能。常に「いいえ」を選んで .xlsm にしましょう。

Q: .xlsm にしても他のメンバーがマクロ警告を解除できない
A: Excel オプション → トラスト センター → マクロの設定で「警告を表示してすべてのマクロを無効にする」が標準。「信頼できる場所」にファイル保存フォルダを追加すると警告なしになります。

Q: マクロのコードを残したいが、共有時はマクロ無効にしたい
A: ThisWorkbook の Workbook_Open イベントで Application.EnableEvents = False 等の対策、もしくは「信頼できる場所」外では自動実行されないので通常運用で OK。