0

私が正しく理解していれば、indirect() 関数を使用して、2 番目のリストに最初のリストの項目を付けて名前を付ける必要があります。たとえば、最初の列「国」に次のように書きます: 米国、カナダ、フランス、スペイン...そして、国ごとに都市のリストを含む列が 1 つ必要であり、リストは国に従って名前を付ける必要があります。リスト。

Name1、Name2、Name3 の 3 つのステップで項目指定を作成したいと思います。(Name1 に応じて Name2 など)

リスト名をリストの内容から独立させたい (各ユーザーがプロジェクトに応じてリストを作成できるようにするため)。

リストに次のような名前を付けたいと思います。

第 1 レベルのリスト: N

第 2 レベルのリスト:

N1、N2、N3、N4...

第 3 レベルのリスト:

N1.1、N1.2、N1.3

N2.1、N2.2

N3.1...

...

達成可能にしておく必要がある場合は、各リストを最大 10 または 15 項目に制限できます。

VBAなしで私を助けていただければ幸いです

よろしくお願いします

4

2 に答える 2

0

最後に、関数を使用してデータ検証でそれを行うことができました:

=offset()

indirect()
index()
match()

とリスト

Vlookup() を使用することも可能だと思いますが、ネストされた 3 つの vlookup に問題がありました。

上記の 4 つの関数を使用すると、3 つのドロップダウン動的リストを作成できます。

もっとシンプルでエレガントな方法があると確信していますが、最終的にはうまくいきました。

すべての Excel シートを作成することはできませんが、誰かに役立つ場合は関数を貼り付けることができます。

ニヴェル 1

=OFFSET(Topic1;0;0;COUNTA(Topic1);1)

ニベル 2

=OFFSET(INDIRECT(INDEX(TopicsLevel2;MATCH(C15;Topic1;0)));0;0;COUNTA(INDIRECT(INDEX(TopicsLevel2;MATCH(C15;Topic1;0))));1)

ニベル 3

=OFFSET(INDIRECT($F15);0;0;COUNTA(INDIRECT($F15));1)

F15で

=INDEX(TopicsLevel2;MATCH(C15;Topic1;0))&INDEX(Suffix;MATCH(D15;INDIRECT(INDEX(TopicsLevel2;MATCH(C15;Topic1;0)));0))

リスト nivel 3 の名前は、リスト nivel 1 とリスト nivel 2 の名前を連結したものです。

于 2014-05-28T18:02:37.157 に答える
0

次のスキームに基づいて:

ここに画像の説明を入力

これらの式の使用:

F4 -> =IF(LEFT(B4;LEN($F$3))=$F$3;B4;"")
H4 -> =OR(IFERROR(FIND(".";F4;LEN($F$3)+2)>0;FALSE);F4=$F$3)
J4 -> =IF(L4="";J3;J3+1)
K4 -> =IF(M4="";"";J4)
L4 -> =IF(H4;"";F4)
M4 -> =IF(L4<>"";C4;"")
O4 -> =IFERROR(VLOOKUP(ROW(P1);$J$4:$M$17;3;);"")
P4 -> =IFERROR(VLOOKUP(ROW(P1);$K$4:$M$17;2;);"")
Q4 -> =IFERROR(VLOOKUP(ROW(P1);$K$4:$M$17;3;);"")

列 J は結果のインデックスであり、きれいな列 K を作成するよりも明確ではありません (= 重複したインデックスなし - ただし、列 O & P - 同じ結果に示されているように必要ではありません)。
The Result - Rawこれは空白を削除しない検索方法で、Result Rebuiltは空白のない結果です...
数式は、サブデータではなく、1° グレードのフィールドのみを示します。
必要のない列を非表示にすることができます...
空白の結果では、列 F / H / L / M のみを使用できます。
明らかに、VBA ではより単純です ...

于 2014-05-27T07:14:43.080 に答える