Excel VBAのファイル形式|.xlsxと.xlsmの違いを解説

スポンサーリンク

「Excelのファイルって、いくつか種類があるけど何が違うの?」と疑問に思ったことはありませんか。

ファイルのアイコンは見た目がほとんど同じなので、普段はあまり気にしない方も多いと思います。しかし、VBAやマクロを使うならファイル形式の違いを知っておくことは必須です。

実は私自身、過去にファイル形式を同僚に変更されてしまい、何時間もかけて作ったマクロがすべて消えてしまったという苦い経験があります。

この記事では、Excelの主なファイル形式4種類の違いと、VBAを使う際に知っておきたい注意点をわかりやすく解説します。これを読めば、ファイル形式で失敗することはなくなりますよ。

  1. Excelの主なファイル形式4種類を比較
  2. .xlsx(Excelブック)の特徴と用途
    1. .xlsxの特徴
    2. .xlsxを使う場面
  3. .xlsm(マクロ有効ブック)の特徴と用途
    1. .xlsmの特徴
    2. .xlsmを使う場面
  4. .xls(Excel 97-2003ブック)の特徴と注意点
    1. .xlsの特徴
    2. .xlsを使う場面
  5. .xlsb(バイナリブック)の特徴と注意点
    1. .xlsbの特徴
    2. .xlsbを使う場面
  6. VBAで使うなら.xlsm|ファイル形式の変更方法
    1. .xlsxから.xlsmに変更する手順
    2. ファイル形式を変更するときの注意点
  7. VBA コードでファイル形式を確認・変換する
    1. 現在のファイル形式を VBA で確認する
    2. .xlsm 形式で保存し直す VBA コード
    3. SaveAs でつまずくエラーと FileFormat 定数の早見表
  8. よくあるトラブルと対処法
    1. マクロが消えてしまった
    2. マクロが実行できない
    3. ファイル形式がどれかわからない
    4. マクロが消えるリスクをゼロにする自動バックアップの仕組み
  9. よくある質問
    1. Q. マクロ入りのExcelファイルをメールで送るとき、どのファイル形式が安全ですか?
    2. Q. OneDriveやSharePointにxlsmファイルを保存すると自動保存が効かないのはなぜですか?
    3. Q. .xlsxと.xlsmはファイルサイズに違いがありますか?
    4. Q. .xlsb 形式はバックアップ目的に使えますか?
    5. Q. マクロ入りのテンプレートを社内配布したいのですが、どのファイル形式が良いですか?
    6. Q. xlsmファイルのVBAコードを他人に見られないようにする方法はありますか?
  10. 個人用マクロブック(Personal.xlsb)とは
    1. Personal.xlsbの特徴
    2. Personal.xlsbを作成する方法
    3. Personal.xlsbに向いているマクロの例
  11. 開いている複数ブックのファイル形式をVBAで一括確認する
    1. ワークシートモジュールへの貼り付け場所
  12. .xlsmファイルをメールで送るときの注意点と代替策
    1. 会社のメールシステムによるブロック
    2. 受信者側でマクロが無効になるケース
    3. OneDrive・SharePoint経由での共有が安全な場合も
    4. Web版Excel(Excel Online)ではVBAマクロは動かない
  13. マクロが「セキュリティ リスク」として赤くブロックされるときの対処
    1. なぜブロックされるのか(MOTW の仕組み)
    2. 対処法1:ファイルのプロパティから「許可する」を選ぶ
    3. 対処法2:信頼できる場所(Trusted Location)にフォルダを登録する
    4. 業務での運用ポイント
  14. まとめ
    1. 覚えておきたいポイント
  15. .xlamアドイン形式|チームで共通マクロを使い回す
    1. Personal.xlsb との使い分け
    2. .xlamの作り方

Excelの主なファイル形式4種類を比較

まずは、よく使われるExcelファイル形式を一覧で確認しましょう。ビジネスで使うExcelファイルは、ほとんどがこの4種類のどれかです。

ファイル形式拡張子マクロ保存主な用途
Excel ブック.xlsx不可通常のExcel作業(標準形式)
Excel マクロ有効ブック.xlsm可能VBA・マクロを使う場合(推奨)
Excel 97-2003 ブック.xls可能古いファイルとの互換性
Excel バイナリ ブック.xlsb可能大容量ファイルの軽量化

