日程Fit|「いつ空いてますか?」の往復はもう不要。候補日を選んでURLを送るだけ|登録不要|今すぐ無料で使う →

Excel for MacでVBAユーザーフォームが挿入できない原因と代替策まとめ

「挿入メニューにユーザーフォームがない」「標準モジュールとクラスモジュールしか選べない」──Excel for Mac で VBA を触り始めると、ほぼ必ずぶつかる壁です。本記事では、なぜ Mac 版 Excel ではユーザーフォームを挿入できないのかという“仕様”の話と、現実的な代替案・開発フローを、実務レベルで詳しく解説します。

日程Fit。無料・登録不要。「いつ空いてる?」を、ひとつのリンクで。リンクを送って、○△×でかんたん日程調整。無料で日程を作る。
目次

Excel for Mac で「ユーザーフォームが挿入できない」症状

まずは、よくある状況を整理します。

  • VBA プロジェクトを開き、[挿入] メニューを開いても、表示されるのは「標準モジュール」「クラスモジュール」「ファイル…」程度。
  • Windows の解説サイトや書籍では、同じ場所に 「ユーザーフォーム」 が出ているはずなのに、Mac では見当たらない。
  • 開発タブやマクロ設定をいじっても変化がない。

この挙動は「設定や権限が足りないから」ではなく、Excel for Mac の VBA エディターの仕様そのものです。

結論:Mac 版 Excel の VBE はユーザーフォームの新規作成・編集に非対応

Microsoft 公式フォーラムや Microsoft Q&A などで繰り返し回答されているとおり、Excel 2016 以降の Mac 版 Excel に搭載されている VBA エディター(VBE)では、ユーザーフォームの新規作成・編集機能が削除されています。

ポイントを整理すると、次のようになります。

項目Windows 版 ExcelMac 版 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 つに集約されます。

  1. Windows 版 Excel でフォームを作り、Mac は実行専用にする(推奨)
  2. Mac だけで完結する代替 UI(シート上 UI / データフォーム / InputBox)に寄せる
  3. 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 との共存が楽になります。

  1. Windows 版 Excel でブックを開く。
  2. VBE でフォーム(例:frmInput)を作り、デザイン・イベント処理を実装。
  3. ビジネスロジックは極力 標準モジュール.bas)に切り出す。
  4. フォームのイベントからは、標準モジュールの公開関数を呼び出す構造にする。
  5. 完成したらブックを保存し、Mac で開いて動作確認。

このようにしておけば、Mac で問題が出たときも、フォーム自体は Windows で直し、ロジック部分は Mac でも編集できるため、運用がしやすくなります。

64 ビット版 Office での Declare 文の注意

Windows 版 Excel が 64 ビット版の場合、Windows API の Declare 文には PtrSafeLongPtr が必要になります。一方 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 は不可)。

  1. Excel のリボンで [開発] タブを表示。
  2. [挿入] → フォームコントロールのボタン・コンボボックス・チェックボックス などを選び、シートに配置。
  3. コントロールを右クリック → [マクロの登録] で、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.InputBoxMsgBox を組み合わせるパターンです。後述のサンプルは 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.OperatingSystemApplication.Platform などで OS を判定し、パスやメッセージを切り替えるのが定番です。

実践例:ユーザーフォームを「シート UI+InputBox」で置き換える

ここでは、もともと Windows のユーザーフォームで作っていた「顧客登録フォーム」を、Mac でも動く形で作り直すイメージを紹介します。

想定する元のフォーム

  • 項目:名前、電話番号、メールアドレス
  • 「登録」ボタンを押すと、一覧表の末尾に追加
  • 入力チェック(名前必須、メール形式チェックなど)

これを Mac 対応にするときの一案が、次のような構成です。

  1. 「入力シート」を 1 枚用意し、セル B3〜B5 に項目名と入力欄を作る。
  2. 同じシート上に「登録」「クリア」ボタン(フォームコントロール)を配置。
  3. 顧客一覧用のシート(例:「顧客一覧」)を別に作る。

その上で、以下の 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 ではユーザーフォームが作れない」前提で設計を考えることで、後戻りの少ない開発ができるはずです。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次