Mac版ExcelはActiveXコントロールに対応していません。Windowsで作ったActiveXボタンをMacの設定変更で有効にすることはできないため、両方のPCで使うブックはフォームコントロールのボタンとVBA等へ置き換えます。VBA自体の対応と、ボタンのActiveX対応は別に確認してください。
ActiveXボタンをフォームのボタンへ置き換えるときは、見た目だけでなく、呼び出すマクロとWindows固有の処理も確認します。
Macの非対応とWindowsのActiveX無効化は別の問題
Microsoftのボタンへのマクロ割り当て は、MacではActiveXをサポートしないと明記しています。MacでActiveXの許可設定を探したり、Internet Explorer向けの追加部品を入れたりして、Excelのシート上のActiveXを動かす手順はありません。
| 使うExcel | ActiveX/VBAの確認 | 選ぶ方法 |
|---|---|---|
| Macのデスクトップ版 | ActiveXは非対応、VBAは対応 | フォームのボタン+対応VBAへ置き換える |
| Windowsのデスクトップ版 | ActiveX対応と、実際の許可設定は別 | ブックの用途・版・組織方針を確認する |
| Excel for the web | VBAマクロを作成・実行・編集できない | デスクトップ版で実行するか別の自動化へ設計変更 |
Microsoft 365・Office 2024のActiveX案内 は、既定で無効になったため、新規作成や既存コントロールの操作ができないと説明しています。これはWindows側の設定・セキュリティ方針の問題で、Mac側の非対応とは違います。ActiveXを許可する変更がVBAのすべての問題を直すわけでもありません。
Macでフォームのボタンへマクロを割り当てる手順
- Excelのメニューから「環境設定」(版によって「設定」)→「リボンとツールバー」を開き、「開発」を表示して保存します。
- 開発タブのButton(ボタン)を選び、シートへ配置します。MacにWindowsの「ファイル→オプション」があるという手順ではありません。
- 「マクロの登録」で、現在のブック内の実行するマクロを選びます。既存ボタンは右クリックして登録先を確認できます。
- 必要ならVisual Basic Editorで標準モジュールを挿入し、次のような引数なしのマクロを作ります。
- ブックをマクロ有効形式で保存し、閉じて開き直した後にもボタンから実行できるか確認します。
Public Sub MyButtonClick()
MsgBox "フォームコントロールのボタンがクリックされました!"
End Subこの例はメッセージを表示するだけで、シートの値を変えません。ボタンにはMyButtonClickを割り当てます。コードは標準モジュールへ置き、同じ名前の別の手続きを作らないでください。VBAのSub宣言 のPublicは、他のモジュールから利用できる手続きを指定します。
Microsoftの保存形式の案内 に従い、VBAを保持する例では「Excelマクロ有効ブック(.xlsm)」を使います。.xlsxとして保存するとマクロは保持されません。ファイル名の拡張子だけを書き換えるのではなく、Excelの保存形式で選んでください。信頼できるブックのマクロだけを、利用する環境の方針に従って実行します。
既存ActiveXボタンから移すときの確認
Windowsで作成したブックのコピーを用意し、どのActiveXがどのイベントを呼ぶか確認します。ActiveXのCommandButton1_Clickというイベントを、ボタンの見た目だけコピーしてMacへ持ち込む方法ではありません。通常の処理を標準モジュールへ分け、フォームのボタンにその処理を割り当てます。
' Windows側のActiveXイベントの例です。
' MacのフォームボタンにはMyButtonClickを直接割り当てます。
Private Sub CommandButton1_Click()
MyButtonClick
End Sub上のイベント側コードはWindows側のシートのコードモジュールで使う例です。Macのフォームボタン用にこれを標準モジュールへ貼り付ける必要はありません。共通のMyButtonClickへ処理を集めると、Windowsの既存イベントからもフォームのボタンからも、どの処理を呼ぶか整理できます。
- クリック以外のChange等のイベント、細かな入力制御、コントロールのプロパティに依存する処理があるか。
- Me.CommandButton1やOLEObjects等、シート上のActiveXを直接参照するコードがあるか。
- Windows API、COM、Windows形式のファイルパス、外部アプリ連携を使っていないか。
- セルへ書く処理では、対象ブック・シート・範囲を明示しているか。
MicrosoftのOffice for Mac VBA文書 は、共通して使えるオブジェクトがある一方、Macのサンドボックスによるファイルアクセス等の差を説明しています。ボタンをフォームへ変えれば、すべてのVBAがそのまま同じ動作になるという保証はありません。まず表示だけの例、次に対象の業務処理の順で確認してください。
ボタンを移動させず、クリックはできるシート保護
ボタンの位置を固定することと、実行を禁止することは別です。Microsoftのシート保護の説明 は、保護されたシートでもマクロを実行するボタンは選択でき、オブジェクトを編集できない設定なら削除等を制限できる例を示しています。
Macでの入口は Mac版の保護設定 にある「校閲」→「シートの保護」です。次のように必要な操作を分けてから保護します。項目名と表示できる選択肢は、実際のMac版で確認してください。
- 利用者が入力するセルは、セルの書式設定の保護でロックを外します。
- ボタンや図形のロック状態を確認し、位置・サイズ等を変えさせない対象はロックした状態にします。
- シートを保護するときは、利用者へオブジェクトの編集を許可する項目を選ばず、必要なセル操作等だけを許可します。
- 保護後、ボタンをクリックできるか、移動・削除を制限できるか、入力セルへ書けるかをそれぞれ試します。