VBAやマクロを使うなら、.xlsm形式で保存するのが鉄則です。ここをおさえておけば、マクロが消えてしまうトラブルを防げます。

それでは、各ファイル形式の特徴を詳しく見ていきましょう。

.xlsx(Excelブック)の特徴と用途

.xlsxは、Excel 2007以降で標準的に使われているファイル形式です。新規ブックを作成して、何も設定を変えずに保存すると、この.xlsx形式で保存されます。

.xlsxの特徴

  • Excel 2007以降の標準形式
  • データ入力、計算、グラフ作成など通常のExcel作業に最適
  • マクロ(VBAコード)を保存することはできない
  • 行数の上限は1,048,576行、列数の上限は16,384列(XFD列)

.xlsxを使う場面

マクロを使わない通常のExcel作業であれば、この.xlsx形式のままで問題ありません。多くの会社で日常的に使われているのがこの形式です。

ただし、マクロを含むファイルを.xlsx形式で保存すると、VBAコードが完全に削除されます。保存時に警告ダイアログが表示されますが、うっかり「はい」を押してしまうと取り返しがつきません。

.xlsm(マクロ有効ブック)の特徴と用途

.xlsmは、.xlsxにマクロの保存機能を追加したファイル形式です。VBAやマクロを使うなら、このファイル形式を選びましょう。

.xlsmの特徴

  • マクロ(VBAコード)の保存が可能
  • .xlsxと同じExcel 2007以降の機能をすべて使用できる
  • ファイルを開くときに「マクロを有効にする」かどうかの確認ダイアログが表示される
  • アイコンに「!」マークがついている(.xlsxとの見分けポイント)

.xlsmを使う場面

これからマクロを作成する場合は、.xlsm形式で保存するのがベストな選択です。VBAで業務を自動化したい方は、まずこのファイル形式を覚えておいてください。

すでにVBAコードを書いたファイルがある場合も、.xlsm形式になっているか確認しておくと安心です。.xlsxのまま保存してしまうと、せっかく書いたコードが消えてしまいます。

VBAを使い始めるなら、開発タブの表示設定も必要です。設定方法は「Excel VBAの開発タブの表示方法とVBEの起動方法を初心者向けに解説」で詳しく解説しています。

.xls(Excel 97-2003ブック)の特徴と注意点

.xlsは、Excel 2007よりも前のバージョンで標準だったファイル形式です。現在では古い形式として扱われています。

.xlsの特徴

  • Excel 97から2003までの標準形式
  • マクロの保存が可能
  • 行数の上限が65,536行、列数の上限が256列(.xlsxよりも大幅に少ない)
  • ファイルサイズの制限も厳しい

.xlsを使う場面

現在の業務で新しく.xls形式のファイルを作成する必要はほとんどありません。既存の古いファイルを開く場面で見かける程度です。

もし社内に.xls形式のファイルが残っている場合は、.xlsxや.xlsmに変換しておくことをおすすめします。行数・列数の制限が緩和されるだけでなく、最新のExcel機能をフル活用できるようになります。

.xlsb(バイナリブック)の特徴と注意点

.xlsbは、バイナリ形式でデータを保存する特殊なファイル形式です。普段の業務ではあまり見かけませんが、特定の場面で役立ちます。

.xlsbの特徴

  • バイナリ形式で保存するため、ファイルサイズが小さくなる
  • 大量のデータを含むファイルでは開閉の速度も向上する
  • マクロの保存が可能
  • ファイルの中身がバイナリデータなので、XMLベースの.xlsx/.xlsmと比べて構造の透明性が低い

.xlsbを使う場面

数万行を超えるような大容量データを扱う場合に、ファイルサイズの削減効果を期待して使うことがあります。

ただし、メールで送受信するときにセキュリティソフトにブロックされる可能性がある点には注意が必要です。特別な理由がなければ、.xlsxや.xlsmを使っておくのが無難でしょう。

VBAで使うなら.xlsm|ファイル形式の変更方法

「いま使っているファイルを.xlsmに変えたい」という場合の手順を紹介します。操作はとてもシンプルです。

