web-dev-qa-db-ja.com

インデックスを作成する方法-指定したセルから空白以外まで上向きに一致させる

ディレクトリツリーレイアウトのようなデータがあります(写真を参照)

基本的に、1つのルックアップコードを参照ポイントとして使用し、Excelにそれぞれの列を上向きに見て「親ディレクトリ」を表示させたいと思います。

現在、どのコードが何であるかを正確に示すインデックスがありますが、すべてのレベルを一度に表示するルックアップツール(下の画像の下の表を参照)をセットアップしたいと思います。写真では、数式を使用して返したい値を入力しました。

したがって、レベル4のコードを入力する場合は、レベル4、3、2、および1のプログラムを返す数式を使用します。レベル3のコードの場合、レベル3、2、および1のプログラムを返すようにルックアップする必要があります。

10,000行以上のデータがあります。

enter image description here

私にはとても単純に思えます....この行から始めて、値に達するまでこの列を上向きに見てください.....しかし、それはそれほど単純ではないようです。

ヘルプ/ヒントは大歓迎です!

-アレックス

4
Alex

お気づきのように、Excelは「上向き」をネイティブにサポートしていません。 index()vlookup()のような関数は、firstの一致を見つけるのに最適ですが、lastは見つかりません。

データがセルA1:F10にあるとすると、この数式は、セルH2に入力されたコード(列D)から始めて、列Aの最後の空白でないセルを検索します。右(他の列を検索するため)および下(より多くのコードを検索するため)に自動入力できます。これは配列数式であり、ctrl + shift + enterで確認する必要があります。

_=INDEX(A$2:A$10,MAX(IF(NOT(ISBLANK(OFFSET(A$2,,,MATCH($H2,$D$2:$D$10,0)))),ROW(OFFSET(A$2,,,MATCH($H2,$D$2:$D$10,0))),""))-1)
_

OFFSET(A$2,,,MATCH($H2,$D$2:$D$10,0))は、ルックアップ配列のサイズを動的に設定して、A2で開始し、目的のコードが見つかった行で終了するようにするために使用されます。したがって、コードがD5にある場合、この部分は_A2:A5_を返します。

MAX(IF(NOT(ISBLANK(...)),ROW(...),""))これは、以前に見つけた範囲内で最も高い非空白セルの行番号を返します。

INDEX(A$2:A$10,...-1)そして最後に、index()は見つけたセルの実際の値を見つけます。ルックアップ範囲は行2から始まるため、1を減算しますが、使用している行数は明らかに1から始まります。

3
Kyle