2

私は、Excel ワークブックを開く前に、いくつかのワークシートを削除して再作成するアプリケーションの作成者です。たとえば、次の例の "Sheet1" です。

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

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

残念ながら、シートが置き換えられると、上記の数式のシート 1 への参照が壊れて、次のようになります。

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

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

可能性が何であるかを知るには、Excelの数式について十分に知りません。

ティア

4

1 に答える 1

6

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

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

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

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

例:

交換

    =Sum(Sheet1!A:A)   

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

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

もう一つの例:

交換

    =Sheet1!A1+Sheet1!A2

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

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

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

編集:名前に空白があるシートに関するコメントへの回答

この場合、extra-fu が必要です :)

これを使って:

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

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

セル Z1 に、シート 1 の名前を引用符も感嘆符も付けずに入力します (既に数式に含まれているため)。

チッ!

于 2010-11-01T17:38:21.043 に答える