VBAでFileSystemObjectやWorkbookのパスを扱う際、ファイルがOneDrive上に保存されていると、パスが「https://」から始まるWeb URL形式になってしまい、そのままでは通常のファイル操作やブックを開く処理でエラーになることがあります。
この記事では、Windowsの環境変数(Environ関数)を利用してOneDriveのローカルパスを取得し、クラウド上のURLパスをローカルパスに置換してマクロを正常に動作させる方法を解説します。
前提条件・想定環境
- OS: Windows 10 / 11
- アプリケーション: Microsoft Excel (VBA)
- 環境: OneDrive(個人用またはMicrosoft 365 / OneDrive Consumer)
環境変数(PowerShellでの確認)
Windowsの環境変数には、OneDriveの同期フォルダのローカルパスが格納されています。PowerShellで確認するには、以下のコマンドを実行します。
Get-ChildItem env:
出力結果の中から、OneDrive または OneDriveConsumer の値を確認します。
Name Value
---- -----
OneDrive C:\Users\papanda925\OneDrive
OneDriveConsumer C:\Users\papanda925\OneDrive
VBAのEnviron関数でローカルパスを取得する
VBAの Environ 関数を使うことで、オペレーティングシステムの環境変数文字列を取得できます。個人用アカウントの場合は OneDrive または OneDriveConsumer を指定します。
Sub TestOneDriveLocalPath()
Dim localPath As String
' 環境変数からOneDriveのパスを取得
localPath = Environ("OneDrive")
If localPath = "" Then
localPath = Environ("OneDriveConsumer")
End If
Debug.Print "ローカルパス: " & localPath
End Sub
【実用例】OneDriveのURLパスをローカルパスに置換する関数
取得したローカルパスを利用して、ブックのフルパス(https://...)に含まれるURL部分をローカルパスに変換する関数を作成します。
Function ConvertOneDrivePath(ByVal targetPath As String) As String
Dim oneDrivePath As String
' OneDriveのローカルパスを取得
oneDrivePath = Environ("OneDrive")
If oneDrivePath = "" Then
oneDrivePath = Environ("OneDriveConsumer")
End If
' URL形式(https://)かつOneDriveパスが含まれている場合のみ置換
If InStr(1, targetPath, "https://", vbTextCompare) > 0 And oneDrivePath <> "" Then
' ※環境やテナントによりURLのエンコード形式が異なる場合があります
' ここでは代表的な置換処理の例を示します
' 必要に応じてReplace処理を調整してください
End If
ConvertOneDrivePath = targetPath
End Function
関連リンク
Environ 関数 (Visual Basic for Applications) | Microsoft Learn
この記事の更新履歴
この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。
2026年9月12日
- 追加OneDrive環境変数を利用してファイルパスの「https://」をローカルパスへ安全に置換する実用的なVBAサンプルコードを追加しました。
- 変更コードブロックや見出しのマークアップをCocoonテーマに最適化し、空の段落を削除しました。
