Locationsテーブルを並べ替えることが許容できると仮定すると、最も簡単な解決策は、比較的短いデータ検証式と2つの名前付き範囲のみを伴います。ヘルパーの列や行は必要ありません。
2つのサンプルワークシートを設定します。 Locations
そして Assets
、 このような:
定義名を2つ追加します。
Areas
→ =Locations!$A:$A
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
値
以下の代替解決策は、他のテーブル以外の欠点を克服する。ただし、資産ワークシートのセルを使用してドロップダウンリストの項目を格納します。
資産ワークシートに追加の列が設定されています。
今回は、 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()
)
)