.xlsxから.xlsmに変更する手順

  1. 対象のExcelファイルを開く
  2. 「ファイル」タブをクリック
  3. 「名前を付けて保存」を選択
  4. 保存先のフォルダを選ぶ
  5. 「ファイルの種類」のドロップダウンを開く
  6. 「Excel マクロ有効ブック (*.xlsm)」を選択
  7. 「保存」をクリック

これだけで、ファイル形式が.xlsmに変わります。元の.xlsxファイルは残るので、安心して操作してください。

ファイル形式を変更するときの注意点

  • .xlsmから.xlsxに変更すると、マクロ(VBAコード)が完全に削除されます。この操作は元に戻せないので、十分に注意してください
  • .xlsから.xlsmに変換する場合も同じ手順で可能です
  • Microsoft 365やExcel 2021の「自動保存」機能がオンになっていると、ファイル形式の変更時に追加の確認が入ることがあります

ファイル形式を変更したあとは、VBE(Visual Basic Editor)でマクロが正しく保存されているか確認しておくと安心です。

VBAやマクロの基本的な仕組みについては「Excel VBAとマクロの違いとは?初心者向けにわかりやすく解説」もあわせて読んでみてください。

VBA コードでファイル形式を確認・変換する

手動での変換方法を知っておくのは大切ですが、VBA を使えばファイル形式の確認と変換をコードで自動化できます。複数のブックを一括処理したい場面や、保存時に形式を自動チェックしたい場面で役立ちます。

現在のファイル形式を VBA で確認する

ThisWorkbook.FileFormat プロパティに定数を照合するだけで、現在開いているブックの形式をすぐに確認できます。

Sub CheckFileFormat()
    Select Case ThisWorkbook.FileFormat
        Case xlOpenXMLWorkbook
            MsgBox "このブックは .xlsx 形式です(マクロ保存不可)"
        Case xlOpenXMLWorkbookMacroEnabled
            MsgBox "このブックは .xlsm 形式です(マクロ保存可)"
        Case xlExcel8
            MsgBox "このブックは .xls 形式です(旧バージョン)"
        Case xlExcel12
            MsgBox "このブックは .xlsb 形式です(バイナリ)"
        Case Else
            MsgBox "その他のファイル形式です(形式コード: " & ThisWorkbook.FileFormat & ")"
    End Select
End Sub

.xlsx 形式のブックでマクロを実行しようとすると「マクロが見つからない」「保存できない」などのエラーになることがあります。そのときはまずこのコードで形式を確認してみてください。

.xlsm 形式で保存し直す VBA コード

.xlsx で保存してしまったブックを .xlsm に変換するコードです。

Sub SaveAsXlsm()
    Dim newPath As String
    newPath = Replace(ThisWorkbook.FullName, ".xlsx", ".xlsm")
    ThisWorkbook.SaveAs Filename:=newPath, _
                        FileFormat:=xlOpenXMLWorkbookMacroEnabled
    MsgBox "保存完了: " & newPath
End Sub

このコードを .xlsx ファイルの VBE 上で実行すると、同じフォルダに .xlsm ファイルが新規作成されます。元の .xlsx ファイルは残ったままですので、不要であれば後から手動で削除してください。

SaveAs でつまずくエラーと FileFormat 定数の早見表

VBAでSaveAsを使っていると、「ファイル形式と拡張子が一致しません(実行時エラー 1004)」というエラーに出くわすことがあります。原因のほとんどは、ファイル名の拡張子とFileFormat引数の組み合わせが食い違っていることです。

典型的なミスパターンを見てみましょう。

' NG: 拡張子は .xlsm なのに FileFormat が xlsx の定数(51)を指定している
ThisWorkbook.SaveAs Filename:="C:worksample.xlsm", _
                    FileFormat:=xlOpenXMLWorkbook  ' ← これが原因

この場合、Excelは「.xlsmなのに中身はxlsx形式」と判断してエラーを出します。修正方法は2通りあります。

方法A:拡張子をFileFormatに合わせる

' OK: 拡張子を .xlsx にして xlsx 定数を指定
ThisWorkbook.SaveAs Filename:="C:worksample.xlsx", _
                    FileFormat:=xlOpenXMLWorkbook

方法B:FileFormat定数を拡張子に合わせる

