- ベストアンサー
Excel2021 LETとRANKのエラー
Excel2021でLET関数が使えるようになり、非常に便利を感じていたのですが、つまづく事例が出てきました。 A1に「=SEQUENCE(6)」と入力し,B1に「=LET(x,A1#,RANK(x,x))」 と入力すると正しく出力します。(結果はB1から下に順に{6,5,4,3,2,1}) ところが、C1に「=LET(x,SEQUENCE(6),RANK(x,x))」と入れても結果はC1から下にエラー値「#VALUE!」が6つ並び、正しく出力されません。 B列と同じ結果を期待したのですが、何が原因でしょうか? なお、念のためですが、この例は実務で出てきたエラーの事例を単純化するために作った例なので、1,2,…,6に対して6,5,…1が欲しいなら他の方法があるとか、そういうことではありません…
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>A1#は数値の配列とはみなされてないのでしょうか? A1#は数値の配列になります。 このような時は、【数式 ⇒ 数式の検証】で式がどのように展開されるか確認できます。 今試して気付きましたが、「RANK(A1#,A1#)」が「RANK({1;2;3;4;5;6},$A$1:$A$6)」に変換されますね。 Excelが都合のいいように、配列と参照を使い分けて読み取っているということでしょうね。 >また、何かエラーを回避する方法はないでしょうか? 単に「エラーの回避」だとあいまいな表現なので、 =IFERROR(LET(x,SEQUENCE(6),RANK(x,x)),"") で回避できますよ と、なります。 「エラーにならずに=LET(x,A1#,RANK(x,x))と同じ結果を得たい」のであれば、「回避不可」でしょうか。
その他の回答 (4)
- chie65536(@chie65535)
- ベストアンサー率44% (8742/19841)
>何が原因でしょうか? RANK関数の2つ目の引数は「セル参照」でなければなりません。 例えば「A1:A6」とか「A1#」とか、です。 関数の戻り値や定数配列は指定できません。
お礼
- heisukewada
- ベストアンサー率57% (93/162)
xは、値を割り当てることができる変数で、配列を割り当てることはできません。 スピルは、数式を入力したセルだけではなく隣接するセルにも結果を表示させることができる ということを利用しているのであれば、 A1# が、式の中に含まれなければ、C1に数式を書く意味もなくなってしまいます。D100であっても、Sheet2であっても、別のブックであっても構わないということになります。 xの参照する値がないから、エラーになるのだと思います。
補足
レスポンスが遅れて大変申し訳ありません。 ご回答の内容の解釈が間違っていたら大変恐縮ですが、xに配列を割り当てるのはできていると思います。実際B1では目的の配列が返されています。C列に数式を書く意味は、ここではA列・B列で行っていることとの比較の意味で、本来C列のように1列だけで表現したいのですができず、A列・B列のように2列で表現するとできるのはなぜなのかという質問です。
- heisukewada
- ベストアンサー率57% (93/162)
=LET(x,SEQUENCE(6),RANK(x,x)) この式は、どこも参照していない。
補足
はい、参照していません。 A列・B列の2列で実現していることを、C列の1列で再現しようとしています。数式の組み方が同じはずなのに、エラーが出てしまうのはなぜなのか、という質問です。
- luka3
- ベストアンサー率72% (424/584)
× =RANK(SEQUENCE(6),SEQUENCE(6)) ○ =RANK(SEQUENCE(6),A1#) × =RANK(A1#,SEQUENCE(6)) 第2引数にSEQUENCE関数が使えないようです。 明確な回答が書いてあるページは見つけられませんでしたが、RANK関数の第2引数は、数値が含まれるセルの範囲への参照を期待している、ということのようです。 MSのRANK関数の解説には「(第2引数は)数値の範囲の配列またはその範囲への参照を指定します」とありますが、実際には数値の配列は使えないみたいです。 × =RANK(A1#,{1,2,3,4,5,6})
お礼
補足
A1#は数値の配列とはみなされてないのでしょうか? また、何かエラーを回避する方法はないでしょうか?
お礼
補足
やはりエラーを回避して同じ結果を得ることはできないのですね。 引数にセルの範囲が指定できて、配列が指定できないケースがあるとは… 今後RANK以外の関数を使って再構築することを考えてみます。