Excel基礎

トップ > Excel > Excel基礎 > 記事
Excelトップへ
Excel基礎一覧へ



2023年1月15日【ID:0】

【番外-024】OneDrive内のパスをVBAで参照

※IT予備メンバーに加入して連携すると、
一部の広告が非表示になります。


VBAでExcelファイル配下のパスを取得するために「ThisWorkbook.Path」などを活用することが多いかと思います。
このコードを活用したマクロファイルをOneDrive内に配置したら、正しく実行できなくなったという報告を受けました。

今回は、OneDrive内に配置した場合に「なぜ正しく実行できなくなったのか」と「どうすれば実行できるのか」の2点について解説していきます。




・なぜ正しく実行できなくなったのか

なぜ正しく実行できなくなったのかというと、取得されたパスに問題があるためです。
試しにOneDrive内に保存した「正しく実行できないExcelファイル」に以下のコードを記述し実行してみます。

そうすると、恐らく以下のようにURLが表示されるかと思います。

これが原因です。
本来であれば、ローカルパス(C:\Users\[アカウント]\OneDrive\確認用)が取得されるべきですが、URLが取得されてしまっているため、コードの内容によってはこれが原因でエラーになります。
※Workbooks.Openでは実行できますが、Openステートメントを使う場合(テキストファイルなどを読み込む場合)などはエラーになる可能性があります。

ちなみに、私のOneDriveフォルダはDドライブ配下に配置しております。

D:\OneDrive\

※デフォルト設定の場合は以下になるかと思います。

C:\Users\[アカウント]\OneDrive\

なぜURLが取得されるのかというと、OneDriveの「ファイルのコラボレーション」機能が設定されているためです。
この機能により、OneDrive上のファイルを他のユーザーとリアルタイムで共同編集することができます。

この共同編集とはブックの共有とは異なります。
※ブックの共有とは以前の機能で、共同編集の機能とは異なり機能制限が多くあります。共同編集の機能は古いバージョンには対応していません。

この共同編集とブックの共有の違いについてはこちらでは割愛します。





・どうすれば実行できるのか

上記にて、OneDriveの「ファイルのコラボレーション」機能が設定されていることでパスがURLになることが分かりました。
この理屈から次の対策方法が考えられます。

①ファイルをOneDriveの外に移動する
②「ファイルのコラボレーション」機能をオフにする

ただ、この2つの方法の場合は、共同編集ができなくなってしまいます。
「ファイルのコラボレーション」機能をオンの状態で対応したい場合は、次の方法などがあります。

③URLをローカルパスに変換する機能をVBAで実装する

①に関しては、ファイルの位置を変更することになるため、根本的な解決にはなりません。
そのため②と③について、順に解説していきます。




→②「ファイルのコラボレーション」機能をオフにする

Windows11の場合について解説していきます。
※Windows11以外の場合に関しても同じような手順で行えます。

まず初めに、画面右下のOneDriveのアイコンをクリックします。

以下の画面が表示されたら、設定を開きます。

設定画面の中に「同期とバックアップ」という項目があります。その中の下へ移動すると詳細設定があるため、そちらを展開します。
展開したところに「ファイルのコラボレーション」という項目が表示されるため、こちらをオフに切り替えれば設定完了です。





→③URLをローカルパスに変換する機能をVBAで実装する

対象のExcelファイルを開いて以下の関数を作成します。

GetPath関数により、パスに「https:」が含まれる場合は、ローカルパスに変換して返すような仕組みになっています。
こちらは以下のように活用できます。
※こちらではメッセージボックスで表示させていますが、変数に格納するなどとして活用できます。

GetPath関数は、OneDriveの外であったとしても問題なく活用できるように開発しています。
第2引数の「"D:\OneDrive\"」はOneDriveのフォルダのパスになるので、必要に応じて変更してください。

GetPath関数の仕組みは、第1引数で受け取ったパスに「https:」が含まれる場合は、パスの前半部分を第2引数のOneDriveのローカルパスに置換して返すようになっています。

OneDrive内のパスのURLには法則性があります。
その法則は「4つ目の"/"以降が実際のOneDrive内の相対パス」というものです。
なので、4つ目の「/」の位置をInStrで探して、Left関数により、その位置よりも前の文字列を抽出して置換しています。

GetPath関数を活用することで、以下のようにローカルパスを取得できるようになります。

OneDriveのパスを正しく取得する方法については以上になります。


パソコンで開く場合は、記事の最後に「リンクコピー」があるためご活用ください。

※IT予備メンバーに加入して連携すると、
一部の広告が非表示になります。


メンバー募集 メンバー募集





リンクの共有はこちらから行えます。

  リンクコピー    X Facebook はてなブックマーク Pocket
トップ > Excel > Excel基礎 > 記事
Excelトップへ
Excel基礎一覧へ


- 人気の記事 -



- メンバー限定 [一覧] -



サイト累計閲覧数

7420704

有料動画講座
(買い切り)

Excel完全制覇


ちょっとした機能 便利ツール
✨困ったとき✨ Excel
保護解除ツール

【Excel基礎】

【番外-028】不要な列(行)を除いて一括コピー

【1-入門19】条件付き書式とは?その活用方法

【3-VBA13】引数ありプロシージャ(関数)を単体で実行する方法

【2-数式12】INDIRECT関数の使い方

【3-VBA04】条件分岐とは?基本的な使い方から応用

【2-数式08】各シートの値を集計する方法

【番外-050】「複数行1データ」を「1行1データ」の表に変換

【1-入門30】新チェックボックスの作成方法

【1-入門11|ex2】図形の吹き出し部分と余白の調整

【3-VBA26】VBAでシートの指定方法と使い分け

【1-入門30】チェックボックスの作成方法2

【番外-020】色んな日付の計算方法

【番外-049】条件付き書式などで「カーソル移動ができない問題」

【4-Officeスクリプト00】はじめに

【3-VBA03】繰り返し文とは?基本的な使い方から応用

【番外-014】変数宣言・型宣言は省略していいの?

【1-入門04】セルの表示形式の基礎から応用

【番外-054】セル結合された表から数式で値を抽出

【1-入門22】オートフィルの使用方法

【番外-042】8桁の数値を日付形式に変換

【1-入門03】数式の基本・相対参照と絶対参照

【3-VBA17】Public・Privateとは

【2-数式06】配列数式とは

【1-入門01】文字の入力・削除・書式設定・配置

【1-入門06】コピーと貼り付け





一覧ページへ

トップ > Excel > Excel基礎 > 記事
Excelトップへ
Excel基礎一覧へ