6.

Excel VBA でボタン配置 → マクロ実行(フォームコントロール / ActiveX / 図形)

編集
この記事の要点
  • 開発タブを表示: ファイル → オプション → リボンのユーザー設定 → 「開発」 をチェック
  • フォームコントロールのボタン: 開発 → 挿入 → ボタン (フォームコントロール) → ドラッグで配置 → マクロ登録ダイアログ
  • ActiveX のボタン: イベントが豊富 (Click / MouseMove / KeyDown 等)、デザインモードで編集
  • 図形 / 画像にもマクロ割当可: 図形を右クリック → 「マクロの登録」、見た目自由のボタン化
  • コードからのボタン化: Shape.OnAction = "Module1.Button1_Click"
  • フォームコントロール = 互換性高い・推奨 / ActiveX = 高度なイベント・互換性低い(Mac 非対応)

事前準備: 開発タブを表示

Excel の標準状態では「開発」タブが隠れています。以下で表示します:

  1. ファイル → オプション
  2. リボンのユーザー設定
  3. 右側のリストで 開発 にチェック → OK

これで上部リボンに「開発」タブが追加され、ボタン・マクロ・VBE(Visual Basic Editor)にアクセスできるようになります。

方法1: フォームコントロールのボタン(推奨)

最も標準的で互換性も高い方法です:

  1. 開発タブ → 挿入 → フォームコントロール のボタン(一番左上のアイコン)をクリック
  2. シート上の任意の位置で ドラッグして矩形を描画
  3. マウスを離すと「マクロの登録」ダイアログが自動で開く
  4. 既存マクロを選ぶか、新規作成 → VBE が起動して空の Sub が生成される
  5. ボタンを右クリック → テキストの編集で表示名を変更

登録されるマクロの例:

' 標準モジュール (Module1)
Sub Button1_Click()
    ' クリック時の処理
    Range("A1").Value = "Hello, VBA!"
    MsgBox "ボタンがクリックされました"
End Sub

' セル A1〜A10 を黄色に塗る例
Sub HighlightCells()
    Range("A1:A10").Interior.Color = RGB(255, 255, 0)
End Sub

' アクティブシートの値を別シートにコピー
Sub CopyToSheet2()
    Sheets("Sheet1").Range("A1:C10").Copy _
        Destination:=Sheets("Sheet2").Range("A1")
End Sub

方法2: ActiveX コントロールのボタン

イベントが豊富で、ボタン以外のプロパティ(色・フォント・画像)も細かく設定可能ですが、Mac 版 Excel では使えない点に注意:

  1. 開発 → 挿入 → ActiveX コントロール のコマンド ボタンを選ぶ
  2. シートにドラッグして配置(デザインモードが ON 状態
  3. ボタンをダブルクリック → VBE が起動し、シートのコードペインClick イベントが生成
  4. 編集後、デザインモードを OFF にしてからクリックすると動作
' Sheet1 のコードペイン(標準モジュールではない)
Private Sub CommandButton1_Click()
    MsgBox "ActiveX ボタンがクリックされた"
End Sub

' マウスが乗った時
Private Sub CommandButton1_MouseMove(ByVal Button As Integer, _
    ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    CommandButton1.BackColor = RGB(200, 230, 255)
End Sub

' キー押下
Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _
    ByVal Shift As Integer)
    If KeyCode = vbKeyReturn Then
        Call CommandButton1_Click
    End If
End Sub

方法3: 図形や画像にマクロを割り当てる

見た目を自由にしたい場合は図形ボタンが便利:

  1. 挿入 → 図形 から好きな図形を配置
  2. 図形を選んで右クリック → マクロの登録
  3. マクロを選択 → OK

VBA から動的に割り当てる場合:

Sub AssignMacroToShape()
    Dim sh As Shape
    Set sh = ActiveSheet.Shapes.AddShape( _
        Type:=msoShapeRoundedRectangle, _
        Left:=100, Top:=100, Width:=120, Height:=40)

    sh.TextFrame2.TextRange.Text = "実行"
    sh.OnAction = "Module1.RunMyMacro"  ' クリック時に呼ぶマクロ名
    sh.Name = "BtnRun"
End Sub

Sub RunMyMacro()
    MsgBox "図形ボタンから実行されました"
End Sub

' ボタン削除
Sub DeleteButton()
    On Error Resume Next
    ActiveSheet.Shapes("BtnRun").Delete
End Sub

フォームコントロール vs ActiveX の比較

項目フォームコントロールActiveX
互換性◎ (Mac, Web 含む)× (Windows のみ)
イベントClick のみClick / MouseMove / KeyDown など多数
外観カスタマイズ制限あり自由(色・フォント・画像)
VBA からのアクセスシェイプ経由オブジェクトとして直接
セキュリティ警告少ないマクロ警告が出やすい

実用例: ボタンでフォーム化された処理

' データ入力 → ボタンで台帳追加 → クリアの一連動作

Sub AddRecord()
    Dim ws As Worksheet
    Dim lastRow As Long

    Set ws = Sheets("台帳")
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1

    With Sheets("入力")
        ws.Cells(lastRow, "A").Value = .Range("B2").Value  ' 名前
        ws.Cells(lastRow, "B").Value = .Range("B3").Value  ' 年齢
        ws.Cells(lastRow, "C").Value = Now                  ' 登録日時
    End With

    Call ClearForm
    MsgBox "登録しました (行 " & lastRow & ")"
End Sub

Sub ClearForm()
    Sheets("入力").Range("B2:B3").ClearContents
    Sheets("入力").Range("B2").Select
End Sub

FAQ

Q: ボタンを押しても反応しない
A: マクロ警告でブロックされている可能性。ファイル → 情報 → コンテンツの有効化。または信頼できる場所にファイルを置く(Excel オプション → セキュリティ センター → 信頼できる場所)。

Q: ActiveX ボタンが「オブジェクトを挿入できません」エラー
A: 既知の Windows Update 不具合。レジストリの HKCU\Software\Microsoft\Office\\Common\\COM Compatibility 配下の MS Forms 関連エントリ削除、または *.exd ファイル(%TEMP%\\Excel8.0\\)削除で復旧することが多い。

Q: ボタンが選択できない
A: フォームコントロールは Ctrl + クリックまたは右クリックで選択。ActiveX は デザインモードを ON にすると編集可能。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. マップの追加方法
  2. テンプレートの種類一覧
  3. ファイルの役割一覧
  4. シミュレーターの画面の拡大/縮小をする方法
  5. スライダーの作成とカスタマイズ
  6. ボタンの作成とプログラムと連携
  7. ラベルの作成とプログラムと連携
  8. 【Xcode/Swift】ImageViewのContentMode一覧
  9. エラー一覧
  10. アプリを実機で起動させる方法
  11. ツールバーの設置とボタンの追加
  12. 画像の追加