Excelマクロ(VBA・Officeスクリプト)がMacで動かない主な原因と対処法
ExcelマクロをWindowsで作成し、いざMacで動かしたら「エラーになる」「ボタンが反応しない」「挙動が微妙に違う」——
これは珍しいことではありません。
本記事では、Windowsでは正常動作するのにMacで動かない主な原因と、その対処法を整理します。
① VBAの「Windows専用機能」を使っている
よくある例
DeclareステートメントでWindows APIを呼び出しているCreateObject("WScript.Shell")FileSystemObjectActiveXコントロール
これらはWindows依存です。
特に以下はMacではほぼ使えません。
- Windows API
- ActiveXコントロール
.exe実行- レジストリ操作
対処法
- API呼び出しは削除または代替ロジックへ
- ActiveXではなくフォームコントロールを使用
- 外部処理はPower Automateやクラウドに移行
② パス指定の違い(最頻出トラブル)
Windows:
C:\Users\user\Desktop\data.xlsx
Mac:
/Users/user/Desktop/data.xlsx
バックスラッシュ \ はMacでは使用しません。
よくある問題コード
Open "C:\temp\data.txt" For Output As #1
対処法
ThisWorkbook.Path & Application.PathSeparator & "data.txt"
Application.PathSeparator を使うとOS依存を回避できます。
③ 32bit / 64bit問題(VBA)
Windowsは32bitと64bitが混在していますが、Mac版Excelは基本64bitです。
Windows用に書いたAPI宣言が以下のようになっている場合:
Declare Function GetTickCount Lib "kernel32"
Macではエラーになります。
さらに64bit非対応宣言もエラー原因になります。
対処法(Windows向け修正版例)
#If VBA7 Then
Declare PtrSafe Function ...
#Else
Declare Function ...
#End If
※ただしMacではWindows API自体が使えません。
④ ActiveXコントロールはMac非対応
Windowsでよく使われる:
- ActiveXボタン
- ActiveXチェックボックス
- ActiveXリストボックス
Macでは表示すらされないことがあります。
対処法
- フォームコントロールへ置き換える
- UserForm中心設計に変更
⑤ Officeのバージョン差異
Windows版とMac版では機能差があります。
例:
- 一部のVBAオブジェクト未対応
- ダイアログ仕様が異なる
- イベント発火タイミングが違う
特にMicrosoft 365の更新タイミングがOSでずれることがあります。
⑥ Officeスクリプトの場合
Officeスクリプトは基本クラウド実行
- ブラウザ版Excelでは動く
- デスクトップ版Macでは制限があるケースあり
Officeスクリプトは
Microsoft 365
のWeb版Excelを前提に設計されています。
問題になる例
- ローカルファイル参照
- OneDrive未同期
- 外部接続制限
⑦ イベント処理の違い
例:
Worksheet_Change
Macではイベント発火のタイミングが微妙に異なる場合があります。
特に:
- 計算モード
- 再描画処理
- ScreenUpdating
が影響します。
⑧ 文字コード・改行コードの違い
Windows:CRLF
Mac:LF
テキスト出力処理で文字化けやレイアウト崩れが起こることがあります。
まとめ:Mac対応マクロを書くための原則
✔ Windows APIは使わない
✔ ActiveXは使わない
✔ パスは PathSeparator を使う
✔ 外部依存を減らす
✔ クラウド前提設計にする
実務的な結論
もしWindows専用マクロを多用している業務ファイルなら、
- MacユーザーはWindows環境を使う
- 仮想環境(Parallelsなど)を使う
- もしくは完全クラウド化へ移行
が現実的な選択肢です。