' OK: 拡張子が .xlsm なら xlsm の定数を指定
ThisWorkbook.SaveAs Filename:="C:worksample.xlsm", _
                    FileFormat:=xlOpenXMLWorkbookMacroEnabled

どちらが正しいかはケースによりますが、拡張子を省略してFileFormatだけで決めるのが一番安全です。Excelが適切な拡張子を自動で付けてくれます。

また、保存先のフォルダが存在しないとこれもエラーになります。フォルダの有無をチェックしてから保存するのが堅実な書き方です。

Sub SaveAsXlsmSafe()
    Dim saveDir As String
    Dim newPath As String
    saveDir = "C:workbackup"
    
    ' フォルダが存在しなければ作成
    If Dir(saveDir, vbDirectory) = "" Then
        MkDir saveDir
    End If
    
    newPath = saveDir & "" & Format(Now, "YYYYMMDD_HHNNSS") & "_" & ThisWorkbook.Name
    newPath = Replace(newPath, ".xlsx", ".xlsm")
    ThisWorkbook.SaveAs Filename:=newPath, _
                        FileFormat:=xlOpenXMLWorkbookMacroEnabled
    MsgBox "保存完了: " & newPath
End Sub

DisplayAlerts = Falseでダイアログを非表示にする書き方もよく使われますが、処理後にApplication.DisplayAlerts = Trueで必ず元に戻してください。戻し忘れると、以降の警告ダイアログがすべて表示されなくなります。

FileFormat 定数の早見表

VBAで保存形式を指定するときに使う定数と数値の一覧です。数値で指定することも可能ですが、可読性のため定数名を使うのが原則です。

形式拡張子定数名数値
Excelブック.xlsxxlOpenXMLWorkbook51
マクロ有効ブック.xlsmxlOpenXMLWorkbookMacroEnabled52
バイナリブック.xlsbxlExcel1250
旧Excelブック.xlsxlExcel856
テンプレート.xltxxlOpenXMLTemplate54
マクロ付きテンプレート.xltmxlOpenXMLTemplateMacroEnabled53
アドイン.xlamxlOpenXMLAddIn55
CSV.csvxlCSV6

なお、PDFへの出力はSaveAsではなくExportAsFixedFormat xlTypePDFを使う別メソッドになります。

よくあるトラブルと対処法

ファイル形式に関連して、初心者がつまずきやすいトラブルをまとめました。事前に知っておけば焦らずに対処できます。

マクロが消えてしまった

原因: .xlsm形式のファイルを.xlsx形式で上書き保存してしまった場合に発生します。

対処法: 残念ながら、一度.xlsxで保存してしまうとVBAコードは復元できません。以下の予防策を心がけましょう。

  • 保存時に「この形式ではマクロが保存できません」という警告が出たら、必ず「いいえ」を選ぶ
  • 共有ファイルの場合は、ファイル名に「マクロあり」と明記しておく
  • 大切なマクロは定期的にバックアップを取る(VBEからコードをテキストファイルにエクスポート)

マクロが実行できない

原因: セキュリティ設定でマクロがブロックされている可能性があります。

対処法: 「ファイル」→「オプション」→「セキュリティセンター」→「セキュリティセンターの設定」→「マクロの設定」から、「警告を表示してすべてのマクロを無効にする」を選択します。これで、ファイルを開くたびにマクロを有効にするか選べるようになります。

ファイル形式がどれかわからない

対処法: ファイルのアイコンだけでは見分けにくい場合は、以下の方法で確認できます。

  • エクスプローラーで拡張子を表示する設定にする
  • Excelの「ファイル」→「情報」でファイル形式を確認
  • タイトルバーに表示されるファイル名の拡張子を確認

VBAの基本的な用語や構造については「Excel VBAのプロジェクト・モジュール・プロシージャとは?」で解説しています。

マクロが消えるリスクをゼロにする自動バックアップの仕組み

「大切なマクロは定期的にバックアップを」と言われても、毎回手動でコピーを取るのは現実的ではありません。Workbook_BeforeSaveイベントとSaveCopyAsメソッドを組み合わせれば、保存のたびにタイムスタンプ付きバックアップを自動で作る仕組みが実現できます。

