9

ワークブックの他の場所にある動的な名前付き範囲の一部に対応する列見出しを持つテーブルが Excel にあります。たとえば、「10」、「20」などの列見出しと、「ExampleRange10」、「ExampleRange2」などの動的な名前付き範囲があります。連結して ExampleRange10 を参照する VLookup 式を入力したいと考えています。文字列「ExampleRange」と列見出し「10」。これにより、各列の数式に「ExampleRange10」、「ExampleRange20」などを手動で入力する代わりに、テーブル内のすべての列に数式を単純に拡張できます。

私は INDIRECT 関数を認識しており、過去に名前付き範囲で正常に使用しましたが、この場合、動的名前付き範囲では機能していないようです。これは、動的な名前付き範囲が Excel によって定義される方法と関係があるニュアンスであると推測しています (数式バーの左側にある名前付き範囲のドロップダウンには表示されず、VBA にはいくつかの興味深いプロパティがあります)。 、 例えば)。INDIRECT 数式を動的な名前付き範囲と組み合わせて使用​​する方法はありますか、またはこの問題を解決する別の方法はありますか?

編集:使用されている正確な式は次のとおりです。
これが主な数式です。=VLOOKUP(B2,INDIRECT("ExampleRange"&C1),2,FALSE)ここで、C1 には「10」が含まれ、「ExampleRange10」と呼ばれる動的な名前付き範囲の数式は次のとおり=OFFSET(Sheet1!$F$2,0,0,COUNTA(Sheet1!$F$2:$F$25),2)です。メインの数式は "#REF!" を返しますが、動的な名前付き範囲の数式を削除し、単に "ExampleRange10" を静的な範囲として定義すると正しく機能します。

4

8 に答える 8

5

私は最近、この正確なレンガの壁にぶつかりました。あなたがすでに推測したように、その答えは、動的な名前付き範囲を間接的に参照できないということです。

ただし、ダイナミック レンジ式自体を INDIRECT の引数として使用することはできますが、これは目的には使用できません。非常に便利な種類の機能であるため、やや PITA です。

于 2013-02-13T18:01:10.777 に答える
2

データに 10、20 などのヘッダーがある場合、間接を使用する必要はありません。Index/Match を使用して必要なデータを選択しないのはなぜですか?

たとえば、テーブル全体に ExampleRanges という名前を付け、次の式を使用します。

Index(ExampleRanges, match(B2, index(ExampleRanges, , 1), 0), match(C1, index(ExampleRanges, 1,), 0))
于 2013-12-26T21:08:53.237 に答える
0

新しいひねりを加えると、Address 関数と Indirect 関数で名前付き範囲を使用できます。一連のテーブルに名前付き範囲を設定し、次のものを使用している場合があります。

Named Range: WWDH-FF-PI which points to Linear!$A$19 (first cell in table)

アドレスを取得するには: $T$56: =ADDRESS(MATCH(S56,Linear!A:A,0),1,1,1,"Linear")

次に、オフセット関数を複数回コピーしてピボット テーブルを作成します。

=OFFSET(INDIRECT($T$56),C5,$T$57-1)

そのため、Address 関数を Indirect 関数に埋め込む (またはラップする) ことで、動的なセル アドレスを作成できます。

于 2015-11-17T19:35:18.097 に答える
0

テストされていませんが、これでうまくいくと思います:

動的に名前が付けられた範囲のアドレスを返すユーザー定義関数:

Function Named_Range_Address(Range_Name As Range, _ 
    Optional SheetName As Boolean) As String 

    Dim strName As String 
    Application.Volatile 

    If SheetName = True Then 
        strName = "'" & Range_Name.Parent.Name & "'!" & Range_Name.Address 
    Else 
        strName = Range_Name.Address 
    End If 

    Named_Range_Address = strName 
End Function 

次に、vlookup 式を使用できるはずです。

=VLOOKUP(B2,INDIRECT(named_range_address("ExampleRange"&C1,TRUE)),2,FALSE)
于 2013-02-13T18:05:10.600 に答える
0

今日、私は Excel の名前付き範囲をいじっていましたが、呼び出し自体で範囲の名前を計算できないことは事実ですがINDIRECT()、中間ステップを追加することで純粋な「Excel の方法」で取得できることを発見しました: 名前付き範囲を計算する隠しセルを作成するだけです。

たとえばA1、範囲名の「動的部分」が含まれているとします。次にA2式を使用する= "ExampleRange" & A1と、完全な範囲名が得られ、これを として使用できます= INDIRECT(A2)

于 2015-06-12T08:37:21.680 に答える