• ベストアンサー

エクセルで、項目ごとの最小値を出したい。

例の画像では「あ-か」ですが、実際にはたくさんの項目があります。 それぞれの項目は1-4個の数値を持っています。 項目ごとの数値の最小値(黄色い部分)を、自動で出したいです。 どのようにしたらよいか、教えてください。

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

  • ベストアンサー
  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.2

「入力するデータは絶対に省略しない」は初心者が気を付けるべきことの最上位 だと思います。自分で計算できる自信があるならどんなに下手な入力の仕方をし てもいいと思いますが できないならまともな表を作るべきです。 見たまんまの表の配置だとして 一端 C列の結合を解除 ■C2セル =IF(A3="",MIN(B2,C3),B2) C15セルまでコピー A2:A15セルをコピーして C2セルに書式貼り付け 中央揃えを解除

yoshi1401
質問者

お礼

ご回答ありがとうございます。 >「入力するデータは絶対に省略しない」は初心者が気を付けるべきことの最上位だと思います。 おっしゃることは、ごもっともです。 今回ご相談させていただいてる表は私が作ったものでは無いので、ご容赦ください。 他の人からいただいた表を、自分が使いやすいように加工したいため、アドバイスを募りました。 ご指示いただいた通りにやってみたら、望みの結果が出ました。 一番簡単にうまくできたので、ベストアンサーとさせていただきます。 ありがとうございました。

その他の回答 (5)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.6

回答No.5に説明不足がありました。 貼付画像のA16セルには次の数式を入力しています。 ="" データの枠外に何らかの文字列が入力されていないと最後の項目でエラーになります。

yoshi1401
質問者

お礼

追加のご指示を、ありがとうございます。 ご指示の通りA16に式を追加したところ、項目「か」でも、うまく結果が出せました。 ありがとうございました。

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.5

>項目ごとの数値の最小値(黄色い部分)を、自動で出したいです。 データの配置が悪いので簡単にはできません。 最小値の列に次の数式を設定すれば抽出可能ですが、数式をコピーするときに結合セルのサイズが異なると貼り付けできません。 =MIN(OFFSET($A$1,ROW()-1,1,MATCH("*",OFFSET($A$1,ROW(),0,4,1),0))) 貼付画像はセル結合を解除してオートフィルコピーした後にセル結合を再設定しています。

yoshi1401
質問者

お礼

ご回答ありがとうございます。 >データの配置が悪いので簡単にはできません。 お手数おかけして申し訳ありませんでした。 教えていただいたやり方でやってみたところ、「あ-お」はうまくいったのですが、なぜだか「か」のみ「#N/A」エラーになってしまいました。 上の5件はうまくいっているので、もしかしたら、私のやり方が何かおかしいのかもしれません。 ありがとうございました。

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.4

こういう表が欲しいのですか? http://1drv.ms/1C31kSL ちょっと都合で 弱点が2点程あります 一、  項目を記した列の 表下一番上に データ終端を 示すものが必要です。  内容は 「""」以外ならば 何でも良いです。 一、  全て関数のみで行いましたので 結果のセル結合は 出来ていません。  この点はご容赦ください。 式 =IF($B4="","",MIN(INDIRECT("$C"&MAX(INDEX(((($B$4:$B4<>"")*ROW($B$4:$B4))),,))&":$C"&MIN(INDEX((($B$3:$B$18<>"")*ROW($B$3:$B$18)<=ROW($B4))*99999999999+(($B$3:$B$18<>"")*ROW($B$3:$B$18)>ROW($B4))*ROW($B$3:$B$18),,))-1))) 説明 仮に 「項目」 見出し列をB列 「数値」 見出し列をC列 「最小値」見出し列をD列 見出し列が三行目 と、しています。 説明要点 エクセルでセル結合したセル範囲を 参照した場合 先頭列、先頭行,詰まり左上隅の参照のみに 値が返され それ以外は「""」になります。 (※1:参照後の値として、表されるのは 「""」ではなく 0です) (※2:Excelでは、表示と内部値は、必ずしも一致している訳では ありません) そこで、 D列の任意行において 自らの行高さ直上の「””」を MAX(INDEX(((($B$4:$B4<>"")*ROW($B$4:$B4))),,)) で、求め 自らの行高さ直下の「""」を、 MIN(INDEX((($B$3:$B$18<>"")*ROW($B$3:$B$18)<=ROW($B4))*99999999999+(($B$3:$B$18<>"")*ROW($B$3:$B$18)>ROW($B4))*ROW($B$3:$B$18),,)) で、求め 1を引いて一行上げる と、しています。 此等を元に C列の参照すべき範囲を 字列として得て INDIRECT構文で呼び出し、 MINで最小値を求めました。 使い方 理解しないと、きっと使えません 上記の仮に定めた位置を、本来の位置に読み替え 式中も、それに伴い 直さなければ 正常に 動かないからです。 まあでも 「$B$3:$B$18」以外は、割と素直だと思います 「$B$3:$B$18」は見出し行中の 見出し行から、データ終端文字行までを 参照させています。 此の参照範囲は、此の式のキモですので 必ず違えないように、変更ください。 補足 一、 INDEX構文はExcelの癖です。 本来無くて良いはずなのですが、 配列数式を、定数配列に置き換えないと まともに動いてくれないので、 止むを得ず 付けている そんな次第です。 二、 提示した表には、制作途中をも たたんだ状態で残しています。 然し 「貴方専用に作った」 申し訳ありませんが、こうじゃないです。 此の質問を探し当て 此の式をを後々でも参考にする 其の全ての方に向けて 作りました。 ですので、 此のシートは、壊さないようにして頂ければ幸いです。 出来れば、 ダウンロードしてから 見てください。 オンラインで触ると、都度保存され 直ぐに変更が残ってしまいますから、 三、 もし、より詳しい解説をお望みなら その旨「お礼」欄等で、申し付けください 気が向いたら 質問内容に対し、解説します。 如何でしょうか? セル結合出来ていない分、サブセットですが、 お役に立てていたならば、幸いです。

参考URL:
http://1drv.ms/1C31kSL
yoshi1401
質問者

お礼

とても詳しい解説を、ありがとうございます。 難しくて理屈は理解できませんが、教えていただいた式で、望んでいた結果を出すことができました。 「結果のセル結合」に関しては、項目の列の書式をコピーすればよいので、問題ありません。 「データ終端を 示すものが必要」という点が、難点と言えば難点ですね。 ありがとうございました。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.3

ご希望の回答にはなっていないと思いますが、 項目,数値を、それぞれA,B列とした場合、D列に以下の式を入れて下にドラッグコピーし、ピボットテーブルで、A列の項目で、D列の最小値を表示させてはいかがでしょう。 =IF(A2="",D1,A2)

yoshi1401
質問者

お礼

ご回答ありがとうございます。 みなさまから回答をいただくまでの間に、自分で考えてみた方法が、aokii様の方法でした。 でも、ピボットテーブルの使い方がよくわからず、挫折してしまいました。 今回は私の不勉強でこの方法は使えませんでしたが、参考になりました。 ありがとうございました。

  • potkurin
  • ベストアンサー率24% (33/134)
回答No.1

Min関数が利用できそうですね。 =MIN(範囲) 例~ =MIN(B1:B4)で、対象4つのセルの最小値を表示 お試しくださいませ。

yoshi1401
質問者

お礼

ご回答ありがとうございます。 項目の数が多いし、また、変更になる場合もあるため、手動で範囲を決められません。 範囲まで自動で決めたいのです。 なにかよい方法は無いでしょうか。

関連するQ&A