SaveCopyAsは通常のSaveAsと異なり、現在のブックをそのまま維持しながらコピーだけを別名保存します。保存先や現在の編集状態を変えずにバックアップを作れるのが利点です。

' ThisWorkbook モジュールに貼り付けて使用する
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim backupDir As String
    Dim backupPath As String
    
    ' バックアップ保存先フォルダを指定(存在しなければ作成)
    backupDir = ThisWorkbook.Path & "backup"
    If Dir(backupDir, vbDirectory) = "" Then
        MkDir backupDir
    End If
    
    ' タイムスタンプ付きファイル名でコピーを作成
    backupPath = backupDir & "" & _
                 Format(Now, "YYYYMMDD_HHNNSS") & "_" & _
                 ThisWorkbook.Name
    ThisWorkbook.SaveCopyAs Filename:=backupPath
End Sub

このコードはThisWorkbookモジュールに貼り付けます。標準モジュールではなく「Microsoft Excel Objects」の中の「ThisWorkbook」を開いて貼り付けてください。設定後は、Ctrl+S で保存するたびに自動的にbackupフォルダにコピーが作成されます。

バックアップファイルが増えすぎる場合は、古いファイルを自動削除する処理を追加するか、1週間分だけ保持するようにループ処理で間引くとよいでしょう。業務で毎日使うマクロファイルには、この仕組みをぜひ組み込んでおくことをおすすめします。フォルダ作成やファイル一覧取得など、ファイル操作全般の自動化はVBA FileSystemObjectの使い方で解説しています。

よくある質問

Q. マクロ入りのExcelファイルをメールで送るとき、どのファイル形式が安全ですか?

.xlsm 形式のまま送るのが基本です。受信側で「マクロを有効にする」かどうかを選べるため、受け取り手が不意にマクロを実行してしまうリスクは低く抑えられます。ただし、会社のセキュリティポリシーでマクロ付きファイルの送受信を禁止しているケースもあります。社外に送る場合は事前に確認しておきましょう。

Q. OneDriveやSharePointにxlsmファイルを保存すると自動保存が効かないのはなぜですか?

OneDrive・SharePoint の自動保存(Auto Save)は、Excel Online との同期機能です。xlsm ファイルはブラウザ上でマクロを実行できないため、Excel Online との互換性の問題から自動保存が無効になることがあります。OneDrive に xlsm を保存する場合は、Excel デスクトップアプリを使い、手動保存(Ctrl+S)の習慣をつけると安心です。

Q. .xlsxと.xlsmはファイルサイズに違いがありますか?

ほぼ差はありません。xlsm は xlsx の ZIP アーカイブ構造に VBA コードのモジュールが追加されただけです。コード量が少なければサイズ差は数 KB 程度です。大きくなるのは VBA コード自体が数千行を超えるような場合に限られます。

Q. .xlsb 形式はバックアップ目的に使えますか?

技術的には可能ですが、.xlsb はバイナリ形式のため Excel 以外のツールでは内容を読めません。バックアップ目的であれば、内容が確認しやすい .xlsx や .xlsm を使う方が安全です。.xlsb は「ファイルサイズを小さくしたい・大容量ファイルの開閉を高速化したい」という特定の目的に絞って使うのがおすすめです。

Q. マクロ入りのテンプレートを社内配布したいのですが、どのファイル形式が良いですか?

.xltm(マクロ付きテンプレート)形式を使うのがおすすめです。.xltm ファイルをダブルクリックすると、Excel は自動的にコピーを新規ブックとして開く動作をするため、テンプレート本体を誤って上書き保存してしまう事故を防げます。

保存手順は通常の.xlsmと同じで、「名前を付けて保存」→「ファイルの種類」で「Excel マクロ有効テンプレート (*.xltm)」を選ぶだけです。マクロを含まないテンプレートなら .xltx を使います。テンプレートの既定の保存先は C:Users[ユーザー名]AppDataRoamingMicrosoftTemplates ですが、社内共有フォルダに置いても問題なく動作します。

Q. xlsmファイルのVBAコードを他人に見られないようにする方法はありますか?

VBE(Visual Basic Editor)の「ツール」→「VBAProjectのプロパティ」→「保護」タブで、「プロジェクトのプロパティを表示するためにパスワードを必要とする」にチェックを入れてパスワードを設定できます。

