2016-05-17 15 views
2

データ検証で2つのセルを使用しています - 最初のセル(E9)は、範囲A2:A6と2番目のセル(E10)検証に基づいてドロップダウンメニューを作成するだけですソースINDIRECT(E9)を使用します。これは、常に5つの異なる名前付き範囲のうちの1つを参照します。カスケードデータ検証用の動的名前付き範囲の使用

2番目のドロップダウンは機能しますが、実際には範囲が動的である必要があります。これまでのところ、次の「ソース」という名前の範囲を作成しています。式:

=OFFSET(LookupLists!$B$2,0,0,COUNTA(LookupLists!$B:$B),1) 

他の範囲は列CFのみで全く同じである。

この式を書き出すと、画面上の正しい領域が強調表示されますが、セルE10のドロップダウンボタンは完全に反応しません。ドロップダウンリストには、強調表示されている正確な領域が表示されます。

メモ:リスト自体は、配列式と一部のVBAコードを使用して作成され、スプレッドシートの別の部分に基づいてソートされた一意のリストを作成するため、テーブルを使用して範囲をいくつか作成することができませんでした他のウェブサイトも示唆している。

答えて

2

INDIRECTダイナミックレンジでは動作しません。解決のためのこれらの人のクレジット:

http://chandoo.org/forum/threads/passing-a-named-range-to-a-formula-with-indirect.5854/#post-32423

まず、あなたのシートにモジュールを挿入し、UDFに貼り付けます。

Option Explicit 

Function RetrieveRangeForName(psRange As String) As String 
    RetrieveRangeForName = Range(psRange).Address 
End Function 

その後、あなたは私ドン」以来、ヘルパー細胞が必要になりますデータ検証ダイアログでUDFが機能していると思う。 E11に=RetrieveRangeForName(E9)と入力します。

し、リストに設定データ検証、で、あなたが入力できます。=INDIRECT(E11)

+0

おかげで非常に多く、素晴らしい仕事を! – baelaelael

1

説明されているように動作しない理由は、hereです。間接参照は、参照を与えるために評価することができる文字列を必要とします。しかし、あなたの名前付き範囲はすでに参照です。論理的には、間接にそれを使用する唯一の方法は、あなたがUDFで行うことができます最初の文字列に変換することです: -

Function GetAddress(Name As String) As String 
Dim rng As Range, addr As String 
Set rng = Worksheets("Sheet1").Range(Name) 
addr = rng.Address 
GetAddress = addr 
End Function 

その後NewRangeと呼ばれる範囲を定義するためにこれを使用する: -

=INDIRECT(GetAddress(Sheet1!$E$9)) 

最後に、これはE10の検証で使用できます(名前付き範囲ListBは列AからEのListAなどの質問に対応して定義されています)。

enter image description here

関連する問題