タイガーラック クリエイティブブログ
2025
December
05

【VBA】Excel マクロでのファイル自動保存処理をMac対応に拡張した話

今回は、社内で使用しているツールにて発生した不具合報告対応について共有します。

問題が発生したのは、Excelのマクロで実行されるファイルの自動保存処理でした。

処理としては、

  • 社内のファイルサーバーに保存されているファイルへの書き込み
  • もしファイルがなければ生成して保存
  • ネットワークに接続できなければローカルへ保存

という仕組みになっています。

しかし、社内のMacユーザーから「実行するとエラーが出る」という報告がありました。

調査したところ、原因は「パスがWindows固定で記述されていた点」にありました。

背景

普段はWindows端末での動作を前提にしていたため、

  • ネットワークドライブ(Z:\~)へ書き込み
  • 接続できない場合はWindowsのUSERPROFILE\Documentsへ書き込み

という処理を記述していました。

ところが、Mac上のExcel VBAでは、

  • Z:\ のようなドライブ文字は存在しない
  • \Documents\ ではなく、/Users/ユーザー名/Documents/ の形式になる
  • Environ(“USERPROFILE”) が空になる場合もある

といった違いがあります。

そのため、Macで実行すると フォルダの生成に失敗 → エラー という状況が発生していました。

対応方針

Macの場合とWindowsの場合で、保存先を切り替える処理を追加しました。

判定には VBA の Application.OperatingSystem を利用し、

If Application.OperatingSystem Like "*Mac*" Then

で、OSを判定しています。

修正したコード(抜粋)

以下が今回追加した Mac と Windows の分岐処理です。

変換関数のコード例

' 保存先に接続できなかった場合のローカル退避先
If Application.OperatingSystem Like "*Mac*" Then
    localFolder = Environ$("HOME") & "/Documents/Test/"
Else
    localFolder = Environ$("USERPROFILE") & "\Documents\Test\"
End If

処理のポイント

● Mac

USERPROFILE が正しく取得できないケースがあるため
HOME 環境変数 (/Users/username/) を使用
パス区切りは / を使用

● Windows

既存の USERPROFILE をそのまま使用
パス区切りには \ を使用

結果

この修正により、Windows / Mac のどちらでもファイルが正常に保存されるよう改善できました。

現在はMacユーザーからの「エラーで動かない」という報告は解消しています。

今後、VBAを利用した仕組みを作る際には、可能な範囲でMacも想定しておくことが重要だと痛感しました。

    最後に

    調べるとすぐに理解して解決できるようなことも、事前に全く知識がない分野だと「どこに問題があるのかがわからない」や「何を調べればいいのか検討がつかない」などといった状況になることがあります。

    そのため具体的な対応方法までは頭に入れておかずとも、OSによってパスの参照方法に違いがあると頭に入れておくと、解決速度が向上することがあるかもしれません。

    同じようなシステムを運用されている方の参考になれば幸いです。

    以上、Excel VBAにおけるファイル保存処理のMac対応報告でした。

    このカテゴリの最新記事

    関連記事

    SHOP LIST

    タイガーラック株式会社

    〒577-0056
    大阪府東大阪市長堂1-3-14 TOKUYASU Bld.