0

Excel 2010 に 2 列の大きなテーブルがあります。列 A はユーザー、列 B はユーザーを招待した人です。ユーザー名は英数字で、数字だけのものもあります。最も初期のユーザーには招待者がいません。

User | Parent
-------------
AAA  |
BBB  |
CCC  | AAA
DDD  | BBB
EEE  | DDD
FFF  | DDD
GGG  | FFF
HHH  |
III  | GGG

私がやりたいのは、祖父母(および曽祖父母以降)に移動できる式を用意することです。そのため、必要に応じて相対列と絶対列を混合して使用する式ベースのソリューションを見つけようとしています。 .

上記のチェーンは最大で 4 つになりますが、データ セットの深さは最大で 20 レベルを超えないと考える理由があります。これに到達する式または式の組み合わせを見つけたいと思います(そして、私が言ったように、それを超えて):

USER | PARENT | P2  | P3  | P4  | ...
AAA  |        |
BBB  |        |
CCC  | AAA    |
DDD  | BBB    |
EEE  | DDD    | BBB |
FFF  | DDD    | BBB |
GGG  | FFF    | DDD | BBB
HHH  |
III  | GGG    | FFF | DDD | BBB
...

ユーザーID番号のキー行の有無にかかわらず、VLOOKUP、MATCH、およびINDEXコマンドを組み合わせたさまざまな方法を試しました(数値列のないソリューションのいくつかは、「0」が有効なユーザー名であるという事実に直面したときに失敗したためです) 、エラー トラップがより困難になります)。かなり確実に P2 に到達できますが、故障せずに P3 に到達することはできないようです。ちなみに、私が試した数式は、データが 400,000 行近くになるため、非常に CPU を集中的に使用しますが、計算時間はあまり気にしません。ブルート フォース メソッドが機能しません。スタックオーバーフローには似たような質問がいくつかありますが、それらはわずかに異なるものを求めており、私はそれらのどれも適応できませんでした.

これが標準関数を介して実行できる場合、来年この問題を再検討する必要があるときにそれを維持する能力が向上するため、計算時間が長くても、VBA (私はよく知らない) よりも望ましいでしょう。 .

4

2 に答える 2

1

次の式を試してください:を絶対参照列ペア (例: ) または適切な名前付き範囲=IFERROR(VLOOKUP(C5,UserParent,2,FALSE) & "","")に置き換えます。それをコピーして、祖父母の列全体にコピーします。UserParent$B$5:$C$30

これはあなたが以前に試したアプローチだと思いますが、出力にゼロがたくさん含まれてしまいます。この数式の興味深い点は& "". これにより、親列の空のセルは、機能するときにゼロ値のセルではなく、空の文字列として扱われますVLOOKUP。これにより、出力を覆い隠すすべてのゼロが削除されます。

ランダムな英数字の束で動作させることができましたが、サンプル データがなければ、これが最善の方法です。

于 2013-11-13T22:08:07.600 に答える