こういう表が欲しいのですか?
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の癖です。
本来無くて良いはずなのですが、
配列数式を、定数配列に置き換えないと
まともに動いてくれないので、
止むを得ず 付けている
そんな次第です。
二、
提示した表には、制作途中をも
たたんだ状態で残しています。
然し
「貴方専用に作った」
申し訳ありませんが、こうじゃないです。
此の質問を探し当て
此の式をを後々でも参考にする
其の全ての方に向けて
作りました。
ですので、
此のシートは、壊さないようにして頂ければ幸いです。
出来れば、
ダウンロードしてから
見てください。
オンラインで触ると、都度保存され
直ぐに変更が残ってしまいますから、
三、
もし、より詳しい解説をお望みなら
その旨「お礼」欄等で、申し付けください
気が向いたら
質問内容に対し、解説します。
如何でしょうか?
セル結合出来ていない分、サブセットですが、
お役に立てていたならば、幸いです。
お礼
ご回答ありがとうございます。 >「入力するデータは絶対に省略しない」は初心者が気を付けるべきことの最上位だと思います。 おっしゃることは、ごもっともです。 今回ご相談させていただいてる表は私が作ったものでは無いので、ご容赦ください。 他の人からいただいた表を、自分が使いやすいように加工したいため、アドバイスを募りました。 ご指示いただいた通りにやってみたら、望みの結果が出ました。 一番簡単にうまくできたので、ベストアンサーとさせていただきます。 ありがとうございました。