Excel2016からライセンス条項の変更により、Office365と同様に1ライセンスでWindowsとMac両方にインストールできるようになりました。
表計算としての機能では両OSで高い互換性を持つExcelですが、一部操作が違ったりします。特にVBA関連では大きな違いがまだ存在しています。
ココナラではExcel関連の出品や公開案件が多く見られる中で「Excel for Macは対応不可です。」という文面を見たこともある筈です。ここではその違いをVBAをメインに述べていきたいと思います。
Excel for MacでのVBAの違いは昔から有名でしたが、ここ最近はかなり近い操作感になりつつあります。ただし、結構な違いは残ったままです。
1. VBEで日本語を入力するとキャレットがずれる
2. WindowsObject系は使用不可
3. 代替のAppleScript・JXAが意図しない挙動をする
4. ファイル操作は明示的な権限譲渡が必要
5. 日本語のあるパスでは不具合が発生する
6. SaveAsコードではUTF-8形式のCSVファイルは出力できない
7. ユーザーフォームは作成・編集不可
8. OS判定が複雑になってしまう
9. 画像関連ではPNGファイルが使用可能
1. VBEで日本語を入力するとキャレットがずれる
VBAがはじめて実装されたExcel2011 for Macからある問題でした。日本語入力(正確にはマルチバイト文字)には癖がある中でキャレットがずれるというオマケが付いてきます。このオマケはVBEのフォント設定をMSGothicのような等幅フォントを設定することで解消できます。
2. WindowsObject系は使用不可
当然の事ながらOSが違うので使用できません。代替機能は次に紹介するAppleScript・JXAとなります。Excel2011 for Macまではインラインと言って、VBA内にスクリプトを書くことで機能させることができましたが、Excel2016からは指定フォルダにスクリプトファイルを保存しておき、そのファイルを呼び出して使用する方法に変更されました。そのため、もし配布する場合はExcelファイルとスクリプトファイルを2つ準備した上でインストール手順を説明する必要があります。
3. 代替のAppleScript・JXAが意図しない挙動をする
これは不安定であると言い換えるべきかもしれませんが、使用可能とされているものが使用できない事が多々あります。デバッグが肝要と思い知らされます。
4. ファイル操作は明示的な権限譲渡が必要
Excel2016からDir関数も使用できるようになりましたが、ファイル関連は初めてアクセスする際にファイルアクセス権限譲渡ダイアログが表示され、権利譲渡作業が終わるまでマクロが止まります。そのため、確実にファイルを取り込んだり、名前やサイズを取得したり、出力する際はAppleScriptで実装する必要があります。
5. 日本語のあるパスでは不具合が発生する
エラーで止まります。うまくいく場合もありますが、かなり不安定です。
6. SaveAsコードではUTF-8形式のCSVファイルは出力できない
新しくファイル出力するSaveAsコードにUTF-8形式のCSVファイルがオプションとして追加されましたが、挙動が不安定です。Windowsでは問題なく出力できます。
7. ユーザーフォームは作成・編集不可
Excel2016からユーザーフォームは作成・編集できません。またユーザーフォームに対する設定を動的な(コード)操作する際にMacでは未対応のものを対象にした場合、エラーが発生します。フォームのプロパティは確認できるので、そこに表示されていない設定は原則使用するべきではありません。
8. OS判定が複雑になってしまう
これは仕方ないことですが、MacでコーディングしたVBAをWindowsで動かす場合、明確にOS判定コードを入れないとMac専用関数を認識せずにエラーが発生します。
9. 画像関連ではPNGファイルが使用可能
画像の挿入やユーザーフォームに表示する画像ファイルにPNGが利用できます。ただし、ファイルアクセス権限譲渡が完了している必要があります。