Excel 2013 - データ検証 - 2番目の条件に一致する場合は値を含むドロップダウンリストを作成します


0

私はできるだけ自分の問題を単純化するつもりです。私はExcelで2枚のシートを手に入れた。最初のシートで私は場所のリストを作成しています。次の列(C)には自動的に作成されるIDがあるはずです(最初の場所はID-001、 2番目はID 002などを取得します。

2番目のシートでは、資産のリストを作成しています。したがって、ここでもまた、列Aで領域を選択し、列Bに資産の名前を入力します。 今度は、C欄にドロップダウン・リストを表示し、そこには、面積が同じである最初の表のIDだけを表示します。 OFFSET関数を使用しようとしましたが、欠けているのは、IDのリストを同じ領域を持つものに制限するためのある種の「select if」(countifやsumifなど)です。

各エリアには多くの場所とアセットがありますが、すべての場所とすべてのアセットは1つの場所にしかマップできません。

あなたの答えを楽しみにしています。優れたソリューションかvbaソリューションのどちらかが素晴らしいでしょう。

回答:


0

VLOOKUPで使用するための一意の値を含むヘルパー列を作成することをお勧めします。例えば; Area1、Area2、Area3、Area1があるとしましょう。この値を増分値(例:01、02、03、...)とマージし、01Area1、01Area2、01Area3、 02エリア1 。 これで、2番目のシートの各リスト項目に何を呼び出すべきかがわかりました。 選択した場合 エリア1 A列では、あなたは検索が必要です 増分番号 & エリア1 。 値による増分番号は、次の方法で作成できます。 COUNTIF 拡大範囲を使用する関数:

=COUNTIF($A$2:A2,A2)

範囲を拡大すると、式はそれ自体の行までの値のみをカウントします。 あなたが必要とするこのメソッドの唯一のハンディキャップ 他の場所で

ここでは、似たような使い方を説明する2つのリンクがあります。

  1. https://www.spreadsheetweb.com/how-to-get-nth-match-with-vlookup/
  2. https://www.spreadsheetweb.com/pricing-list-quoting-tool-part-1/

0

Locationsテーブルを並べ替えることが許容できると仮定すると、最も簡単な解決策は、比較的短いデータ検証式と2つの名前付き範囲のみを伴います。ヘルパーの列や行は必要ありません。

2つのサンプルワークシートを設定します。 Locations そして Assets、 このような:

Screenshot of Locations worksheet Screenshot of Assets worksheet

定義名を2つ追加します。

  1. Areas=Locations!$A:$A
  2. IDs=Locations!$C:$C

最後に、セル内ドロップダウンリストのデータ検証をに追加します。 C2 の中に Assets 次の式でワークシートを作成し、セルを下方向に塗りつぶします。

=INDEX(IDs,MATCH(A2,Areas,0)):INDEX(IDs,MATCH(A2,Areas,0)+COUNTIF(Areas,A2)-1)

この方法の欠点は次のとおりです。

  • 定義名を使用する必要があります
  • Locationsテーブルはソートする必要があります
  • [場所]シートの他のテーブルは、安全に交差することはできません。 Area Locationテーブルの値と一致する値が含まれないことが保証されている場合を除き、列 Area


以下の代替解決策は、他のテーブル以外の欠点を克服する。ただし、資産ワークシートのセルを使用してドロップダウンリストの項目を格納します。

資産ワークシートに追加の列が設定されています。

Screenshot of Assets worksheet

今回は、 C2 データ検証式は次のとおりです。

=IF(SUMPRODUCT(--ISNA(C2:INDEX(2:2,COLUMN(C2)-1+COUNTA(C2:INDEX(2:2,COLUMNS(2:2))))))=0,$I$1,C2:INDEX(2:2,COLUMN(C2)-1+COUNTA(C2:INDEX(2:2,COLUMNS(2:2)))-SUMPRODUCT(--ISNA(C2:INDEX(2:2,COLUMN(C2)-1+COUNTA(C2:INDEX(2:2,COLUMNS(2:2))))))))

この式を D2 そして記入してください:

=
IF(
  SUMPRODUCT(
    --ISNA(
      E2:INDEX(
        (2:2),
        COLUMN(E2)-1+MAX(1,COUNTA(E2:INDEX(2:2,COLUMNS(2:2))))
      )
    )
  )=0,
  "ERROR",
  "ok"
)

マルチセル配列 - この最後の式をから始まるセルに入力します。 E2 そして、エリア内の予想されるロケーションの最大数と同じくらい遠くまで進んでいます E2:I2 ):

=
INDEX(
  Locations!$C:$C,
  IFERROR(
    SMALL(
      IFERROR(1/(1/(
        (Locations!$A$2:INDEX(Locations!$A:$A,COUNTA(Locations!$A:$A))=IF($A2="",NA(),$A2))
        *ROW($A$2:INDEX($A:$A,COUNTA(Locations!$A:$A)))
      )),FALSE ),
      COLUMN(INDEX(2:2,1):INDEX(2:2,MAX(2,COUNTIF(Locations!$A$2:INDEX(Locations!$A:$A,COUNTA(Locations!$A:$A)),$A2))))
    ),
    NA()
  )
)

眠りについたあとのメモと説明;-)
robinCTS

まず第一に、あなたの素晴らしい仕事のためにどうもありがとうございました!私は実際にはインデックスの一致についても同じ考えを持っていましたが、問題は、リストに入力するのではなく他の多くの人がいるのでリストをソートできないことです。また、ヘルパー列を含む代替手段は、実際にはたくさんの場所があるため、実装が困難です。ところで:私はあなたの最初のインデックスマッチの公式を使ってこのエラーを得ています。
Moritz

@Moritz Locationsシートから移動するとすぐに自動的にリストをソートするためにVBAにイベントハンドラを追加するのはとても簡単なはずです。これでよければ、私は自分の答えにコードを追加します。ええ、私はヘルパーコラムが問題になるかもしれないと考えました。これが私がソーティングソリューションを追加した理由です。そのエラーは、 らしい について文句を言うこと :しかし、それは意味をなさない。データ検証 する のエラーを吐き出す傾向がある たくさん 理由の;-)。 Excel 2007とデータ検証を使用しています 持っている 次のバージョンでは変更されましたが、その式には影響がないはずです。 …
robinCTS

…使用しているバージョンは?また、新しいワークブックを作成して、私の例とまったく同じように設定しましたか。その新しいワークブックでは、データ検証式について試してみてください =A2:A8 ただ 場合には;-))、[場所]テーブルを[資産]シートにコピーし、定義されている名前を2つの列を指すように変更します。最後に、最後のテストの後、式を定義する名前を変更して列を直接使用してみます。 Excel 2010+をお持ちの場合は、[場所]シートの列も直接使用してみてください。これは本当に不可解です。
robinCTS
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.