書き換えポイント
| 変数 | 説明 | 初期値 |
|---|---|---|
macroName |
割り当てるマクロ名 | "SampleMacro" |
buttonText |
ボタンの表示文字 | "実行" |
buttonName |
ボタンの識別名(再実行時の重複防止) | "btnExecute" |
btnLeft / btnTop |
ボタンの左上位置(ポイント) | 100 / 10 |
btnWidth / btnHeight |
ボタンのサイズ | 140 / 40 |
btnColor |
背景色(RGB) | RGB(0, 112, 192)(青) |
btnFontColor |
文字色(RGB) | RGB(255, 255, 255)(白) |
btnFontSize |
文字サイズ | 12 |
コードの流れ
- 既存ボタンの削除: 同じ識別名(
buttonName)のボタンがあれば削除。再実行してもボタンが増えない - 図形の追加:
Shapes.AddShapeで角丸四角形を作成 - マクロの割り当て:
OnActionでクリック時のマクロを指定 - 見た目の設定: 背景色、枠線非表示、文字色・サイズ・太字・中央揃え
- 位置固定:
Placement = xlFreeFloatingで行/列の挿入・削除で動かないように設定
ボタンに割り当てるマクロは、セルの色分け(セルの値に応じて行を自動色分け)でも検索ハイライト(特定の文字を含むセルを検索してハイライト)でも何でもOK。ドロップダウンリストの設定(入力規則(ドロップダウンリスト)をVBAで一括設定)と組み合わせて「入力フォーム+実行ボタン」にすると、業務ツールとしての完成度が上がる。
よくある落とし穴5選
1. ボタンをクリックしても何も起きない
原因: OnAction に指定したマクロ名が間違っている or マクロが存在しない。
対策: マクロ名はVBEで確認する。Sub の後ろに書いてある名前がマクロ名。大文字・小文字は区別されないが、スペルミスはエラーになる。
2. 「マクロが見つかりません」エラーが出る
原因: 標準モジュールが複数あるとき、マクロ名だけではExcelが特定できないことがある。
自分もこれで20分ハマった。図形にマクロを割り当てたのにクリックしても反応しない。原因はモジュールが2つあって、マクロ名だけでは一意に決まらなかったこと。Module1.SampleMacro のようにモジュール名を付ければ解決する。
対策: 標準モジュールが1つだけなら macroName だけで動く。2つ以上あるなら "Module1.SampleMacro" のようにモジュール名を含める。
3. ボタンを編集したいのに、クリックするとマクロが走る
原因: 図形ボタンは左クリックでマクロが実行される。
対策: 図形を右クリックすると、マクロが走らずに選択できる。テキスト編集やサイズ変更は右クリックから行う。
4. 行/列を挿入したらボタンの位置がずれた
原因: デフォルトではボタン(図形)はセルに連動して移動する。
対策: 実務版コードでは btn.Placement = xlFreeFloating を設定済み。手動で作った図形の場合は、図形を右クリック →「サイズとプロパティ」→「セルに合わせて移動やサイズ変更をしない」を選ぶ。
5. .xlsx で保存したらボタンもマクロも消えた
原因: .xlsx(マクロ無効ブック)で保存するとVBAコードが破棄される。ボタンの図形は残るがマクロが消えるため、クリックしてもエラーになる。
対策: 必ず .xlsm(マクロ有効ブック)で保存する。これはボタンに限らず、VBAを使うすべての場面で共通。
FAQ
Q1: フォームコントロールのボタンと図形ボタン、どちらを使うべき?
見た目にこだわらない+簡単に済ませたいならフォームコントロール。色やデザインを変えたい、または複数ボタンを統一感のあるデザインで配置したいなら図形ボタン。
自分は最初フォームコントロールを使っていたが、同僚に渡すとき「なんかダサい」と言われてから図形ボタンに統一した。
Q2: ボタンを削除したらマクロも消える?
消えない。マクロはVBE内の標準モジュールに残る。ボタンはあくまで「マクロを呼び出すスイッチ」。スイッチを外しても、中身はそのまま。
Q3: 1つのシートに複数のボタンを置ける?
置ける。実務版コードの buttonName を変えれば、何個でも配置可能。例:
| ボタン | macroName | buttonName | btnColor |
|---|---|---|---|
| 実行 | "RunMain" |
"btnRun" |
RGB(0,112,192) 青 |
| リセット | "ResetData" |
"btnReset" |
RGB(192,0,0) 赤 |
| PDF出力 | "ExportPDF" |
"btnPDF" |
RGB(0,128,0) 緑 |
ボタンからPDF出力するなら、PDF一括変換(ExcelファイルをPDFに一括変換)のコードをそのまま割り当てられる。
Q4: ボタンを押したときに確認メッセージを出したい
マクロの先頭に確認処理を入れる:
Sub SampleMacro()
Dim ans As VbMsgBoxResult
ans = MsgBox("実行してよいですか?", vbYesNo + vbQuestion)
If ans = vbNo Then Exit Sub
'--- ここに本来の処理 ---
MsgBox "処理が完了しました。", vbInformation
End Sub
Q5: ボタンに割り当てるマクロを後から変更したい
図形ボタンの場合: 図形を右クリック →「マクロの登録」→ 別のマクロを選択。
VBAで変更する場合:
ActiveSheet.Shapes("btnExecute").OnAction = "NewMacroName"
ボタンクリックをきっかけに別の処理を自動で走らせたいなら、Worksheet_Changeイベント(セルの値が変わったら自動実行)も検討してみてほしい。セル値の変更をトリガーにする方法で、ボタンなしでも自動実行できる。
まとめ
Buttons.Addでフォームコントロールのボタンを設置できる(最小版)Shapes.AddShapeで図形ボタンを作れば、色・文字・サイズが自由(実務版)OnActionでクリック時に実行するマクロを指定する- 再実行時にボタンが増えないよう、既存ボタンの削除処理を入れる(冪等性)
- ボタンは「マクロを呼び出すスイッチ」。同僚に渡すなら、ボタン付きが安心
関連記事
- セルの値に応じて行を自動色分け — ボタンに割り当てるマクロの定番
- 特定の文字を含むセルを検索してハイライト — ボタンで検索実行する使い方
- セルの値が変わったら自動実行 — ボタンを使わず自動で走らせる方法
次にやりたくなること
- ExcelファイルをPDFに一括変換: ボタンを押してPDF出力。報告書の自動化に直結する
- Excelからメール自動作成(Outlook連携): ボタンを押してOutlookメールを自動作成。日次連絡の効率化に
もっとカスタマイズしたい場合
「ボタンを押したら複数のマクロを順番に実行したい」「ボタンに権限制御をつけたい」「業務ダッシュボードに複数ボタンを整列配置したい」など、業務に合わせたカスタマイズが必要な場合は、ココナラで相談できる。
相談時に伝えると話が早い情報:
- Excel のバージョン / OS
- ボタンに割り当てたいマクロの内容
- ボタンの数とレイアウトのイメージ
- 使用する人数(自分だけ or 同僚にも配布)


コメント