「挿入メニューにユーザーフォームがない」「標準モジュールとクラスモジュールしか選べない」──Excel for Mac で VBA を触り始めると、ほぼ必ずぶつかる壁です。本記事では、なぜ Mac 版 Excel ではユーザーフォームを挿入できないのかという“仕様”の話と、現実的な代替案・開発フローを、実務レベルで詳しく解説します。
Excel for Mac で「ユーザーフォームが挿入できない」症状
まずは、よくある状況を整理します。
- VBA プロジェクトを開き、[挿入] メニューを開いても、表示されるのは「標準モジュール」「クラスモジュール」「ファイル…」程度。
- Windows の解説サイトや書籍では、同じ場所に 「ユーザーフォーム」 が出ているはずなのに、Mac では見当たらない。
- 開発タブやマクロ設定をいじっても変化がない。
この挙動は「設定や権限が足りないから」ではなく、Excel for Mac の VBA エディターの仕様そのものです。
結論:Mac 版 Excel の VBE はユーザーフォームの新規作成・編集に非対応
Microsoft 公式フォーラムや Microsoft Q&A などで繰り返し回答されているとおり、Excel 2016 以降の Mac 版 Excel に搭載されている VBA エディター(VBE)では、ユーザーフォームの新規作成・編集機能が削除されています。
ポイントを整理すると、次のようになります。
| 項目 | Windows 版 Excel | Mac 版 Excel(2016 以降) |
|---|---|---|
| ユーザーフォームの新規作成 | VBE から挿入可能 | 不可(メニューに項目自体がない) |
| ユーザーフォームのデザイン編集 | プロパティ・ツールボックスで編集可能 | 不可 |
| 既存ユーザーフォームの実行 | 可 | 制限付きで実行可能な場合あり |
| ActiveX コントロール | 利用可能(セキュリティ制限あり) | 基本的に非対応 |
Microsoft コミュニティの回答でも、「Mac ではユーザーフォームの設計はできない」「Windows で作ったフォームは Mac で動くが、Mac 側では編集できない」と明示されています。
なぜメニューに「ユーザーフォーム」が出てこないのか
Excel 2011 までは Mac でも Windows とほぼ同じ VBE が搭載されており、ユーザーフォームの作成・編集ができました。しかし 2016 世代以降、VBE が刷新され、Mac 版ではフォームデザイナ部分がそもそも実装されていません。そのため、いくら設定を探しても機能が出てきません。
Microsoft の担当者コメントでも、「ユーザーフォームの作成・編集を Mac に戻す予定は現状ない」というスタンスが繰り返し示されています。
既存のユーザーフォームは Mac でどうなるのか
重要なのは、「新規作成や編集はできないが、既存のユーザーフォームは Mac で(ある程度)動く」という点です。
例えば、Windows 版 Excel で作成したブック(.xlsm)にユーザーフォームが含まれている場合:
- Mac 版 Excel でブックを開き、
UserForm1.Showのようなコードを実行すると、表示・操作できるケースが多い。 - ただし、ActiveX コントロールや Windows API への依存が強いフォームでは、エラーが出たり、画面崩れを起こしたりする。
- フォームのレイアウトやコントロール配置を Mac 側だけで変更することはできない。
実務的には、「ユーザーフォームを含むテンプレートは Windows で開発し、Mac では“動かすだけ”」という運用になります。
Windows と Mac のフォーム互換性まとめ
| 要素 | Windows → Mac での動作 | 注意点 |
|---|---|---|
| ラベル / テキストボックス / ボタン | 概ね動作 | フォント差異によりテキストがはみ出すことがある |
| コンボボックス / リストボックス | 概ね動作 | スクロールバーの表示や幅が微妙に異なる場合あり |
| ActiveX コントロール | 多くが非対応 | フォームが開かない・エラーで止まる原因になりやすい |
| Windows API コール | ほぼ全滅 | Declare 文で OS 判定し、Mac では呼び出さない実装が必要 |
| レイアウト全般 | 動作するがズレやすい | DPI や解像度差で見た目が変わるため、実機検証が必要 |
対応方針:3つの現実的な選択肢
ここまでの整理を踏まえると、Mac でユーザーフォームを扱いたい場合の現実的な選択肢は次の 3 つに集約されます。
- Windows 版 Excel でフォームを作り、Mac は実行専用にする(推奨)
- Mac だけで完結する代替 UI(シート上 UI / データフォーム / InputBox)に寄せる
- VBA から離れて Office スクリプトや JavaScript アドインで作り直す
状況別のおすすめ方針
| 状況 | おすすめ方針 | 理由 |
|---|---|---|
| 自分だけが使うツールで、Windows も使える | 1. Windows で開発 | 最も早く・柔軟に開発できる |
| 社内に Windows 環境があり、Mac は一部だけ | 1 + Mac では実行のみ | 開発コストを抑えつつ Mac 利用を許容 |
| チーム全員が Mac で、Windows マシンが用意できない | 2. Mac ネイティブな代替 UI | シート UI や InputBox で必要最小限の機能を実現 |
| 中長期的なシステム / 多人数利用 | 3. Office スクリプト / アドイン | Web 版 Excel を含めたクロスプラットフォーム対応が可能 |
方針 1:Windows 版 Excel でユーザーフォームを作る
環境の用意方法
Mac ユーザーでも Windows 環境を用意する方法はいくつかあります。
- 別途 Windows PC を用意する(社用 PC・中古ノートなど)
- 仮想化ソフトを使う:Parallels Desktop などで Windows を仮想マシンとして動かす
- リモートデスクトップ:社内の Windows サーバーやクラウド PC(例:Azure Virtual Desktop)に接続して開発
どの方法でも、ポイントは「VBE でユーザーフォームのデザインができる Windows 版 Excel を 1 つ持つ」ことです。
おすすめ開発フロー
ユーザーフォームとロジックを分離しておくと、Mac との共存が楽になります。
- Windows 版 Excel でブックを開く。
- VBE でフォーム(例:
frmInput)を作り、デザイン・イベント処理を実装。 - ビジネスロジックは極力 標準モジュール(
.bas)に切り出す。 - フォームのイベントからは、標準モジュールの公開関数を呼び出す構造にする。
- 完成したらブックを保存し、Mac で開いて動作確認。
このようにしておけば、Mac で問題が出たときも、フォーム自体は Windows で直し、ロジック部分は Mac でも編集できるため、運用がしやすくなります。
64 ビット版 Office での Declare 文の注意
Windows 版 Excel が 64 ビット版の場合、Windows API の Declare 文には PtrSafe や LongPtr が必要になります。一方 Mac はそもそも Windows API を呼べないため、多くの場合次のような条件分岐を入れます。
#If Win64 Then
' 64 ビット Windows 用の Declare
Public Declare PtrSafe Function ...
#ElseIf Win32 Then
' 32 ビット Windows 用の Declare
Public Declare Function ...
#End If
Mac ではこれらのコードを実行させない設計にすることで、「Mac で開いたらいきなりコンパイルエラー」といった事故を防げます。
方針 2:Mac だけで完結する UI に切り替える
「どうしても Windows 環境が用意できない」「Mac ユーザーだけに配布するツールが欲しい」という場合は、VBA の範囲で Mac 対応している UI を組み合わせて擬似フォームを作るのが現実的です。
代替 UI の全体像
| 代替案 | 特徴 | 向いている用途 |
|---|---|---|
| ワークシート上のフォームコントロール | ボタンやコンボボックスをシート上に配置 | 操作頻度が高い業務ツール |
| 組み込みデータフォーム | 1 レコード単位での入力ダイアログ | 単純な台帳・一覧への追加/編集 |
| InputBox / MsgBox | 最小限のダイアログ | 補助的ツール・一時的なツール |
シート上のフォームコントロールで UI を作る
Mac 版 Excel でも、「フォームコントロール」は利用できます(ActiveX は不可)。
- Excel のリボンで [開発] タブを表示。
- [挿入] → フォームコントロールのボタン・コンボボックス・チェックボックス などを選び、シートに配置。
- コントロールを右クリック → [マクロの登録] で、VBA プロシージャに紐づける。
例えば、シート上に「登録」「クリア」ボタンを配置し、次のようなコードを紐づけることで、ユーザーフォーム風の入力画面を作れます。
Sub 顧客情報を登録する()
Dim name As String
Dim tel As String
name = Range("B3").Value ' 名前入力欄
tel = Range("B4").Value ' 電話番号入力欄
If name = "" Then
MsgBox "名前は必須項目です。", vbExclamation
Exit Sub
End If
Dim lastRow As Long
lastRow = Cells(Rows.Count, "A").End(xlUp).Row + 1
Cells(lastRow, "A").Value = name
Cells(lastRow, "B").Value = tel
MsgBox "登録しました。", vbInformation
End Sub
Sub 入力欄をクリアする()
Range("B3:B4").ClearContents
End Sub
フォームを開く代わりに、あらかじめ用意した「入力シート」へユーザーを誘導する形です。見た目の自由度はやや落ちますが、実務では十分なことが多く、Mac でも安定して動作します。
組み込みの「データフォーム」を使う
Excel には、昔ながらの標準データフォーム機能が残っています。これは VBA から次のように呼び出します。
Sub データフォームを開く()
On Error Resume Next
ActiveSheet.ShowDataForm ' 表に見出しがないと開きません
On Error GoTo 0
End Sub
使い方のポイントは次の通りです。
- アクティブシートに、1 行目が見出し行、2 行目以降がデータ行となる「表」を用意する。
- その表のセル範囲のどこかを選択した状態でマクロを実行すると、データフォームが表示される。
- データフォーム上で「新規」「削除」「検索」などの操作が可能。
「凝った UI ではないが、行データを追加・編集できれば十分」というケースでは、ユーザーフォームの代わりにこのデータフォームを使うだけで要件を満たせることも少なくありません。
InputBox / MsgBox を組み合わせた簡易 UI
最も手軽なのが、Application.InputBox と MsgBox を組み合わせるパターンです。後述のサンプルは Mac でもそのまま動きます。
Sub 名前を入力して書き込む()
Dim s As Variant
s = Application.InputBox(Prompt:="お名前を入力してください", Type:=2)
If s = False Then
MsgBox "キャンセルされました。", vbInformation
Else
Range("A1").Value = CStr(s)
MsgBox "A1 セルに書き込みました。", vbInformation
End If
End Sub
複数項目を聞きたい場合は、InputBox を複数回出すか、1 回の InputBox で「姓 名, 年齢, 都道府県」のようにまとめて入力してもらい、文字列を分解するアプローチもあります。
方針 3:Office スクリプト / JavaScript アドインで UI を作る
少し背伸びした選択肢ですが、最近の Microsoft は「VBA よりも Office スクリプトや JavaScript アドイン」を推している流れがあります。これらは基本的に Web 技術(TypeScript / JavaScript)で書かれており、Windows / Mac / Web 版 Excel で共通動作させやすいのが利点です。
ただし:
- VBA と比べると学習コストが高い。
- 社内への展開方法(管理センターからの配布など)を考える必要がある。
- 既存の VBA コードをそのまま流用できない。
そのため、「既存の VBA ツールを小改良したい」程度なら VBA のまま代替 UI を工夫し、「これから新しく長期運用するシステムを作る」場合は Office スクリプトやアドインを検討する、という線引きがおすすめです。
Mac と Windows を併用する場合の実務的な注意点
フォントとレイアウトのズレ
ユーザーフォームに限らず、Mac と Windows では標準フォントや DPI(表示スケール)が異なるため、次のような問題が起こりがちです。
- Windows でぴったり収まっていたラベルの文字が、Mac で途中までしか表示されない。
- ボタンの位置が微妙にずれて見える。
重要なフォームやシートについては、両 OS の実機で見た目を確認し、余裕を持ったレイアウトにしておくと安心です。
ファイルパス・ショートカットの違い
パスやショートカットキーをハードコーディングしていると、Mac でエラーになります。
C:\や\区切りのパスは Mac では使えない。- Command キーとCtrl キーの扱いが違うため、ショートカット前提のメッセージは曖昧な表現にする。
VBA 内では、Application.OperatingSystem や Application.Platform などで OS を判定し、パスやメッセージを切り替えるのが定番です。
実践例:ユーザーフォームを「シート UI+InputBox」で置き換える
ここでは、もともと Windows のユーザーフォームで作っていた「顧客登録フォーム」を、Mac でも動く形で作り直すイメージを紹介します。
想定する元のフォーム
- 項目:名前、電話番号、メールアドレス
- 「登録」ボタンを押すと、一覧表の末尾に追加
- 入力チェック(名前必須、メール形式チェックなど)
これを Mac 対応にするときの一案が、次のような構成です。
- 「入力シート」を 1 枚用意し、セル B3〜B5 に項目名と入力欄を作る。
- 同じシート上に「登録」「クリア」ボタン(フォームコントロール)を配置。
- 顧客一覧用のシート(例:「顧客一覧」)を別に作る。
その上で、以下の VBA を標準モジュールに記述します。
Option Explicit
' 入力欄のあるシート名
Private Const INPUT_SHEET As String = "入力シート"
' 一覧表のシート名
Private Const LIST_SHEET As String = "顧客一覧"
Sub 顧客を登録する()
Dim wsIn As Worksheet
Dim wsList As Worksheet
Set wsIn = ThisWorkbook.Worksheets(INPUT_SHEET)
Set wsList = ThisWorkbook.Worksheets(LIST_SHEET)
Dim name As String
Dim tel As String
Dim mail As String
name = Trim(wsIn.Range("B3").Value)
tel = Trim(wsIn.Range("B4").Value)
mail = Trim(wsIn.Range("B5").Value)
' 入力チェック
If name = "" Then
MsgBox "名前は必須入力です。", vbExclamation
wsIn.Range("B3").Select
Exit Sub
End If
If mail <> "" Then
If InStr(1, mail, "@") = 0 Then
MsgBox "メールアドレスの形式が正しくありません。", vbExclamation
wsIn.Range("B5").Select
Exit Sub
End If
End If
' 一覧の最終行を取得
Dim lastRow As Long
lastRow = wsList.Cells(wsList.Rows.Count, "A").End(xlUp).Row + 1
' 一覧に書き込み
wsList.Cells(lastRow, "A").Value = name
wsList.Cells(lastRow, "B").Value = tel
wsList.Cells(lastRow, "C").Value = mail
wsList.Cells(lastRow, "D").Value = Now ' 登録日時
MsgBox "顧客情報を登録しました。", vbInformation
' 入力欄をクリア
wsIn.Range("B3:B5").ClearContents
wsIn.Range("B3").Select
End Sub
Sub 顧客入力欄をクリアする()
Dim wsIn As Worksheet
Set wsIn = ThisWorkbook.Worksheets(INPUT_SHEET)
wsIn.Range("B3:B5").ClearContents
wsIn.Range("B3").Select
End Sub
この形であれば:
- UI はすべてシート上にあるため、Mac / Windows 共通で利用可能。
- フォームデザイナを使わないので、Excel for Mac 単体で開発・保守できる。
- 後から Windows ユーザーがユーザーフォームを追加したくなった場合でも、このロジック部をそのまま流用できる。
「ユーザーフォームにこだわらず、シートをフォームのように使う」という割り切りは、Mac ユーザーが多い職場では特に有効です。
よくある誤解・質問への回答
Q. 開発タブやセキュリティ設定を変えればユーザーフォームを挿入できますか?
A. できません。開発タブの表示やマクロのセキュリティ設定は、あくまで VBE にアクセスするための入口であり、VBE 自体に実装されていない機能(Mac のユーザーフォームデザイナ)を復活させることはできません。
Q. Excel 2011 を使えば Mac でもフォームを作れますか?
A. 技術的には可能ですが、非推奨です。Excel 2011 はすでにサポート終了しており、セキュリティや互換性の面から業務利用には向きません。さらに、新しい Office 365 / 2021 環境との共存も難しくなります。
Q. サードパーティ製アドインで Mac の VBE にフォームデザイナを足せませんか?
現時点で、VBE にユーザーフォームデザイナを「正式に」統合するようなアドインは一般的ではありません。一部のツールがシートから擬似フォームを生成する仕組みを提供している例はありますが、それも本質的には「シート UI」の自動化であり、VBE の制限自体は変わりません。
Q. 将来的に Mac 版 Excel でユーザーフォームが復活する可能性は?
Microsoft のフォーラムでは長年要望が上がっていますが、開発チームからは「当面のところ計画はない」といったニュアンスのコメントが続いています。
したがって、「いつか復活するだろう」という期待に賭けるより、この記事で紹介したような現実的な代替案を前提に設計する方が安全です。
まとめ:Mac でユーザーフォームにこだわりすぎないことがポイント
本記事の内容を、最後に一度整理します。
- Mac 版 Excel の VBE では、ユーザーフォームの新規作成・編集は仕様として非対応。
- Windows で作成済みのフォームは、Mac で動くことも多いが編集はできない。ActiveX 等は特に注意。
- 現実的な対応方針は次の 3 つ:
- Windows 版 Excel でフォームを開発し、Mac は実行専用にする。
- シート上のフォームコントロールやデータフォーム、InputBox で代替 UI を構築する。
- 中長期的には Office スクリプトや JavaScript アドインなど、クロスプラットフォーム技術へ移行する。
- 「シートをフォームとして使う」発想に切り替えると、Mac だけでも意外と多くのことができる。
「ユーザーフォームが挿入できない」という事実は変えられませんが、仕様を正しく理解し、どこまでを VBA でやるのか・どこから別技術に任せるのかを明確にすれば、Mac 環境でも十分実用的なツールを作ることができます。
これから Mac で VBA を使う方は、最初から「Mac ではユーザーフォームが作れない」前提で設計を考えることで、後戻りの少ない開発ができるはずです。

コメント