monky88’s blog

文章を書けるようになりたいチンパンジー

Windowsで作成したExcelマクロはMacOSでも動くのか?

結論

全然動かない!!

,,,

業務で必要があったので調査したけど、

移行云々の前にそもそもExcel for Macの開発タブの機能が

Windowsと違いすぎてお話にならない。

中途半端すぎて、無いほうがマシな気がする。

 

ということで実際どれくらい違うのか、まとめてみました

調査結果

 まず、「Mac マクロ」「Mac Excel VBA」とかで調べると出てくるのが

以下のような情報

・ファイルパス区切り文字が異なる(※1)

Macはソース上のバックスラッシュを認識しない(char(92)で置換する必要がある)(※1)

・セル内改行コードが異なる。(※1)

・Office2019が動くのはMac OS X 10.10 yosemite以上(※2)

 

※2
https://qiita.com/masato1230/items/58d82ede75737a56fdc1

※3
http://monomania.sblo.jp/article/151126018.html

 

まぁこれくらいなら動く簡単に移行させられそうな気がした

ところがどっこい実際に移行させてみたら次のような事象が発生した

 
・確認した端末の情報
OS       :MacOs Mojava 10.14.6
Excelのバージョン:Excel for Mac 16.16.18(200112)

■1
【関数の発火方法が異なる】
Macのエクセルでは「ActiveXコントロール」が存在しない
Windowsで「ActiveXコントロール」から追加した画面部品にマクロを設定している場合動作しない
→「フォームコントロール」から同じ見た目の部品を配置、ボタン等の部品を右クリック「マクロの登録」から発火元の関数を設定し直す必要がある。

■2
【フォームコントロールの扱いが異なる】
「1」と内容がかぶるが
ActiveXコントロール」が存在しない為、コンボボックスやラジオボタンをマクロ上から操作できない。

■3
【一部標準関数の扱い方が異なる】
GetOpenFileName関数のFileFilterに設定している引数(xlsxファイルしか選択できないようにする設定)
をマック用に変更しないとシステムエラーが発生する
■4
【マクロ付きエクセルは読み取り専用で開かれてしまう】
※原因不明

■5
Windowsと同じ方法でカレントディレクトが取得できない】
MacでCurDir関数を使用すると全角文字が文字化けしてしまう

■6
【FileSystemObjectが使えない】
Macで動くスクリプト言語を記載してVBAから実行すれば動くらしい
http://neos21.hatenablog.com/entry/2019/01/21/080000

■7
【一部標準関数の扱い方が異なる その2】
Workbooks.Open関数に「IgnoreReadOnlyRecommended」を指定すると実行時エラーになる

■8
【Dictionaryが使えない】
CreateObject(“Scripting.Dictionary”)を実行するとシステムエラーになる。
→どうしてもmapを使いたい時は自作すると使えるようになるらしい。
http://fccreator.blogspot.com/2014/03/macmacexcelvbadictionary.html

■9
【ユーザーフォームが使えない】
Windows側でuserFormを作成し、Macで確認したところフォームが消えている。
Macで右クリックしたところ、挿入の選択肢にユーザーフォームが存在しなかった。

 

間違ってる情報があったら教えていただけると嬉しいです。

 

今まで、業務ではほぼJavaしかやったことがなかったので

OSの違いによる洗礼を初めて浴びましたという話でした。

MacでEマクロを組もうとしている誰かの助けになれば幸いです。