OneDriveやSharePointのファイルを、PCに同期したフォルダからPower Queryで読み込んでいませんか。自分のPCでは問題なく更新できますが、同じブックを別の人が開いて更新すると「ファイルが見つかりません」というエラーになります。同期フォルダのパスには、自分のユーザー名や同期した場所がそのまま含まれているためです。
この記事では、取り込み元をURLで指定し、ファイルへのアクセス権がある人なら誰でも同じクエリで更新できるようにする手順をまとめます。
同期フォルダのパスで作ると何が起きるか
同期フォルダ経由で作ったクエリは、たとえば次のようなパスを参照しています。
C:\Users\tanaka\OneDrive - 株式会社サンプル\営業\2026年売上.xlsx
このパスは「tanakaさんのPCで、このライブラリをここに同期している」場合にしか成り立ちません。ほかの人のPCではユーザー名が違いますし、そもそも同期していないこともあります。同期していても、フォルダ名や同期した位置が違う場合があります。
今のクエリがどちらで作られているかは、次の手順で確認できます。
- 「データ」タブ →「クエリと接続」を開く
- 対象のクエリを右クリック →「編集」でPower Queryエディターを開く
- 「ホーム」→「詳細エディター」を開く
File.Contents("C:\Users\...のように、ドライブ文字から始まるパスがあれば同期フォルダ経由です
Web.ContentsとSharePoint.Filesの使い分け
URLで参照する方法は主に2つあります。
| 方法 | 向いている場面 | 注意点 |
|---|---|---|
Web.Contents でファイルのURLを直接指定 |
読み込むブックが1つに決まっている | ファイルの移動や名前の変更で参照が切れる。URLに余計な部分が残ると読めない |
SharePoint.Files でサイトを指定し、一覧から絞り込む |
同じフォルダに複数のファイルがある/ファイル名を後から切り替えたい | サイト内の全ファイルの一覧を取得するため、ファイルが多いサイトでは時間がかかることがある |
ファイルが1つで場所も変わらないなら Web.Contents のほうが簡単です。フォルダ単位で扱いたいなら SharePoint.Files を使います。
ファイルのURLを取得する
Web.Contents で使うのは、ファイルそのものを指すURLです。
- 取り込み元のブックを、SharePointまたはOneDriveからデスクトップ版Excelで開く
- 「ファイル」→「情報」を開き、パスをコピーするボタンを使う(表示名はバージョンによって違う場合があります)
- コピーしたURLの末尾に
?web=1など?以降が付いていたら、?から後ろを削除する
整えたURLは、おおむね次のような形になります。
# SharePointサイトのドキュメントライブラリ
https://contoso.sharepoint.com/sites/Sales/Shared%20Documents/売上/2026年売上.xlsx
# 職場・学校アカウントのOneDrive
https://contoso-my.sharepoint.com/personal/tanaka_contoso_com/Documents/売上/2026年売上.xlsx
注意点が2つあります。
- 「共有」ボタンで作る共有リンク(
/:x:/などを含む短いURL)は形式が違うため、そのままでは読み込めないことが多いです。上の手順でファイルのパスを取得してください。 - URLの
%20などは、スペースや記号を変換した表記です。手で書き換えず、コピーしたものをそのまま使います。
個人用のMicrosoftアカウントのOneDriveは、URLの形や認証の方法が職場・学校アカウントと異なります。同じ手順で読めるかどうかは、お使いの環境で確認してください。
方法1:Web.Contentsで1つのブックを読み込む
画面から作る手順
- 読み込み先のブックで「データ」→「データの取得」→「その他のデータ ソースから」→「Web から」を選ぶ
- 整えたファイルのURLを貼り付けて「OK」
- 認証の画面が出たら「組織アカウント」を選んでサインインし、「接続」
- どの階層に資格情報を適用するかを選べる場合は、サイトの階層を選んでおくと、同じサイトのほかのファイルでも使い回せます
- ナビゲーターで読み込むテーブルまたはシートを選び、「データの変換」または「読み込み」
できあがるMの例
let
ソース = Excel.Workbook(
Web.Contents("https://contoso.sharepoint.com/sites/Sales/Shared%20Documents/売上/2026年売上.xlsx"),
null,
true
),
売上テーブル = ソース{[Item = "売上", Kind = "Table"]}[Data]
in
売上テーブル
同期フォルダ経由の既存クエリを直す
すでにクエリを作り込んでいる場合は、作り直さなくても大丈夫です。詳細エディターで最初のステップだけを差し替えます。
// 変更前
ソース = Excel.Workbook(File.Contents("C:\Users\tanaka\OneDrive - 株式会社サンプル\営業\2026年売上.xlsx"), null, true),
// 変更後
ソース = Excel.Workbook(Web.Contents("https://contoso.sharepoint.com/sites/Sales/Shared%20Documents/売上/2026年売上.xlsx"), null, true),
読み込むシートやテーブルが同じなら、2つ目以降のステップはそのまま使えます。差し替えたら、各ステップをクリックしてエラーが出ていないかを確かめます。
方法2:SharePoint.Filesでサイトからファイルを選ぶ
画面から作る手順
- 「データ」→「データの取得」→「ファイルから」→「SharePoint フォルダーから」を選ぶ
- サイトのURLを入力する。ファイルやフォルダのURLではなく、
https://contoso.sharepoint.com/sites/Salesのようにサイトの階層までにします - 「組織アカウント」でサインインして接続する
- ファイル一覧が表示されたら「データの変換」を選ぶ
Folder Path列とName列のフィルターで、対象のファイルだけに絞り込む- 残った行の
Content列にある「Binary」をクリックし、テーブルまたはシートを選ぶ
できあがるMの例
let
ソース = SharePoint.Files("https://contoso.sharepoint.com/sites/Sales", [ApiVersion = 15]),
対象ファイル = Table.SelectRows(
ソース,
each [Folder Path] = "https://contoso.sharepoint.com/sites/Sales/Shared Documents/売上/"
and [Name] = "2026年売上.xlsx"
),
ブック = Excel.Workbook(対象ファイル{0}[Content], null, true),
売上テーブル = ブック{[Item = "売上", Kind = "Table"]}[Data]
in
売上テーブル
Folder Path に入る値の書き方(スペースがそのままか、ライブラリ名が英語か日本語か)は、サイトによって違うことがあります。手で入力せず、プレビューに表示された値をコピーして条件に使ってください。
他の人の環境で更新できるか確認する
URLで参照するようにしても、次の条件がそろっていないと、ほかの人のPCでは更新できません。
- 取り込み元ブックの閲覧権限:更新する人それぞれに、取り込み元ファイルへのアクセス権が必要です。読み込み先のブックだけ共有しても足りません。
- 各PCでのサインイン:資格情報は各PCに保存され、ブックには含まれません。ほかの人が初めて更新するときは認証の画面が出るので、「組織アカウント」でサインインしてもらいます。
- 間違った認証方法を選んだとき:「匿名」などを選んで接続できなくなった場合は、「データ」→「データの取得」→「データ ソースの設定」で該当のURLを選び、アクセス許可を編集するかクリアしてから接続し直します。
共有する前に、同僚に一度更新してもらう(または別のアカウントで試す)と確実です。Web版のExcelでどこまで更新できるかは、契約や機能の提供状況によって異なります。使う予定があれば、実際の環境で確かめてください。
よくあるつまずき
- 「形式が正しくない」などのエラーになる:URLに
?web=1などが残っていて、ファイルではなくWebページの内容を読もうとしている可能性があります。?から後ろを削除します。 - ファイルを移動・名前変更したら更新できなくなった:
Web.ContentsはURLを、SharePoint.Filesはフィルターの条件を新しい場所に合わせて直します。 - 編集中の内容が反映されない:読み込まれるのは、サーバーに保存されている内容です。取り込み元ブックで保存が終わってから更新します。
- SharePoint.Filesの更新が遅い:サイトのファイルが多いほど、一覧の取得に時間がかかります。読むファイルが1つに決まっているなら、
Web.Contentsへの切り替えを考えます。 - プライバシーレベルについてのメッセージが出る:SharePointのデータと、ほかのデータソース(社内の別ファイルなど)を組み合わせると表示されることがあります。各データソースのプライバシーレベルを、社内のルールに沿って設定してください。
