プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (6件)

◆こんな方法はいかがでしょう


=SMALL('1:31'!G57,SUMPRODUCT(COUNTIF(INDIRECT(ROW(1:31)&"!G57"),"<=0"))+1)
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/07/29 01:13

次の解釈でよろしいですか?


例えば
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))

ではダメですか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/07/29 01:26

=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)
こんな感じで見に行く感じですね。



以上、蛇足的な回答になってしまいましたが、参考までに。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/07/29 01:23

SMALL関数で、下からn番目のnを、


「データの個数 - 0以上のデータの個数 +1」
で指定すればOKなのでは?

図では、データ範囲A1:A7、B1に、
=SMALL(A1:A7,COUNT(A1:A7)-COUNTIF(A1:A7,">=0")+1)
でテストしました。
「エクセル 最小値を求める関数について」の回答画像4
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/07/29 01:21

次のような式にすればよいでしょう。



=IF(MIN('1:31'!G57)=0,SMALL('1:31'!G57,2))
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/07/29 01:18

一応ご質問の直接の回答としては、例えば


=MIN(IF(SUBTOTAL(9,INDIRECT(ROW(A1:A31)&"!G57"))>0,SUBTOTAL(9,INDIRECT(ROW(A1:A31)&"!G57"))))
と記入し、必ずコントロールキーとシフトキーを押しながらEnterで入力するなどの事は出来ます。


しかしこんなイミフメイの数式を使うはきっぱりやめて
各シートの所定のセルに、例えば0の時は""を記入する関数を利用するなどの細工を施して
=MIN('1:31'!G57) 
とふつーに計算した方が、遥かに簡単です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/07/29 01:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!