0

2013 年 4 月 26 日の Stephen Roy の質問に似ており、Barry Houdini が回答しています。この一般的な式ごとに名前付き範囲があります

{=IFERROR(INDEX(Range,SMALL(IF( MATCH(Range,Range,0)=ROW(INDIRECT("1:"&ROWS(Range))), MATCH(Range,Range,0)),ROW(INDIRECT("1:"&ROWS(Range))))),"")}

[明らかに 2003 年には IFERROR() を使用していません]

「範囲」自体は、名前付きの配列数式です。

数式は、範囲から一意のエントリを取得し、それらを別の「範囲」の「上部」に配置するために使用されます。ただし、INDEX() は、期待される配列ではなく、単一の値のみを「格納」しているように見えます。Barry は、別の関数で ROW() をラップして {array} を失うことについて話しました。最初の ROW() が複数の値を返し、正常に動作するように見えますが、最後の ROW() が最初の配列エントリのみに縮小されているように見えるため、INDEX() は単一の値のみを返します。ただし、これをメモリに保存しようとする代わりに、出力用にマルチセル範囲を選択し、CSE を使用すると、完全にうまく機能します。しかし、私はそれをする必要はありません。

INDIRECT() をいじってみましたが、まったく機能しません。

あなたの考えに感謝します、イアン・テイラー

4

2 に答える 2

-1

これを定義名として「Unique_List」と言って、データ検証リストとして使用できるようにしましたが、この定義名をデータ検証リストに追加するとエラーが発生します。

=LOOKUP(SMALL(IF(MATCH(x,x,0)=ROW(INDIRECT("1:"&ROWS(x))),MATCH(x,x,0)), ROW(INDIRECT("1:"&SUM(IF(FREQUENCY(MATCH(x,x,0),MATCH(x,x,0)),1))))), ROW(INDIRECT("1:"&ROWS(x))),x)

ここで、x は私の範囲です。

この数式を転置して、セミコロンで区切られた値ではなくコンマで区切られた値を取得しようとしましたが、データ検証リストが機能していないようです。

=TRANSPOSE(LOOKUP(SMALL(IF(MATCH(x,x,0)=ROW(INDIRECT("1:"&ROWS(x))),MATCH(x,x,0)), ROW(INDIRECT("1:"&SUM(IF(FREQUENCY(MATCH(x,x,0),MATCH(x,x,0)),1))))), ROW(INDIRECT("1:"&ROWS(x))),x))

親切にアドバイス。

于 2013-12-11T19:53:41.250 に答える