ただし、これはあくまで「うっかり開かれる」のを防ぐレベルの保護です。専用の解析ツールを使えばパスワードは解除可能なので、APIキーや本物のパスワードなど機密情報を VBA コードに埋め込むのは厳禁です。本当に守りたい処理がある場合は、サーバー側の Web API に処理を移すなど、構成自体を見直すことを検討してください。

個人用マクロブック(Personal.xlsb)とは

Excelには「どのブックを開いていても使えるマクロ」を保存する専用の場所があります。それが個人用マクロブック(Personal.xlsb)です。

通常のVBAコードは、特定の.xlsmファイルに紐づいて保存されます。そのため、そのファイルを開いていないときはマクロを呼び出せません。一方、個人用マクロブックに保存したマクロは、Excelを起動している間はいつでも実行できるという大きな違いがあります。

Personal.xlsbの特徴

  • 拡張子は .xlsb(バイナリ形式)
  • Excelの起動時に自動で開かれる(非表示ウィンドウとして動作)
  • 保存先: C:Users[ユーザー名]AppDataRoamingMicrosoftExcelXLSTART
  • 繰り返し使う便利マクロの置き場として最適

Personal.xlsbを作成する方法

個人用マクロブックは、マクロの記録機能から作成するのが最もかんたんです。

  1. 「開発」タブ → 「マクロの記録」をクリック
  2. 「マクロの保存先」ドロップダウンで「個人用マクロ ブック」を選択
  3. 適当な操作を1つ記録し、「記録終了」をクリック
  4. Excelを閉じるときに「Personal.xlsbへの変更を保存しますか?」と聞かれるので「保存」を選ぶ

これ以降、VBEを開くと「PERSONAL.XLSB」プロジェクトが表示され、ここにモジュールを追加できます。

Personal.xlsbに向いているマクロの例

  • 特定のセルの書式を一発で整えるマクロ
  • よく使う文字列を挿入するマクロ
  • 選択範囲のデータを整形・クリーニングするマクロ

業務で頻繁に使う処理をPersonal.xlsbにまとめておくと、毎回.xlsmファイルを開く手間がなくなり作業効率が上がります。

開いている複数ブックのファイル形式をVBAで一括確認する

複数のブックを同時に扱う場面では、「どのブックがどの形式か」を一覧で把握したいことがあります。Workbooksコレクションを使えば、現在開いているすべてのブックのファイル形式をまとめて確認できます。

Sub ListAllWorkbookFormats()
    Dim wb As Workbook
    Dim msg As String
    Dim formatName As String

    msg = "開いているブックのファイル形式一覧:" & vbCrLf & vbCrLf

    For Each wb In Workbooks
        Select Case wb.FileFormat
            Case xlOpenXMLWorkbook
                formatName = ".xlsx(マクロ保存不可)"
            Case xlOpenXMLWorkbookMacroEnabled
                formatName = ".xlsm(マクロ保存可)"
            Case xlExcel8
                formatName = ".xls(旧バージョン)"
            Case xlExcel12
                formatName = ".xlsb(バイナリ)"
            Case Else
                formatName = "その他(形式コード: " & wb.FileFormat & ")"
        End Select
        msg = msg & wb.Name & "  →  " & formatName & vbCrLf
    Next wb

    MsgBox msg
End Sub

このコードを実行すると、開いているすべてのブック名と形式をダイアログで一覧表示できます。.xlsxのブックが含まれていないかチェックしたいときに便利です。

ワークシートモジュールへの貼り付け場所

上記のコードは「標準モジュール」に貼り付けて実行してください。どの.xlsmファイルでも動作します。よく使う場合はPersonal.xlsbの標準モジュールに保存しておくと、いつでも呼び出せます。

.xlsmファイルをメールで送るときの注意点と代替策

.xlsmファイルをメールで共有する場面は多いですが、受信者側でマクロが動かない・ブロックされるというトラブルが起きやすいポイントでもあります。事前に知っておくべき注意点をまとめました。

会社のメールシステムによるブロック

多くの企業のメールサーバーやセキュリティゲートウェイは、マクロを含む.xlsmファイルをブロックまたは隔離します。特に社外への送信では、先方のサーバーでブロックされて届かないことがあります。

