• ベストアンサー

エクセル 最小値を求める関数について

複数シートの集計で串刺し集計を使っています。 最大値は =MAX('1:31'!G57) で求められるのですが、0以上の最小値を求める関数(SMALL,またはMIN)を使ってもうまくいきません。 0以上の最小値を求める関数を教えてください。よろしくお願いします。

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

  • ベストアンサー
  • maron--5
  • ベストアンサー率36% (321/877)
回答No.2

◆こんな方法はいかがでしょう =SMALL('1:31'!G57,SUMPRODUCT(COUNTIF(INDIRECT(ROW(1:31)&"!G57"),"<=0"))+1)

jyunmai
質問者

お礼

最小値を求めることが出来ました。 エクセル勉強していきたいと思います。 ありがとうございました。

その他の回答 (5)

  • banzaiA
  • ベストアンサー率16% (100/595)
回答No.6

次の解釈でよろしいですか? 例えば 10、50,0,150、200 のような数値があって、 >0以上の最小値を求める というのは、 10 を返したい(0は無視する)。 それなら単純にminと smallを組み合わせて =IF(MIN('1:31'!G57)=0,SMALL('1:31'!G57,2),MIN('1:31'!G57)) ではダメですか?

jyunmai
質問者

お礼

回答ありがとうございます。 教えていただいた関数では最小値が表示されませんでした。 セルの設定がおかしかったのでしょうか・・・。 私にも理解できる関数で是非使いたかったのですが・・。 まだまだエクセル初心者なのでまたお世話にあるかもしれません。その時もよろしくお願いします。

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.5

=LARGE('1:31'!G57,SUMPRODUCT(COUNTIF(INDIRECT(ROW(1:31)&"!G57"),">=0"))) #2さんと考える方向はほぼ一緒です。 つまり、指定範囲から「0以上」のセルを数え(n)、 同範囲の「n番目に大きい」値を引っ張ってくる、と言うものです。 ただしCOUNTIF関数は基本的に「串刺し計算」が出来ない関数の一つですから、 SUMPRODUCTという配列関数を使っています。 まぁ、ややこしいのは間違いないですね。 #1さんがおっしゃる通り、 難しくてメンテナンス出来ない式を使うのは個人的にはオススメしません。 業務でお使いなら、引き継ぎ等を考えても 「他人には通じそうにない冗長な式」は避けておいた方が無難です。 今回のケースも、別の位置に転記するなりして、 そこを基にMIN関数で集計してやるのが単純でわかりやすいですね。 例えば適当なシートの任意のセルに   式(A1):=IF(INDIRECT(ROW(A1)&"!G57"))<0,"",INDIRECT(ROW(A1)&"!G57")))     ※以下、31行分フィル(A1:A31)     (もちろん「=IF('1'!G57<0,"",'1'!G57)」で頑張ってもOKですけどね。) としてやり、この範囲をMIN関数で   式(B1):=MIN(A1:A31) こんな感じで見に行く感じですね。 以上、蛇足的な回答になってしまいましたが、参考までに。

jyunmai
質問者

お礼

回答していただきありがとうございます。 詳しい説明とアドバイスありがとうございました。 まだまだエクセル初心者なので勉強していきます。

回答No.4

SMALL関数で、下からn番目のnを、 「データの個数 - 0以上のデータの個数 +1」 で指定すればOKなのでは? 図では、データ範囲A1:A7、B1に、 =SMALL(A1:A7,COUNT(A1:A7)-COUNTIF(A1:A7,">=0")+1) でテストしました。

jyunmai
質問者

お礼

分かりやすい図で大変勉強になりました。 少しづつですがエクセル勉強していきたいと思っています。 ありがとうございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

次のような式にすればよいでしょう。 =IF(MIN('1:31'!G57)=0,SMALL('1:31'!G57,2))

jyunmai
質問者

お礼

回答ありがとうございます。 教えていただいた関数では数値が表示されませんでした。 なぜか・・・。 また質問する際にもよろしくお願いします。

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

一応ご質問の直接の回答としては、例えば =MIN(IF(SUBTOTAL(9,INDIRECT(ROW(A1:A31)&"!G57"))>0,SUBTOTAL(9,INDIRECT(ROW(A1:A31)&"!G57")))) と記入し、必ずコントロールキーとシフトキーを押しながらEnterで入力するなどの事は出来ます。 しかしこんなイミフメイの数式を使うはきっぱりやめて 各シートの所定のセルに、例えば0の時は""を記入する関数を利用するなどの細工を施して =MIN('1:31'!G57)  とふつーに計算した方が、遥かに簡単です。

jyunmai
質問者

お礼

早速の回答ありがとうございます。 教えていただいた関数が理解できるようにエクセル勉強していきたいと思います。

関連するQ&A

専門家に質問してみよう