【ThisWorkbook.Pathだとダメ】OneDriveで同期しているファイルのローカルパス取得方法【VBA】


通常、ThisWorkbook.Pathを使えば自分自身の格納ディレクトリのパスを取得できますが、OneDriveで同期しているファイルの場合、OneDrive上のURLが返却されます。

(例:)
https://アカウント名-my.sharepoint.com/personal/・・・

※パスは、法人向け(OneDrive for Business)か個人向けかでドメイン部分が異なるようです

調べてみた結果、以下サイトで公開している関数が一番スマートな対処法でした。

[VBA]OneDriveで同期しているファイルまたはフォルダのURLをローカルパスに変換する関数 | 黒い箱の中

ポイントは以下の3点。

  • 環境変数を取得するVBAのEnviron関数を使って、OneDriveのローカルパスを取得
  • URLは法人向けと個人向けがあるのでそれぞれURLのパターンで判別
  • URLの後半("/Documents")以降は、OneDrive内のフォルダ階層をURLで表現しているので、"/Documents"以降を抜き出しつつ"/"を"\"に変換して連結