対処法:

  • 送る前に「.xlsmファイルの送受信は可能か」を相手先に確認する
  • ZIPで圧縮して送ると通過しやすい場合がある(ただし組織ポリシー次第)
  • マクロなしのデータだけ必要な場合は、.xlsx版を別途用意して送る

受信者側でマクロが無効になるケース

.xlsmファイルを受け取ったとき、メール添付・ダウンロードしたファイルはExcelが「保護ビュー」で開くため、マクロが初期状態では実行できません。

受信者に事前に伝えておくべき手順:

  1. ファイルを開いたら上部の黄色いバー(保護ビュー)の「編集を有効にする」をクリック
  2. 続いてマクロのセキュリティ警告バーの「コンテンツの有効化」をクリック
  3. これでマクロが実行できる状態になる

OneDrive・SharePoint経由での共有が安全な場合も

社内共有であれば、メール添付よりもOneDriveやSharePointでファイルを共有する方が確実です。保護ビューが出にくく、マクロの有効化もスムーズに行えます(ただし自動保存は前述のとおり無効になる点に注意)。

Web版Excel(Excel Online)ではVBAマクロは動かない

テレワーク普及でOneDriveやSharePointを使う機会が増えた結果、「ブラウザで開いたらマクロが動かない」というトラブルが増えています。これはバグでも設定ミスでもなく、Excel Online(Web版)はVBAマクロ機能そのものを搭載していないことが原因です。

.xlsmファイルをOneDrive上でブラウザから開くと、データや数式は閲覧できますが、マクロは実行できない状態になります。画面上に「このブックにはマクロが含まれていますが…」という通知が出ることもあります。

解決方法はシンプルです。必ずPCにインストールされたExcelデスクトップアプリで開くようにしてください。OneDriveに保存されているファイルでも、デスクトップアプリから開けばVBAは通常通り動作します。

よくある誤解と実態をまとめると以下の通りです。

状況マクロの動作
デスクトップExcelで開く(ローカル保存)動作する
デスクトップExcelで開く(OneDrive保存)動作する(自動保存は制限あり)
Excel Online(ブラウザ)で開く動作しない
Google Sheetsで開く動作しない(データは読める)

なお、Microsoft 365には「Office Scripts(オフィス スクリプト)」という機能があります。JavaScriptベースで書き、Excel Onlineでも実行できます。ただし、VBAとは文法も機能範囲も大きく異なります。既存のVBAコードをそのまま移行することはできないため、用途に応じた使い分けが必要です。

マクロが「セキュリティ リスク」として赤くブロックされるときの対処

2022年7月以降、Excelには大きな仕様変更が入りました。インターネットやメール経由で受け取った.xlsmファイルは、マクロが既定で完全にブロックされるようになっています。

ファイルを開くと、上部に赤いセキュリティバーが表示され、「セキュリティ リスク このファイルのソースが信頼できないため、Microsoft によりマクロの実行がブロックされました」というメッセージが出るのが特徴です。従来の黄色いバーの「コンテンツの有効化」ボタンでは解除できません

なぜブロックされるのか(MOTW の仕組み)

Webブラウザやメールクライアントが Office ファイルを保存すると、ファイルに「Mark of the Web(MOTW)」と呼ばれる目印が自動でつきます。Excel はこの目印を見て「インターネットから来たファイル」と判断し、マクロを無効化します。

つまり、自分で作った.xlsmファイルでも、一度 OneDrive・Gmail・Slack などから再ダウンロードすると、ブロック対象になってしまうということです。

対処法1:ファイルのプロパティから「許可する」を選ぶ

1件ずつ解除する一番かんたんな方法です。

  1. ブロックされた.xlsmファイルをエクスプローラーで右クリック
  2. 「プロパティ」を選択
  3. 「全般」タブの下部にある「セキュリティ」欄を確認
  4. 「許可する」のチェックボックスにチェックを入れる
  5. 「OK」をクリックしてプロパティを閉じる
  6. ファイルをもう一度開く

これで赤いバーが消え、通常通りマクロが実行できます。信頼できる送信元から受け取ったファイルだけこの操作をしてください。

