21

価格を計算するためのシートを作成しています。シートには、さまざまなコンポーネントの価格を取得するために、他のいくつかのワークブックへの参照が必要です。これは私のコンピューターでは正常に機能しますが、サーバーまたは別のコンピューターに移動すると、参照が見つかりません。

私のフォルダは次のように構成されています。

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を使用したくありません。

4

7 に答える 7

9

外部ファイルをサブフォルダーに整理するために私が見た唯一の解決策では、VBA を使用して数式内の外部ファイルへのフル パスを解決する必要がありました。他の人が使用したいくつかの例を含むサイトへのリンクを次に示します。

http://www.teachexcel.com/excel-help/excel-how-to.php?i=415651

または、すべてのファイルをサブフォルダーに分割するのではなく、同じフォルダーに配置できる場合は、ファイルをネットワーク上の場所に移動しても、VBA を使用しなくても Excel によって外部参照が解決されます。数式は、='[ComponentsC.xlsx]Sheet1'!A1トラバースするフォルダー名がない単純なものになります。

于 2012-07-24T12:56:03.760 に答える
7

次のシーケンスを使用して解決した同様の問題がありました。

  1. 関数を使用してCELL("filename")、現在のファイルの現在のシートへのフル パスを取得します。

  2. 関数を使用してSEARCH()、現在の Excel ファイルとシートの [FileName]SheetName 文字列の先頭を見つけます。

  3. 関数を使用しLEFTて、現在のファイルを含むディレクトリのフル パス名を抽出します。

  4. 手順 3 で見つけたディレクトリ パス名を、アクセスするファイルの名前、ワークシートの名前、およびセル参照と連結します。

  5. 関数を使用して、手順 4 で作成したINDIRECT()にアクセスします。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")
于 2014-01-25T22:05:44.650 に答える
1

Sドライブなどの共有ドライブにリンクしていると思いますか? その場合、他の人が別の方法でドライブをマップした可能性があります。おそらく「公式」のドライブ名 //euhkj002/forecasts/bla bla を使用する必要があります。リンクの S// の代わりに

于 2015-10-14T14:50:08.723 に答える
1

=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 の値はメイン ファイルにありました。

于 2013-04-23T16:54:29.327 に答える