6

データ検証用に 2 つの動的ドロップダウン リストが必要です。選択する大陸の一意のリストを含む 1 つと、選択した大陸に基づいて動的に生成された国のサブセットである 2 つ目のリスト。データは特定の順序ではありません。

     AB
---+--------------------
1 | 大陸の国
2 | アフリカ アルジェリア
3 | アジア 中国
4 | アフリカ エチオピア
5 | ヨーロッパ フランス
6 | ヨーロッパ ドイツ
7 | アジア インド
8 | ヨーロッパ イタリア
9 | アジア 日本
10 | ヨーロッパ ポーランド
11 | アフリカ 南アフリカ
12 | ヨーロッパ スペイン

非表示の列を使用して大陸の一意のリストを生成し、それらを名前付き範囲として関連付けることで、最初のドロップダウン リストを正常に作成しました。その部分は完了しましたが、

最初のリストで選択された大陸の関連付けに基づいて、動的に生成され、フィルター処理された 2 つ目のリストを作成するにはどうすればよいですか (リストにギャップがないことが望ましい)。

私が消化している実際のデータは数千のデータ ポイントであり、パフォーマンスが懸念されるため、可能であれば VBA を使用したくないと考えています。

編集:もう少し検索すると、役立つリンクが見つかりました。これにより、次の式が提供されました: IFERROR(INDEX($A$2:$A$100,SMALL(IF($B$2:$B$100="Yes", ROW($A$2:$A$100)-ROW($A$2)+1),ROWS($A$2:$A2))),"")

より近いですが、動的ドロップダウンリストが必要な行ごとにワークシートの別の列にこれらを配置する必要があるため、機能しません。さらに、フィルター処理されたリストの大きさがわからない.

名前付き範囲内で直接これを行う方法はありますか?

4

5 に答える 5

3

大陸の昇順でリストを並べ替えると、次の式を使用して、ヘルパー セルを使用せずにダイナミック レンジ名を作成できます。

=INDEX(Sheet1!$B:$B,MATCH(Sheet1!$E$2,Sheet1!$A:$A,0)):INDEX(Sheet1!$B:$B,MATCH(Sheet1!$E$2,Sheet1!$A:$A,1))

ここで、セル E2 には選択された大陸があります。これは、同じシナリオのスクリーンショットです。Category を Continent に置き換え、SubCategory を Country に置き換えます。

ここに画像の説明を入力

于 2014-01-01T02:01:48.893 に答える
2

一連の名前付き範囲 (例では、B:G の占有部分) を適用する準備ができている場合は、Allow: List および Source: を使用したデータ検証=INDIRECT(INDEX($1:$1,MATCH(I2,A$1:A$7,0)))が列 J のエントリに適している可能性があります。

SO20850122 の例

説明の試み:

一般に、数式は内側から外側に理解する方が簡単なので、まず、I2 に入力され=MATCHた正確な (つまり ) 値の A1:A7 リスト内の位置を見つけようとします。,0のためにS.AMERICA- 良い選択です!:-) - それはたまたま最後 (7 日) です。次に、この結果がパラメーターとしてパーツに供給され、=INDEXどの列番号が関連する列番号であるかを判断します (国による検証の場合)。Excel の場合、ColumnG は 7 番目です。

複数の行/列を持つ配列を気にしないことで、数式を完全に慣習的に使用したわけではありません。これは、検証リストとルックアップ リストが水平方向よりも垂直方向に配置されることが多いという慣例のためです (たとえば、VLOOKUP はより頻繁に適用されます)。これは、行よりも列のラベルを表示することに慣れているためです。これは、スプレッドシートが一般に幅よりも長いことが許可されているのと同じ理由です (例: 16,384 列で 1,048,576 行)。 )、一部は私の回答の画像アスペクト比のためです。

代替のレイアウトは、実際には少し不便かもしれませんが (名前付き範囲の設定など)、私の説明の試みには役立つかもしれません:

下の左の画像:国データを vlookup の従来のレイアウトに置き換えます (そして、行を削除するContinentsこともできます)。検証式は次のようになります。

=INDIRECT(INDEX(A$1:A$6,MATCH(A8,A$1:A$6,0)))  

(そのセルは他のデータに必要になったため、「トリガーセル」I2などを移動する必要がありました-代わりにA8などを選択しました)。

下の右の画像:左の画像のように「トリガー セル」を残し、また を廃止するとContinents、検証式は次のようになります。

=INDIRECT(INDEX(C$1:H$1,MATCH(A8,C$1:H$1,0)))

SO20850122 2 番目の例

于 2013-12-31T22:45:22.653 に答える
0

Ok。次に、動的な 2 番目のリストの作成から始めて、フィールドと列をいくつか追加して、次のように簡単に進めることができます。

E1では、選択した大陸から始めました。これは、最初のドロップダウンを参照する必要があります。または、E1 を次の式で置き換えることができます。

C2では、数式=IF(A2=$E$1;MAX($C$1:C1)+1;"")を使用して補助列を開始し、それを国リストの最後までドラッグします。

必須ではありませんが、この大陸の国の数をどこかに保持するため=MAX(C:C)E2を入れると理解しやすくなります。

D8から、おそらく D50 までいくつかの数字 (1、2、...) を書き始め、次にE8=IF(D6<=$E$2;INDEX(B:B;MATCH(D6;C:C;0));"")に書き込んでE50 までドラッグします。

最後に、F8 から F50 までの範囲は「countryDropdown」という名前=INDIRECT("countryDropdown")で、データ検証で使用できます。

     A          B              C     D          E
---+------------------------------------------------------------
1  | Continent  Country              Selected   Africa    
2  | Africa     Algeria        1     Max Number 3
3  | Asia       China         
4  | Africa     Ethiopia       2     
5  | Europe     France               
6  | Europe     Germany              
7  | Asia       India                
8  | Europe     Italy                1          Algeria
9  | Asia       Japan                2          Ethiopia
10 | Europe     Poland               3          South Africa
11 | Africa     South Africa   3     4
12 | Europe     Spain                5
于 2013-12-31T04:58:17.650 に答える
0

これに対する私のアプローチを確認してください:

  1. データをソートする必要はありません
  2. 多対多の関係をサポート
  3. VBA なし
  4. 名前付き範囲なし
  5. ユニークなアイテム名や金額を事前に知る必要はありません

新しいタブで画像を開いて、よりよく見る:

Sheet1 (データシート): ここに画像の説明を入力
式として: ここに画像の説明を入力

Sheet2 (ヘルパー シート): ここに画像の説明を入力
式として:
ここに画像の説明を入力

Sheet3 (結果シート): ここに画像の説明を入力

于 2015-05-16T15:26:24.007 に答える