• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelのSMALL関数について)

ExcelのSMALL関数とは?

このQ&Aのポイント
  • ExcelのSMALL関数は、指定した範囲内でn番目に小さい値を返す関数です。
  • SMALL関数は複数の値からn番目に小さい値を取得する場合に便利です。
  • 上記の関数式では、フラグ「0」が入力されている行番号の中でn番目に小さい行番号を取得しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

計算の背景については,例えば下記などを参考に勉強してみてください。 http://pc.nikkeibp.co.jp/pc21/special/hr/ >部分↓↓の意味がよくわかりません。 B$2:B$50<>0 の部分は,B2からB50まで49個のセルについて一つずつ<>0(ゼロではないか)という論理計算を行い,結果して49個の「TRUE(ゼロではなかった)」と「FALSE(ゼロだった)」の『配列』を得ます。 (B$2:B$50<>0)*10^5 の部分は,上述で得たTRUEとFALSEの配列について一つずつ10^5とのかけ算を行い,結果して49個の10^5またはゼロの配列を得ます。 この計算が出来る背景には,エクセルの一般知識として ○TRUEの値は数字と計算されると1として計算される ○FALSEの値は数字と計算されると0として計算される についても知っておかなければなりません。 (B$2:B$50<>0)*10^5+ROW(B$2:B$50) の部分は,上述で得た100000とゼロの配列について一つずつROW(B2),ROW(B3)…ROW(B50)との足し算を行います。 この計算をする背景には,エクセルの一般知識として ○ROW関数は行番号の数字を計算する についても知っておかなければなりません。 結果して,一つ前の結果がTRUEだった(ゼロではなかった)行に対応する要素では 100000+その行の行番号(たとえば2)=100002 FALSEだった(ゼロだった)行に対応する要素では 0+その行の行番号(たとえば3)=3 といった数字が並んだ配列が得られます INDEX((B$2:B$50<>0)*10^5+ROW(B$2:B$50),) の部分は,以上のような計算を配列計算としてエクセルに実施させるためのテクニックの一つです。 最後の「,)」の部分にもINDEX関数の機能に応じた働きを持たせてあることを見落とさないように注意してください。 最後に SMALL(INDEX(…,),ROW(A1)) によって,さっき求めた「100001,10002,3,4,10005…」といった配列から,小さい順に(当然10000もかさ上げすればずっと大きいですから,結果して最初に出てきた小さい数字を)求める行番号を得ます。

その他の回答 (1)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

SMALL(INDEX((B$2:B$50<>0)*10^5+ROW(B$2:B$50),),ROW(A1)) ↓ SMALL(範囲,順位) ↓ B2:B50を0以外でTRUE(1)、FALSE(0)に判定、この値を100000倍(100程度十分)して該当行番号を加算した結果をINDEX関数で配列、 仮にB2以下が0、1、0ならば2(FALSE*100000+2)、100003(TRUE*100000+3)、4(FALSE*100000+4)となり、SMALL関数でこの範囲から小さい順に値を0の個数分抽出する事になります。 順位は、ROW(A1)はオートフィルする事で1からの昇順値となります。