結論:
- F5を押してもマクロが実行されないのは、「押している場所」と「マクロの書き方・置き場所」が原因です。
- マクロ画面(VBE)を開いてF5を押さないと実行できないわけではなく、Excel側からボタンやショートカットで実行する方法も普通にあります。
この記事では、実際に自分で調べて整理した内容をもとに、
「F5を押してもマクロが動かない理由」と「F5に頼らない実務向きの実行方法」
を、順番に解説していきます。
こんなことで困っていませんか?
- 「マクロはF5で実行できますよ」と教えたのに、相手のPCで動かない
- Excelのセル画面でF5を押しても、ジャンプ画面しか出てこない
自分も最初は同じところでつまずいたので、
なぜそうなるのかを一度きちんと整理しておきたいと思い、VBAの仕様や実務での使われ方を調べてまとめました。
1. まず整理:F5の正体は「マクロ実行ボタン」ではない
1-1. Excel画面のF5と、マクロ画面のF5は別物
最初の大前提はこれです。
- Excelのセル画面で F5
→ 「ジャンプ」ダイアログが開くだけ(セル移動のショートカット)
→ マクロは一切動かない - VBE(マクロ画面)で F5
→ その時点で選択されているSubを実行するショートカット
つまり、
「F5を押す=マクロが動く」ではなく、
「VBEの中でF5を押したときだけ、マクロが動く」
という仕様です。
ここをお互いに共有できていないと、
- 教える側:「F5で実行してください」
- 教わる側:Excel画面でF5連打
というすれ違いが起こります。
1-2. F5で実行できるマクロの条件
さらにややこしいのが、「どんなコードでもF5で動くわけではない」という点です。
F5で実行できるのは、基本的に次のようなマクロです。
- 標準モジュール(Module1など)に書かれている
Public Sub マクロ名()- 引数なし
例:
Public Sub TestMacro()
MsgBox "マクロが実行されました"
End Sub
逆に、次のようなパターンはF5で直接実行できません。
- 引数付きの
Sub
Sub ExportReport(ByVal TargetDate As Date)
' F5で直接は実行できない
End Sub
Functionプロシージャ(戻り値付きの関数)
Function CalcTax(price As Double) As Double
CalcTax = price * 1.1
End Function
- シートモジュールやThisWorkbookに書かれたイベントプロシージャ
Private Sub Worksheet_Change(ByVal Target As Range)
' セル変更をきっかけに動く処理。F5で直接動かす想定ではない
End Sub
「F5を押しても動かない」ときは、
そもそも 「F5で動かす前提の書き方になっていない」 ことも多いです。
2. 「F5を押したのにマクロが実行されない」ときのチェックリスト
ここからは、実際にトラブルが起きたときに確認したいポイントを、チェックリスト形式でまとめます。
チェック1:F5を押しているのはExcel画面か?VBEか?
一番多いのがこれです。
- セルが並んでいるExcel画面でF5 → マクロは動かない(ジャンプだけ)
- VBEのコード画面でF5 → マクロ実行
まずは「押している場所」を確認します。
教える側も、**「マクロ画面を開いて、そっちのF5です」**と具体的に伝えておくと事故が減ります。
チェック2:マクロは「標準モジュール」に置かれているか?
VBAにはコードの置き場所がいくつかあります。
- 標準モジュール(Module1, Module2…)
- シートモジュール(Sheet1, Sheet2…)
- ThisWorkbook
- クラスモジュール
F5で手動実行したい「普通のマクロ」は、標準モジュールに置くのが基本です。
もし、シートモジュールにこんな風に書いているとします。
Sub Test()
MsgBox "Hello"
End Sub
見た目は普通のSubですが、場所がシートモジュールだと、
- Alt + F8のマクロ一覧に出てこなかったり
- F5の挙動も分かりづらくなったり
と、いろいろ混乱の元になります。
VBE左側の「プロジェクト」ウィンドウで、
Module1などの標準モジュールの中にマクロが入っているか
を確認しておくと安心です。
チェック3:マクロが「有効化」されているか?
マクロを含むブックを開いたとき、画面上部に黄色いバーで
「セキュリティの警告:マクロが無効にされました」
と出ている状態だと、そもそもマクロは一切動きません。
F5を押しても無反応になります。
- 「コンテンツの有効化」をクリックしたか?
- 会社のセキュリティ設定でブロックされていないか?
ここも事前に確認しておく必要があります。
チェック4:Subに引数や戻り値が付いていないか?
例えば次のようなコードは、F5では直接実行できません。
Sub UpdateReport(ByVal TargetDate As Date)
' 日付を引数で受け取るタイプ
End Sub
この場合は、F5で実行するための「入口用マクロ」を別に作るのが定石です。
Public Sub UpdateReportMain()
Dim d As Date
d = Date ' 例:今日の日付で実行
Call UpdateReport(d)
End Sub
F5で実行するのは UpdateReportMain の方にしておきます。
チェック5:それは本当に「マクロ」か?それとも「関数」か?
VBAには、セルで使うためのユーザー定義関数もあります。
Function TaxIncluded(price As Double) As Double
TaxIncluded = price * 1.1
End Function
これは、「関数」としてセルに
=TaxIncluded(A1)
と入力して使うもので、F5で動かすものではありません。
- 「マクロ」と呼んでいるが、実はFunctionだった
- だからF5を押しても何も起きないように見える
というケースもあります。
3. 「マクロ画面を開いてF5を押さないと実行できないのか?」
ここが2つ目の悩みの本題です。
結論は 「いいえ」 です。
VBEでF5を押すのは、あくまで開発者側の操作です。
実務では、Excel側からマクロを実行する方法を用意しておく方が、圧倒的に使いやすいです。
ここからは、マクロ画面を開かずに実行する典型的な方法を3つ紹介します。
4. マクロを「マクロ画面なし」で実行する3つの方法
4-1. Alt + F8 から実行する(Excel標準のやり方)
- Excel画面で
Alt + F8を押す - マクロの一覧から実行したいマクロを選ぶ
- [実行] をクリック
ここに一覧表示されるのは、
- 標準モジュールにある
- 引数なしの
Public Sub
だけです。
F5で実行したいマクロも、同じ条件になっていることが多いので、
「開発中はVBEでF5、本番ではAlt + F8」という使い分けもできます。
4-2. Ctrl + ○ のショートカットキーを割り当てる
頻繁に使うマクロは、ショートカットキーを割り当ててしまうとかなり楽になります。
Alt + F8→ マクロ一覧を開く- 実行したいマクロを選んで [オプション] をクリック
- 「ショートカットキー」に、例えば
Ctrl + Shift + Mなどを設定する
これで、Excel画面で Ctrl + Shift + M を押すだけで、そのマクロが実行されます。
- 自分用のツールなら「ショートカット」
- 他人に配るテンプレートなら「ボタン」
と分けると運用しやすいです。
4-3. ボタンや図形にマクロを割り当てる
マウス操作が中心の人には、ボタン実行の方が直感的です。
- [挿入] → [図形] から四角形などを描く
- 描いた図形を右クリック → [マクロの登録]
- 実行したいマクロを選択して [OK]
これだけで、その図形をクリックするだけでマクロが実行されます。
「マクロの画面なんて開きたくない」という人でも、
ボタンを押すだけなら抵抗なく使ってくれます。
5. まとめ:F5は「開発者のための実行ボタン」として割り切る
最後に、本記事のポイントを整理します。
- F5でマクロが実行されないのは、
- Excel画面でF5を押している
- マクロの置き場所が標準モジュールではない
- 引数付きSubやFunctionなど、F5向きではない書き方になっている
といった理由が多い
- 「マクロの画面を開いてF5を押さないと実行できない」わけではない
- Alt + F8
- ショートカットキー(Ctrl + ○)
- ボタン・図形に割り当て
など、Excel側から実行する方法はいくつもある
- 実務的には、
- 開発・デバッグ中 → VBEのF5
- 普段の運用 → Alt + F8、ショートカット、ボタン
という使い分けが現実的
F5そのものを「マクロ実行の正義」と思い込むと、
- 「F5を押しても動きません」
というトラブルが何度も発生します。
F5はあくまで 「開発者がテストするときに使うボタン」 と割り切って、
利用者には、Alt + F8やボタンなどの手段を用意しておく方が、結果的にトラブルも手間も減ります。

コメント