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のアイコンをクリックします。

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

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




ExcelVBAレベル確認

→③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基礎一覧へ


- 人気の記事 -



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



サイト累計閲覧数

7149180

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

Excel完全制覇


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

【Excel基礎】

【1-入門22|ex2】フラッシュフィルとは

【1-入門08】セルの結合・ウィンドウ枠の固定方法

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

【1-入門28】CSVとは・CSVメリット・CSV保存方法

【3-VBA20】処理時間を劇的に早くする方法

【3-VBA01】セルに値を自動入力する方法

【1-入門11|ex1】画像の一部を透過する方法・保存方法

【2-数式03】複数の関数を組み合わせる方法

【1-入門00】Excelの画面構成

【番外-021】作成したマクロにショートカットキーを設定

【番外-037】表の空白セルを上の値で埋める

【番外-036】瞬時にシートを移動する方法3選+α

【4-Officeスクリプト05】繰り返し処理とは

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

【番外-052】パワークエリ:参照ファイルをセル上で管理(相対参照にも対応)

【1-入門07】フィルターの設定方法

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

【3-VBA06】ユーザーフォームの作成方法

【1-入門16|ex2】いろんな印刷設定方法

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

【番外-038】項目単位で入力モードを自動切替

【2-数式11】参照抽出方法4選

【番外-009】重要ショートカットキー10選 その2

【2-数式01】関数とは?必要最低限の関数と活用方法

【番外-002】ファイルの埋め込み方法





一覧ページへ

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