[[20190918192951]] 『外部参照の絶対パスを相対パスに変更する(大量フ』(明日の日) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『外部参照の絶対パスを相対パスに変更する(大量ファイルの一括処理)』(明日の日)

エクセルのファイルが大量にあるのですが、データが絶対パスで外部参照になっています。つまり、ファイルを違うPCに移動したりした場合、参照がすべて動作しなくなる(さらに、参照元の変更が加えられた場合に情報が更新されなくなる)。そこで、相対パスに変更したい。

ファイルを一つずつ開いて、相対パスに変更することは可能かもしれませんが、ファイルが大量にあって現実的ではありません。すべての自動化は無理かもしれませんが、処理を楽にする妙案はありませんでしょうか?お願いします。

ネットで調べて、こういう情報も見ているのですが、簡単に解決しないようで困ってます。
https://support.microsoft.com/ja-jp/help/328440/description-of-link-management-and-storage-in-excel

< 使用 Excel:Excel2016、使用 OS:Windows10 >


>ファイルを違うPCに移動したりした場合、参照がすべて動作しなくなる(さらに、参照元の変更が加えられた場合に情報が更新されなくなる)。そこで、相対パスに変更したい。

相対パスであろうとファイルが移動すると基本的に動作しなくなることは変わりませんが、場所が移動するときはフォルダ単位で移動するということでしょうか。
また、参照元の変更というのはファイル名が変更されるということでしょうか。

ある程度法則性があってファイルの位置が決まっているならばできることもあると思いますが。
おおよそのフォルダ・ファイルの関係って掲示できますか。

>ファイルを一つずつ開いて、相対パスに変更することは可能かもしれませんが
変更するのは1つのファイルと大量のデータファイルではなく、(データファイルやお互いがお互いにリンクしていることも含む)大量のファイル群ということでしょうか。
(高橋) 2019/09/18(水) 20:40


  >そこで、相対パスに変更したい。 

  相対パスにすると何が起きると期待しているのか、説明して頂けませんか?

  例:△△のファイルの数式の参照を相対パスにしたら、「??のファイルを」(←ここが肝心)違うPCに
    移動しても引き続き移動した先にあるファイルを参照してくれる。

  ※「基本的には」エクセルは相対パスで保存しているので、わざわざ何かする必要はないです。
    そんなこと言ったって、実際に数式を見ると絶対パスになっているじゃないか、と思うかも知れないですが、
   それは、エクセルがブックを開くときに、相対パスから絶対パスに変換してくれた後を見ているからです。
   なので、参照元と参照先のファイルをその相対関係を維持したまま一緒に移動させれば、何もする必要はないです。
   (あくまで「基本的には」ですけども)

(半平太) 2019/09/18(水) 20:50


素早い対応ありがとうございます。説明が足りなかったようなので、追加です。

今回の件は、関連するファイルとフォルダー構造および名前など全てそのままで移動させた場合です。移動した際には特に何も変わりません(その後、移動先でファイル内容が更新されるということなので古いパスは使用しない)。そのため絶対パスを相対パスに変えれば動くはず、という話です。

その通りです。

上の説明でわかるかと思うのですが、△△のファイルの数式の参照を相対パスにしたら、「参照元のファイルと△△のファイル(など参照しあっている全てのファイル群)」を違うPCにフォルダの構造ごと移動しても、引き続き移動した先にあるファイルを参照してくれる

わかっていただけましたでしょうか?お願いします。
(明日の日) 2019/09/18(水) 21:26


本当ですか?どうすれば相対パスが絶対パスで保存しているかを見分けられるのでしょうか?

忘れていましたが、もう一つの大事な利点を追加です。絶対パスにユーザー名が含まれているので、相対パスにすることで、匿名性があがるというのもポイントですね。
(明日の日) 2019/09/18(水) 21:31


目的は理解いたしました。
別のPCとなるとドライブ・・・どころの騒ぎじゃなく大幅に移動になるのですね。

[[20110316151605]]
のあたりの話になると思いますが、単純な話だろうと思って気軽に手を出しましたが私の能力を超えるので回答できません。
申し訳ございません。

ただ、ファイルの一つ上のフォルダ名さえ共通にしておいて、かつネットワークドライブをリンクに使わなければいけそう・・・という気がしますが、正確にはわかりません。
(高橋) 2019/09/18(水) 21:50


 >本当ですか?どうすれば相対パスが絶対パスで保存しているかを見分けられるのでしょうか?

 一般的には、見分けることは出来ません。エクセルが勝手にやっていることなので。

 本当かどうかは、明日の日さんが引用したMicrosoftの記事の中の
 「相対リンクと絶対リンク」の項目に書かれていますので、本当だと思います。
  
 >外部のブックへのリンクは、可能な場合、相対的な参照方法で作成されます。
 >つまり、リンク元のデータ ファイルの完全なパスは記録されず、
 >リンク先のブックから相対的に参照できるパスの部分が記録されます。

 >リンク先のファイルが     C:\Mydir\Linked.xls で
 >リンク元のデータ ファイルが C:\Mydir\Files\Source.xls である場合、
 >リンク元のファイルが "files" という名前のサブフォルダにある限り、
 >それぞれのファイルを D ドライブに移動できます。

 兎に角、頭だけで考えていないで、実地にテストしてみてください。

 旨く行かなかったら、どんな相対的なフォルダ関係にあるものを、どう移動したか書いてください。
 (こちらでテスト出来る程度の詳細な記述であれば、こちらでも追試してみますよ。)

 あくまで、「基本的には」の話であり、Root(ドライブ)に近い所の移動だったり、
 バージョンによってもバグと思しき振る舞いが出るので、絶対じゃないです。

(半平太) 2019/09/18(水) 23:35


 大量ファイルのファイルっていくつ?
 1000個とか2000個?
(大げさすぎないか。) 2019/09/19(木) 00:10

  >本当ですか?どうすれば相対パスが絶対パスで保存しているかを見分けられるのでしょうか?

 エクセルファイルの実体はZIPファイルなので、拡張子xlsx をZip に変更してから、
 ダブルクリックして開くと、いくつかのフォルダーとファイルが表れます。

 xl > externalLinks > _rels > externamLink1.xlml.rels と辿って、

 開いて見たら、 <Relationship>のタグの中に相対アドレスが保持されていました。

(半平太) 2019/09/19(木) 08:45


ユーザーブックが在るフォルダAと
参照ブックが在るフォルダBの位置関係で、

(1) フォルダA = フォルダB
  リンク情報は「フォルダパスを含まないブック名のみ」

(2) フォルダBがフォルダAの下位に連なる
  リンク情報は「フォルダAを起点として、
         フォルダB迄のフォルダパス+ブック名」

(3) フォルダAとフォルダBが、同一ドライブ内で上記以外の位置関係
  リンク情報は「ドライブルートを起点として、
         フォルダB迄のフォルダパス+ブック名、
         但しドライブレターは含まない」
   (つまり、絶対パスからドライブレターだけを除いたものです)
    ※ これも『ドライブレベルでの相対パス』形態です。

(4) フォルダAとフォルダBが、別ドライブ
  リンク情報は「ドライブレターを含む絶対パス」

(3)(4)で「パスの中にユーザーアカウント名が含まれる」場合、
他PCへ同一フォルダ構造でコピーしても当然リンクエラーになります。

AddinBox/Tips21: Excelのリンクの管理と格納
http://addinbox.sakura.ne.jp/Excel_Tips21.htm

通常「相対パス」と思うのは(1)(2)ですね。

(AddinBox 角田) 2019/09/19(木) 10:02


追記:HTMLでの下記のような相対パス指定は、PCでは不可。

「ひとつ上のフォルダへ」
  ../参照先ブック

「ひとつ上のフォルダに戻って、隣のフォルダへ」
  ../隣のフォルダ/参照先ブック

「ふたつ上のフォルダに戻って、そこから下って隣のフォルダへ」
  ../../別のフォルダ/隣のフォルダ/参照先ブック

(AddinBox 角田) 2019/09/19(木) 10:52


 質問者さんのフォルダ構造がわからないので何とも言えませんが
 こちらで実験した結果です

 下記のように Cドライブ直下に
 C─Test┬sub─参照先.xlsx
        └参照元.xlsx

 を作成して

 参照元.xlsには参照先.xlsxを外部参照する数式を設定

 TestフォルダごとDドライブにコピー

 Dドライブの参照元.xlsxを開くと

 ='D:\Test\sub\[参照先.xlsx]Sheet1'!$A$1

 となっていました

 質問者さんの質問意図がわからないのですが・・・

( 渡辺ひかる) 2019/09/19(木) 10:59


> C─Test┬sub─参照先.xlsx
> └参照元.xlsx

この場合に記録されるリンクパスは
ドライブレター抜きの相対パスで下記になります。
『 /Test/sub/参照先.xlsx 』

したがって、Dドライブに移れば、[ D:\ ]直下の上記パスとして
> ='D:\Test\sub\[参照先.xlsx]Sheet1'!$A$1
になります。

> 質問者さんの質問意図がわからないのですが・・・
多分
>> 追記:HTMLでの下記のような相対パス指定
のような事をイメージしているのではないかと・・・

(AddinBox 角田) 2019/09/19(木) 12:10


 AddinBox 角田 さん 情報ありがとうございます

 >ドライブレター抜きの相対パスで下記になります。

 これは ドライブレターのみが省略?される と考えていいのでしょうか?

 試しに

 Dドライブの直下にTest2 というフォルダを作り CドライブからTestフォルダごと 貼り付けたら

 ='D:\Test2\Test\sub\[参照先.xlsx]Sheet1'!$A$1

 となりました

 質問者さんは 

 >今回の件は、関連するファイルとフォルダー構造および名前など全てそのままで移動させた場合です。

 とあるので、同じ状況かなと思った次第です

( 渡辺ひかる) 2019/09/19(木) 12:40


>      ┌ sub ─ 参照先.xlsx
> C─Test ┤
>      └ 参照元.xlsx

すみません、図を読み間違えていました。
(誤) ドライブレター抜きの相対パスで下記になります。
(誤) 『 /Test/sub/参照先.xlsx 』

(正) 相手が同一フォルダ(Test)に在る子フォルダ内のブックなので、相対パスで下記
(正) 『 sub/参照先.xlsx 』
(AddinBox 角田) 2019/09/19(木) 13:09


 AddinBox 角田 さん

 ありがとうございます。

 理解できました

( 渡辺ひかる) 2019/09/19(木) 13:30


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.