ボタンの実行、入力セルの編集、ピボットの操作は別々に確認します。同じシートで保護条件が複雑になる場合は、入力・操作用と集計用のシートを分ける方法も検討できます。
保護後にボタンは押せるが、マクロがエラーになる場合
ボタンからメッセージ表示が動くのに、業務処理だけで保護エラーが出る場合は、マクロが書き込むセルや変更するオブジェクトを確認します。ロックされたセルへのVBA書き込みまで、ボタンを押せることによって許可されるわけではありません。
フォームのチェックボックス等がセルへ値を返す構成でも、リンク先セルを確認します。値を変える必要があるセルをロックしたまま保護すると、操作と保護条件が衝突します。保護を全部外す前に、更新する場所と利用者が直接編集してよい場所を設計者が整理してください。
コードで保護を解除する運用を採るなら、例外が起きた場合にも保護を戻す設計と、解除用パスワードの管理が必要です。一般利用者へパスワードを共有すれば操作制限の運用も変わります。この記事の表示だけのマクロは、保護解除を行うサンプルではありません。
シート保護は誤編集を防ぐための仕組みで、機密ファイルの閲覧制限や暗号化とは違います。ボタンの移動を防止できたことだけで、ブック内の秘密情報を保護できたと判断しないでください。
ボタンに登録したマクロが見つからない・動かない
| 症状 | 確認すること |
|---|---|
| 登録一覧にマクロが見つからない | 標準モジュールの引数なしSubか、ブックを正しく選んでいるか |
| 保存して開くとマクロが消えている | 保存形式が.xlsxではなく.xlsm等のマクロ保持形式か |
| 警告で実行できない | ファイルの提供元とマクロ設定、組織の実行方針 |
| 別PCへ渡すと動かない | 他のブックや個人用マクロに依存していないか、コードのMac対応 |
| 保護後だけエラー | リンク先セル・書込先・変更対象と保護条件 |
| ブラウザーでボタンが動かない | Excel for the webでVBAを実行しようとしていないか |
Web版も使うなら、VBAとは別の自動化を検討
MicrosoftのExcel for the web VBA案内 は、VBAを含むブックを開いて編集できても、ブラウザーではVBAを作成・実行・編集できないと説明しています。MacとWindowsのデスクトップでフォームのボタンを使えたことが、そのままWeb版での実行対応を意味するものではありません。
Web版でも処理を実行したい場合はOffice Scripts等の別の方式を検討します。Office Scriptsの公式利用条件 では、プラットフォーム、Microsoft 365の契約、OneDrive、管理者の設定等を確認できます。VBAやActiveXのコードを貼り付けるだけの自動変換ではなく、必要なAPIと操作を見直す設計変更です。

配布前にMacとWindowsの両方で、開き直し後の実行、データ更新、保護後の操作を確認します。一方で成功した結果だけで、もう一方も対応すると判断しないでください。

コメント