1

この難しい公式を単純化するための素晴らしいアイデアはありますか? あなたがそれを見てもパニックにならないでください、私は説明しようとします.

=IFERROR(INDEX(rangeOfDesiredValues,(1/SUMPRODUCT((rangeOfSerials=$D20) (rangeOfApps=cfgAppID) (rangeOfAccessIDs=cfgAccessID)*ROW(rangeOfDesiredValues))^-1)),"")

現在、SUMPRODUCT を使用して、複数の列を基準として VLOOKUP と同等の処理を行っています。通常、これは数値の結果でのみ機能しますが、テキストを検索する必要があるため、SUMPRODUCT を ROW および INDEX と組み合わせて使用​​しています。

残念ながら、セルが見つからない場合、私の SUMPRODUCT は 0 を返します。これにより、数式は空白ではなく間違ったセルを返します。このため、次の計算で結果を実行しています。

(1 / result)^-1

このように、0 の結果はエラーになり、他の結果は変更されません。これを IFERROR に入力して、エラーが空白になるようにします。

これをきれいにする方法を知っている人はいますか?どのスプレッドシートでも新しい列を作成できません。

4

1 に答える 1

4

単一の値を検索する場合など、複数条件の合計関数の使用は常に避けるのが最善SUMPRODUCTです(3つの条件すべてに一致する行が複数ある場合は、明らかに誤った結果またはエラーが発生します。ほとんどここに?)。ROWワークシートに行を挿入すると、関数も問題になる可能性があります。

うまくいくいくつかのアプローチがあります。単一の数式の場合、を使用するMATCHのが最も一般的MATCHです。正しい位置またはエラーのみが表示されるため、ゼロ値で問題は発生しません。これは次のようになります。

=IFERROR(INDEX(rangeOfDesiredValues,MATCH(1,(rangeOfSerials=$D20)*(rangeOfApps=cfgAppID)*(rangeOfAccessIDs=cfgAccessID),0)),"")

これは「配列数式」で入力する必要がありますCTRL+SHIFT+ENTER......または、このような追加のINDEX関数を使用して通常の数式にすることができます

=IFERROR(INDEX(rangeOfDesiredValues,MATCH(1,INDEX((rangeOfSerials=$D20)*(rangeOfApps=cfgAppID)*(rangeOfAccessIDs=cfgAccessID),0),0)),"")

3番目の選択肢は、「配列エントリ」を必要としないLOOKUPを使用することです。

=IFERROR(LOOKUP(2,1/(rangeOfSerials=$D20)/(rangeOfApps=cfgAppID)/(rangeOfAccessIDs=cfgAccessID),rangeOfDesiredValues),"")

これは、複数の一致の場合の以前のバージョンとは少し異なります。そのシナリオでは、最初の一致ではなく最後の一致が表示されます(ただし、上記のように、一致は最大で1つだけだと思います)。

最後に、ヘルパー列を使用してもかまわない場合は、数式を大幅に簡略化できます。「ヘルパー」列を使用して、ダッシュで区切られた3つの基準列を連結すると、単純なVLOOKUPまたはINDEX/MATCHを使用できます。

=IFERROR(INDEX(rangeOfDesiredValues,MATCH($D20&"-"&cfgAppID&"-"&cfgAccessID,Helper_Column,0)),"")

于 2013-02-19T10:18:53.830 に答える