対処法2:信頼できる場所(Trusted Location)にフォルダを登録する

特定のフォルダ配下のファイルは、MOTW があってもブロックされない設定にできます。社内で繰り返し使う xlsm ファイルがある場合に便利です。

  1. Excel の「ファイル」→「オプション」を開く
  2. 「セキュリティ センター」→「セキュリティ センターの設定」をクリック
  3. 「信頼できる場所」を選択
  4. 「新しい場所の追加」をクリック
  5. xlsm を保存するフォルダのパスを入力(例: C:Users[ユーザー名]DocumentsMacros
  6. 必要に応じて「この場所のサブフォルダーも信頼する」にチェック
  7. 「OK」で確定

これ以降、このフォルダに置いた.xlsmファイルは MOTW があってもマクロが自動で有効になります。社外から受け取った得体の知れないファイルを置く場所にしてはいけません。専用フォルダを用意して、自分で作成または信頼済みのファイルだけを置くようにしましょう。

業務での運用ポイント

  • 社内で xlsm を配布する場合は、OneDrive・SharePoint で共有する(MOTW がつきにくい)
  • メールで.xlsm を送る場合は、受信者に「プロパティから許可してから開いてください」と一言添える
  • マクロ付きテンプレートを社内配布するときは、信頼できる場所として共通フォルダを案内する

まとめ

この記事では、Excelの主なファイル形式4種類の違いと、VBAを使う際の注意点を解説しました。

覚えておきたいポイント

  • 通常のExcel作業には.xlsx(標準形式)を使う
  • VBA・マクロを使うなら.xlsm(マクロ有効ブック)が必須
  • .xlsは旧形式なので、新規作成には使わない
  • .xlsbは大容量ファイル向けの特殊な形式
  • .xlsmを.xlsxで保存するとマクロが消える(最重要)

ファイル形式の違いは地味なテーマですが、これを知っているかどうかで、マクロが消えるトラブルを未然に防げます。VBAを学び始める第一歩として、まずは.xlsm形式でファイルを保存する習慣をつけてみてください。

VBAの学習をこれから始める方は「これで間違いない!Excel VBAを学習する順番と心構え」も参考にしてみてください。また、マクロの記録機能を使えばコードを書かずに自動化を体験できます。「Excelのマクロの記録の使い方|ボタン操作だけで自動化する方法」もあわせてチェックしてみてくださいね。

.xlamアドイン形式|チームで共通マクロを使い回す

ここまで個人用途の形式を中心に説明してきましたが、部署全員で同じマクロを使いたいという場面では、.xlsmや Personal.xlsb よりも優れた選択肢があります。それが .xlam(Excelアドイン)形式です。

.xlsmとの違いを一言で言うと、「ワークシートを持たず、マクロの提供だけに特化した形式」です。Excelが起動すると自動でロードされ、どのブックを開いていても登録したマクロを呼び出せます。

Personal.xlsb との使い分け

用途推奨形式
自分だけが使う便利マクロPersonal.xlsb
チームや部署で共有する共通マクロ.xlam(アドイン)
特定のプロジェクトで使うマクロ.xlsm

Personal.xlsbは自分のPCにしかない個人設定ですが、.xlamはファイルを共有フォルダに置いて全員にインストールしてもらえます。マクロの更新もファイルを1つ差し替えるだけで全員に反映できるため、チームへの配布・メンテナンスが格段に楽になります。

.xlamの作り方

作り方はシンプルで、通常の.xlsmファイルとほぼ同じ手順です。

  1. .xlsmファイルにVBAコードを書き込む
  2. 「ファイル」→「名前を付けて保存」を開く
  3. 「ファイルの種類」で「Excel アドイン (*.xlam)」を選択
  4. 保存先は C:Users[ユーザー名]AppDataRoamingMicrosoftAddIns にすると自動的に「アドインの管理」画面に表示される
  5. 「Excel のオプション」→「アドイン」→「Excelアドイン」→「参照」から有効化する

注意点として、アドインから呼び出せるプロシージャはPublicスコープで宣言する必要があります。Private Subにすると外部から見えなくなるので、チーム向けに公開したい処理はPublic SubまたはPublic Functionで定義してください。

タイトルとURLをコピーしました