0

MATCH() 関数を使用するスプレッドシートの数式に問題があります。

=IFERROR(IF(LENB(Y2461)<> 0, "Complete", IF(LENB(Q2461)<> 0, IF(Q2461-$Y$1<MATCH($Y$1,R2461:X2461),"ON HOLD"), INDEX($R$4:$X$5,1,MATCH($Y$1,R2461:X2461)))),"ON HOLD")

これは、特定の問題を含むセル内の数式です。「完了」列に日付があり、「保留中」列に日付がある場合を除いて、一致を使用してデータの水平方向の範囲を調べ、最新の変更が含まれている列を特定しています。セル Y1 には が含まれ=TODAY()ているため、各セルを今日の日付と照合します。セルは日付にフォーマットされ、左から右に日付として入力されます。ただし、エントリは以前の列から再び開始され、日付が順不同のままになる可能性があります。

問題は、一度に数回しか発生しMATCH()ない場合に、最新ではない列が返されることです。私が信じるようになった限り、そしてこの数式の他のインスタンスでどのように機能するかは、配列を右から左に読み取り、最初の「最高」の日付で停止することです。

エラーは具体的には 1 つの行で発生していますが、期待される結果はシートの他の場所で複数回機能します。

MATCH()毎回特定の方向に読むと仮定して、間違った使い方をしていますか? コードに別のエラーがありますか? または、プログラムした結果を得る別の方法はありますか?

4

2 に答える 2

5

使用している 3 番目の引数のない MATCH は、3 番目の引数として 1 または TRUE を指定した MATCH と同じです。つまり、使用される範囲 (R2461:X2461) が常に昇順である場合にのみ、正常に機能することを保証できます。 ...しかし、あなたはそうではないと言っているので、式が機能することを保証できるとは思いません

代わりにこのバージョンを使用してみてください[コメントに従って改訂]

=IFERROR(IF(LENB(Y2461)<> 0, "Complete", IF(LENB(Q2461)<> 0, IF(Q2461-$Y$1< MATCH(MAX(IF(R2461:X2461<=$Y$1,R2461:X2461)),R2461:X2461,0),"ON HOLD"), INDEX($R$4:$X$5,1,MATCH(MAX(IF(R2461:X2461<=$Y$1,R2461:X2461)),R2461:X2461,0)))),"ON HOLD")

CTRL+ SHIFT+で確認ENTER

変更のロジックは、この改訂された MATCH 部分

=MATCH(MAX(IF(R2461:X2461<=$Y$1,R2461:X2461)),R2461:X2461,0)

この部分と同じことをします

=MATCH($Y$1,R2461:X2461)

R2461:X2461 が昇順かどうか - Y1 以下の最大値を見つけ、最初のインスタンスの位置を示します。

改訂

最大の日付 <= 今日が重複している最も右側の日付が必要な場合は、MATCH の代わりにこの構造を使用できます。

=MAX(IF(R2461:X2461<=$Y$1,COLUMN(R2461:X2461)-COLUMN(R2461)+1))

これにより、完全な式は次のようになります。

=IFERROR(IF(LENB(Y2461)<> 0, "Complete", IF(LENB(Q2461)<> 0, IF(Q2461-$Y$1< MAX(IF(R2461:X2461<=$Y$1,COLUMN(R2461:X2461)-COLUMN(R2461)+1)),"ON HOLD"), INDEX($R$4:$X$5,1,MAX(IF(R2461:X2461<=$Y$1,COLUMN(R2461:X2461)-COLUMN(R2461)+1))))),"ON HOLD")

于 2013-10-10T21:12:46.257 に答える
1

構文から [match_type] を省略するMATCH(lookup_value, lookup_array, [match_type])と、lookup_array がソートされていない場合に予期しない結果が生じる可能性があります。

http://office.microsoft.com/en-gb/excel-help/match-function-HP010062414.aspx

于 2013-10-10T21:09:26.070 に答える