価格を計算するシートを作成しています。シートには、さまざまなコンポーネントの価格を取得するために、他のいくつかのワークブックへの参照が必要です。これは私のコンピューターでは正常に機能しますが、サーバーまたは別のコンピューターに移動すると、参照が見つかりません。
私のフォルダは次のように構成されています:
Folder
|-- prices.xlsx
|-- Fixed Components
| |-- ComponentsA.xlsx
| +-- ComponentsB.xlsx
|
+-- Variable Components
|-- ComponentsC.xlsx
+-- ComponentsD.xlsx
prices.xlsx
は、他のシートを参照するメインシートです。私のコンピューターでは、絶対パスで参照が作成されるため、ファイルをコピーしても、他のPC上のファイルを参照するのではなく、パスがマシンに固定されたままになります。
='\Variable Components\[ComponentsC.xlsx]Sheet1'!A1
のようなメインシートに入れることができるように、参照を相対にする方法はありますか。人々はマクロを信頼する傾向がなく、機能が動作しないと文句を言うので、これにVBAを使用したくありません。
外部ファイルをサブフォルダーに整理するために私が見た唯一の解決策は、式で外部ファイルへのフルパスを解決するためにVBAの使用を必要としました。他の人が使用したいくつかの例を含むサイトへのリンクは次のとおりです。
http://www.teachexcel.com/Excel-help/Excel-how-to.php?i=415651
または、すべてのファイルをサブフォルダーに分割するのではなく同じフォルダーに配置できる場合、ファイルをネットワーク上の場所に移動しても、VBAを使用せずに外部参照が解決されます。数式は単純に='[ComponentsC.xlsx]Sheet1'!A1
横断するフォルダ名なし。
次のシーケンスを使用して解決した同様の問題がありました。
CELL("filename")
関数を使用して、現在のファイルの現在のシートへのフルパスを取得します。
SEARCH()
関数を使用して、現在のExcelファイルとシートの[FileName] SheetName文字列の先頭を見つけます。
LEFT
関数を使用して、現在のファイルを含むディレクトリの完全パス名を抽出します。
手順3で見つかったディレクトリパス名を、ファイルの名前、ワークシートの名前、およびアクセスするセル参照と連結します。
INDIRECT()
関数を使用して、ステップ#4で作成したCellPathName
にアクセスします。
注:これらの同じ手順を使用して、名前が動的に作成されるファイル内のセルにアクセスすることもできます。ステップ#4では、セルのコンテンツ、現在の日付または時刻などから動的に作成されたテキスト文字列を使用します。
これらのすべてのステップを含むセル参照の例(各部品を個別に組み立てたもの)は次のとおりです。
=INDIRECT("'" & LEFT(CELL("filename"),SEARCH("[MyFileName]MySheetName",CELL("filename")) - 1) & "[" & "OtherFileName" & "]" & "OtherSheetName" & "'!" & "$OtherColumn$OtherRow" & "'")
LibreOfficeは、次の例のように、わずかに異なるCellPatnName構文を使用することに注意してください。
=INDIRECT(LEFT(CELL("filename"),SEARCH("[MyFileName]MySheetName",CELL("filename")) - 1) & "OtherFileName" & "'#$" & "OtherSheetName" & "." & "$OtherColumn$OtherRow")
間接経由でより簡単かつ短く:INDIRECT("'..\..\..\..\Supply\SU\SU.ods'#$Data.$A$2:$AC$200")
ただし、ワークブック内のリンクが多い場合、indirect()にはパフォーマンス上の欠点があります。
['../Data.ods']#Sheet1.A1
LibreOfficeで。意図はここにあります:大量のマスターブックを作成し、ソースファイルシステムのディレクトリの限定サブツリーにレポートブックを依存させる場合、完全なブックのパッケージでディレクトリサブツリー全体を圧縮し、電子メールなどで他の協力者に送信できます。ターゲットシステム上の他の絶対パスに保存されますが、サブツリールートに対して相対的にコーディングされているため、リンケージは新しい絶対パスで再び機能します。
= worksheetname()および= Indirect()関数を使用し、外部参照Excelファイルの名前を使用して親Excelファイル内のワークシートに名前を付けます。外部参照された各Excelファイルは、同じ名前の独自のフォルダーにありました。これらのサブフォルダーは、より明確にするためだけのものです。
私がしたことは次のとおりでした:-
| ----列B --------------- | ----列C ------------ |
R2)親フォルダー--------> "C:\ TEMP\Excel \"
R3)サブフォルダー名---> = worksheetname()
R5)フルパス--------------> = "'"&C2&C3& "["&C3& "。xlsx] Sheet1'!$ A $ 1"
R7)間接関数-----> = INDIRECT(C5、TRUE)
メインファイルでは、Ext-1、Ext-2、Ext-3、Ext-4、Ext-5というラベルの付いた5つのワークシートがありました。上記の数式を5つのワークシートすべてに貼り付けます。バックグラウンドでそれぞれ名前が付けられたすべてのExcelファイルを開きました。何らかの理由で結果が自動的に計算されなかったため、セルを編集して強制的に変更する必要がありました。 Volla、外部参照された各ExcelファイルのセルA1の値は、メインファイルにありました。
Sドライブなどの共有ドライブにリンクするとしますか?その場合、他の人がドライブを異なる方法でマップした可能性があります。おそらく、「公式」ドライブ名// euhkj002/forecasts/bla blaを使用する必要があります。リンク内のS //の代わりに