2


3

ワークシートが削除および置換されたときに、ワークシートへの数式の参照を保持するにはどうすればよいですか?

私は、Excelブックを開く前に、次の例の「Sheet1」などのワークシートを削除して再作成するアプリケーションの作成者です。

同じブック内の他のワークシート(Sheet2など)には、次のように、置き換えられたワークシートを参照する数式が含まれている場合があります。

=IF('Sheet1'!A9="","",'Sheet1'!A9)

残念ながら、シートを交換すると、上記の式のSheet1への参照が壊れてしまいます。

=IF(#Ref!A9="","",#REF!A9)

誰もが失敗しないようにこの式をコーディングする方法を考えることができますか? たとえば、Sheet2の非表示のセルからワークシートの名前を取得できますか?

Excelの数式について十分に知らないので、その可能性を知ることはできません。

TIA

1 Answer


5


間接アドレス指定と名前付き範囲を使用する

1)「SheetN!」というテキストが入力されたファントムセル(つまりZ1 …​ Zn)を使用します削除するシートごとに。

2)それらのシートのすべての外部アドレス可能なセルおよび範囲の範囲名を定義します

3)式で、参照を「間接」および名前付き範囲のリテラルに置き換えます。

例:

交換する

    =Sum(Sheet1!A:A)

with

    =SUM(INDIRECT(Z1&"caca"))

ここで、「caca」はSheet1でA:Aとして定義された名前付き範囲であり、Z1には「Sheet1!」が含まれます。

もう一つの例:

交換する

    =Sheet1!A1+Sheet1!A2

with

    =INDIRECT(Z1&"NamedRangeForA1")+INDIRECT(Z1&"NamedRangeForA2")

これで、参照の問題なくSheet1を削除できます。

新しいSheet1を追加するときに、名前付き範囲を(VBAで)再作成する必要があります。

編集:名前に空白があるスプレッドシートに関するコメントに回答する

この場合、余分なfuが必要です:)

これを使って:

 =INDIRECT("_'_" & Z1& "_'_!_" & "caca")

「_」は削除する必要があります。一重引用符と二重引用符を簡単に視覚化できるように挿入したためです。

セルZ1に、引用符と感嘆符なしでSheet1の名前を入力します(既に数式にあるため)。

HTH!