2011年4月5日火曜日

Excel 0でないものの最大値を求める

裏表(Phinloda のもう裏だか表だか分からないページ) の もう一つ Excel なのだが… にて

AA10からAA19までのセルとAD10からAD19までのセルの合計20個の中の、 0でないものの最大値を求める式
をどうするかと悩んでおられるのを見た。

解決方法と思えるものを考えたのだが 、なんとなく腰が引けてコメントに書き込めないのでここに書く。
ユーザー定義函数を作る、というのはもちろん解決方法だが、せっかくなのでワークシート函数のみ、かつ補助のセルを使用しないで。

IF(MAX(AA10:AA19,AD10:AD19)<>0,MAX(AA10:AA19,AD10:AD19),IFERROR(SMALL((AA10:AA19,AD10:AD19),RANK.EQ(0,(AA10:AA19,AD10:AD19),1)-1),0))

あるいは、全く同じだが、セル範囲(AA10:AA19,AD10:AD19)に名前(RANGE1)を付けて

IF(MAX(RANGE1)<>0,MAX(RANGE1),IFERROR(SMALL(RANGE1,RANK.EQ(0,RANGE1,1)-1),0))

IF文の後半をIFERRORで囲ったのは、対象範囲数値が0しか入っていない場合および何も数値が入っていない場合の処理の為である。
COUNTIFではなくRANK.EQを使ったのは、COUNTIFは単連結でない範囲に対しては機能しなかったからである。RANK.EQ函数が導入される以前のExcelの場合、RANK函数で問題ない。

0 件のコメント:

コメントを投稿