SUBTOTALの非表示の値を無視する機能を使えばできそうです。
まず、A列を作業列を挿入し、B列をフィルタされるデータ列として、C1に関数の結果を表示してみます。
こんな感じ。
A | B | C | |
---|---|---|---|
1 | 見出し | データ1 | |
2 | 2 | データ1 | |
3 | 3 | データ2 | |
4 | 4 | データ1 | |
5 | 5 | データ2 | |
6 | 6 | データ1 | |
7 | 7 | データ3 | |
8 | 8 | データ3 |
A列にはA2から下に2から連番を入れます。
B列はオートフィルにします。
そして結果を表示するC1に数式で
=INDEX(B:B,SUBTOTAL(105,A:A))
この数式の意味は、SUMBOTALで引数105で表示している最小値をとり、INDEXでその行を取得します。
http://www.relief.jp/itnote/archives/000476.php
これで、オートフィルをしたときに見出しの下に来るデータ(即ち選択したデータ)が表示されます。
これはこうすればできるという方法の紹介ですので、実際の環境に合わせてみてください。
作業列を使わないで一発で入力する数式も考えてみました。
先の回答と同じ条件で、作業列Aは使っていません。
=INDEX(B:B,MIN(IF(SUBTOTAL(103,INDIRECT("B"& ROW(B2:B1000)))=1,ROW(B2:B1000),1001)))
と入力し、Ctrl+Shift+Enterで配列数式とします。
式中のB2:B1000はデータ範囲です。実際の範囲かそれよりも広い範囲を指定します。
表示・非表示の判別として先ほどのSUBTOTALで表示のデータ個数を調べています。
その個数が1ならばその行番号を違う場合は1001(式中は1000行までにしてるので)を反します。
そして、配列数式で集められた値の最小値をMINで取得し、INDEXに入れます。
先の回答の訂正
SUMBOTAL→SUBTOTALでしたね。
おおすばらしいなんとかできるのですね。試してみます。
なるほど試してみます。