Excel(Microsoft 365)でVBAを書いたのに、Alt+F8の[マクロの表示]に出てこない…。 .xlsmで保存しているのに実行できず困りますよね。本記事では、一覧に出るマクロの条件と、よくある原因(Private Sub/引数付き/標準モジュール外/セキュリティ)を手順付きで解決します。
結論:Alt+F8([マクロの表示])に出す最短ルートは「標準モジュール+Public Sub(引数なし)」
Excelの[マクロの表示](View Macros)は、VBAプロジェクト内の「手動実行できるマクロ」だけを一覧に出します。逆に言うと、定義の仕方や置き場所が条件から外れていると、.xlsmで保存していても一覧に出ません。
迷ったら、まず次の形に整えるのが最短です。
- VBE(Alt+F11)で挿入 → 標準モジュールを追加する
- 標準モジュールにPublic Sub(または Sub)で、引数なしの入口マクロを作る
まずは5分で分かるチェックリスト
| チェック項目 | 症状 | 対処 |
|---|---|---|
| Private Subになっている | Alt+F8の一覧に出ない | Public Sub(または Sub)に変更 |
| 引数付きSub(Sub Macro(x As Long) など) | 一覧に出ない/実行対象にならない | 引数なしの入口Subを作ってそこから呼ぶ |
| シートモジュール/ThisWorkbook/クラスに書いている | 一覧に出ないことが多い | 標準モジュールへ移し、Public Subにする |
| モジュール先頭にOption Private Moduleがある | 同ブックでも一覧に出ない | その行を削除(必要なら別モジュールで公開用を用意) |
| [マクロの場所](Macros in)が別ブックになっている | 「作ったはずのマクロ」が見当たらない | [すべての開いているブック]または対象ブックを選ぶ |
| セキュリティでマクロが無効化/ブロック | 警告が出る・実行できない(環境によっては一覧にも影響) | 信頼済みの場所、ファイルのブロック解除、セキュリティセンター設定を確認 |
[マクロの表示]に「出るマクロ」と「出ないマクロ」の違い
Alt+F8の一覧は、VBAのプロシージャ全部を表示する機能ではありません。表示対象になるのは、基本的に次の条件を満たすものです(環境やアドイン等で多少の例外はあります)。
- Subプロシージャである(Functionは対象外)
- Publicとして実行可能(またはアクセス修飾子なしのSub)
- 引数がない
- 手動実行を意図した場所(多くの場合、標準モジュール)にある
- モジュールが「非公開扱い」になっていない(例:Option Private Module)
この条件を外すと、いくらコードを書いて保存しても、Alt+F8の一覧に出ません。
原因:Private Subになっている(最頻出)
もっとも多いのが、マクロをPrivate Subで書いてしまっているパターンです。Privateは「そのモジュール内からしか呼べない非公開手続き」なので、Excelの[マクロの表示]の一覧対象から外れます。
一覧に出ない例(Private Sub)
Private Sub MyMacro()
MsgBox "テスト"
End Sub
一覧に出す例(Public Sub / Sub)
Public Sub MyMacro()
MsgBox "テスト"
End Sub
' Publicは省略しても可
Sub MyMacro2()
MsgBox "テスト2"
End Sub
実務的には、外から実行する入口だけをPublicにして、内部処理はPrivateに隠す設計が安全です(後半で例を紹介します)。
原因:引数付きSubになっている(入口を別に作る)
Alt+F8の一覧は、基本的に引数なしのSubを「実行可能なマクロ」として扱います。引数があるSub(例:Sub Export(path As String))は、一覧に出ない/実行対象にならないことが多いです。
一覧に出づらい例(引数付き)
Public Sub ExportReport(ByVal savePath As String)
' 何らかのエクスポート処理
End Sub
定石:引数なしの入口マクロ(Run系)を用意する
Public Sub RunExportReport()
Dim savePath As String
savePath = ThisWorkbook.Path & "\\report.xlsx"
Call ExportReport(savePath)
End Sub
Private Sub ExportReport(ByVal savePath As String)
' ここに本体処理を書く(非公開でOK)
End Sub
こうしておくと、Alt+F8に表示されるのはRunExportReportだけになり、利用者も迷いません。ボタンやショートカットに割り当てるときも楽になります。
原因:書く場所が「標準モジュール」ではない(シート/ThisWorkbook/クラス/フォーム)
VBAは、書く場所(モジュールの種類)によって役割が違います。イベント用の場所に書いた手続きは、手動実行リストに出ない/出づらいことがあります。確実に一覧に出したいなら、入口マクロは標準モジュールに置くのが鉄則です。
モジュール種類ごとの違い(一覧表示の観点)
| 書く場所 | 用途の代表例 | Alt+F8に出やすさ | おすすめ運用 |
|---|---|---|---|
| 標準モジュール(Module1など) | 手動実行マクロ、共通関数 | 出やすい | 入口マクロはここに集約 |
| シートモジュール(Sheet1など) | Worksheet_Changeなどのイベント | 出にくい | イベントから標準モジュールのPublic Subを呼ぶ |
| ThisWorkbook | Workbook_Openなどのイベント | 出にくい | 起動時処理はここ、実処理は標準モジュールへ |
| クラスモジュール | オブジェクト指向的に処理をまとめる | 基本出ない | クラスは裏方、入口は標準モジュール |
| UserForm | 画面(フォーム)から操作 | 基本出ない | ボタン押下で標準モジュールのPublic Subを呼ぶ |
標準モジュールへ移す手順
- ExcelでAlt+F11を押してVBE(VBAエディター)を開く
- 左側のプロジェクトで対象ブックを選ぶ
- メニューから挿入 → 標準モジュールをクリック
- 作成されたModuleに、Public Sub(引数なし)で入口マクロを書く
- シートモジュール等にあった処理は、必要に応じてPrivate化して標準モジュールから呼ぶ
原因:モジュールが「非公開」になっている(Option Private Module)
少し見落としがちなのが、標準モジュールの先頭にOption Private Moduleが書かれているケースです。これは「このモジュール内のPublic手続きを、他プロジェクトやマクロ一覧から見えにくくする」目的で使われます。
社内配布用のブックやアドインで意図的に入れている場合もありますが、原因が分からないままテンプレをコピペして入ってしまうこともあります。
非表示になる例
Option Private Module
Public Sub VisibleLikeMacro()
MsgBox "見えないことがある"
End Sub
対処
- 「Alt+F8に表示したい入口マクロ」だけを別の標準モジュールに分ける
- もしくは、Option Private Moduleの行を削除する(意図がない場合)
チームで運用しているファイルでは、勝手に削除せず「なぜ入っているか」を確認した方が安全です。
原因:Alt+F8の[マクロの場所](Macros in)が別ブックになっている
Alt+F8画面の下部に[マクロの場所](Macros in)というドロップダウンがあります。ここが別ブック(例:Personal.xlsb や別の開いているブック)になっていると、作成したマクロが存在していても一覧に出ません。
見落としを防ぐポイント
- まずは[すべての開いているブック]を選ぶ
- 複数ファイルを開いているなら、対象の.xlsmを明示的に選ぶ
- Personal.xlsb(個人用マクロブック)を使っている場合は、そちらに同名マクロがないかも確認する
原因:セキュリティでマクロが無効化/ファイルがブロックされている
「一覧に出ない」よりも「出るけど実行できない」が多いですが、環境や状態によっては、マクロ自体が読み込まれない/編集内容が反映されないように見えて、結果として「作ったのに出ない」と感じることがあります。Microsoft 365(Office 365)のExcelでは、セキュリティが年々強化されています。
よくあるセキュリティ起因のパターン
| 状況 | よくある表示 | 現実的な対処 |
|---|---|---|
| インターネット由来のファイル(メール添付・ダウンロード) | 上部に警告バー/「コンテンツが無効化」 | ファイルを右クリック→プロパティ→ブロック解除(可能なら)/信頼済みの場所へ移動 |
| 保護ビューで開いている | 「保護ビュー」黄色いバー | 編集を有効にする→必要ならコンテンツの有効化 |
| マクロ設定が「すべて無効」 | 通知が出ない・そもそも動かない | セキュリティセンターで設定を確認(社内PCは管理者方針に従う) |
| 信頼されていない場所(ネットワークドライブ等) | 警告が頻発 | 信頼済みの場所(Trusted Locations)を検討/ローカルに移して作業 |
セキュリティセンターの場所(確認手順)
- Excelの[ファイル]→[オプション]を開く
- [セキュリティ センター]を選ぶ
- [セキュリティ センターの設定]をクリック
- [マクロの設定]や[信頼できる場所]を確認する
会社の端末では、ここがグレーアウトして変更できないことがあります。その場合は個人判断で回避せず、社内ルール(管理者)に沿って対応してください。
原因:.xlsmで保存しているつもりでも、実は別形式になっている
「.xlsmで保存した」と思っていても、別名保存の途中で.xlsxに戻ってしまっていたり、共有時に形式変換されていることがあります。VBAが入っていても、.xlsxで保存するとマクロは保存されません。
- ファイル名の末尾が.xlsmになっているか
- OneDriveやSharePointで、ダウンロード時に拡張子が変わっていないか
- メールで送る際に「プレビュー」や「変換」が挟まっていないか
追加で確認すると効果が高いポイント
VBAのコンパイルで「見えないエラー」を潰す
別のモジュールでコンパイルエラーや参照設定の不整合があると、挙動が不安定になり「作ったはずのマクロが反映されない」ように見えることがあります。
- VBE(Alt+F11)を開く
- メニューから[デバッグ]→[VBAProject のコンパイル]を実行
- エラーが出たら該当箇所を修正
- [ツール]→[参照設定]でMISSING:が付いた参照がないか確認
マクロ名の付け方を整える(運用トラブル予防)
Alt+F8に表示されるのは「名前」です。運用を意識すると、次のルールが効きます。
- 入口マクロはRun_やStart_など接頭辞を統一(例:Run_集計、Run_請求書出力)
- 内部処理はPrivateにして、Alt+F8に出さない(利用者が誤実行しない)
- 同名マクロを複数ブックで作らない(Personal.xlsbと衝突しやすい)
実務向け:おすすめの「見せるマクロ/隠すマクロ」設計例
現場では、マクロを増やしていくほど「どれを実行すればいいか分からない」問題が起きがちです。Alt+F8に出すマクロは入口だけに絞ると、事故が減り、保守もしやすくなります。
構成例
| モジュール | 公開範囲 | 中身 |
|---|---|---|
| Module_Run | Public(引数なし) | ユーザーが実行する入口(Alt+F8に出す) |
| Module_Core | Private中心 | 処理本体、共通関数、入力チェック |
| ThisWorkbook / Sheet | Private中心 | イベント(起動時・変更時)から入口を呼ぶだけ |
コード例(入口だけPublic)
' Module_Run(入口)
Public Sub RunMonthlyReport()
Call CreateMonthlyReport
End Sub
' Module_Core(本体)
Private Sub CreateMonthlyReport()
' 実処理
End Sub
よくある質問
Q. シートモジュールにPublic Subを書けばAlt+F8に出ますか?
A. 環境によっては表示されることもありますが、運用上の再現性が低く、イベントとの混在で管理も難しくなります。「手動で実行したいマクロは標準モジュール」に寄せるのが無難です。
Q. Alt+F8に出るのに実行するとエラーになります
A. 表示問題とは別で、参照設定(MISSING)やコンパイルエラー、ファイルパス、権限、保護設定などが原因になりがちです。まずはVBEでコンパイルし、エラー箇所を特定してください。
Q. Excel for the web(ブラウザ版)でも同じですか?
A. ブラウザ版ExcelはVBAマクロをそのまま実行できません。Alt+F8での実行を前提にする場合は、Windows/Macのデスクトップ版Excelで作業してください。
まとめ:迷ったら「Public Sub(引数なし)を標準モジュールに」
- Alt+F8の一覧は「実行可能な入口マクロ」だけが対象
- 最頻出の原因はPrivate Sub、次点は引数付きSubと置き場所
- 入口を標準モジュールに集約し、内部処理をPrivate化すると運用が安定する
まずは、標準モジュールにPublic Sub マクロ名()(引数なし)を1つ作り、Alt+F8に出ることを確認してから機能を広げると失敗しません。

コメント