Excelの外部参照は、他のExcelファイルのデータを参照するための便利な機能です。しかし、OneDrive上にあるファイルを参照する場合、予期せぬ挙動でエラーとなったので備忘録。
なお、使用のExcelは、Microsoft® Excel® for Microsoft 365 MSOです。
発生した事象
具体的には、次のような数式で外部参照(リンク)されたセルがあり、OneDriveに同期していた。リンク先の値も取得できていた。
例) ='C:\Users\〇〇\OneDrive\test\[サンプル.xlsx]日報'!$C$2
この状態で、リンクされたファイル(この事例では、サンプル.xlsx)を開いた後、当該セルについて
- リンクの編集から「値の更新」
- F2キーで数式の編集状態後、何も更新せずEnterで確定
など、値の更新をしようとすると、「値の更新」ダイアログが表示され、リンク先の再選択が必要になる。
通常、「値の更新」ダイアログが起動する場面は、参照先のファイル等が存在しない場合です。しかし、このケースではファイルが存在しているにも関わらず、再選択が必要となります。
しかも、ファイルを再選択しても、再度「値の更新」ダイアログが表示されるの繰り返しでキャンセルをするしかない。
そのため、値の更新をキャンセル(式の編集もしない)で、リンクされたファイルを閉じた後に、リンクの編集から「値の更新」をすると問題なく値が表示される。
なお、詳細の原因不明だが、OneDriveに同期されていない場所への外部参照であれば、当該事象は発生しなかった。
VBAでの補足説明
この事象は、VBAの実行時においても、当該事象が発生して原因を探る中で分かった。
なお、あくまで解決できた一例であるが、ファイルを開く際に、読み取り専用とすることでエラーは回避できた。
Set リンク先ファイル = Workbooks.Open(フルパス, ReadOnly:=True)
OneDriveに同期されたファイルで、ReadOnly:=True にしていないと、VBAの実行時に「値の更新」ダイアログが表示される状態になっていた。
環境や処理の前提が違うが「読み取り専用」として良いなら、その方が良さそう。
以上、OneDrive上にあるファイルを参照する場合、予期せぬ挙動でエラーとなった備忘録でした。