関数では該当分の抜き出しは不得手です。
VBA向きの問題です。
関数では#1のご回答のような理解には相当、関数になれないと、難しいです。
ーーー
私はわかりやすくするため、中間作業列を使う、自称 imogasi方式 を提唱してます。(WEBで照会してもらえば、沢山過去の質問回答が出ます)
ーーー
以下も相当理解は難しいかも知れませんが、作業列を使わない方法を
上げます。
例データ A1:B20(データは現在10行の例)
室No 利用者名
1 a
2 b
3 c
3 d
2 e
5 f
2 g
2 h
3 i
同一シートのF2に
室Noが2のものを抜き出す例
=SMALL(IF($A$1:$A$20=2,ROW($A$1:$A$20),),20-COUNTIF($A$1:$A$20,2)+ROW(A1))
と入れてSHIFT+CTRL+ENTER(3つのキーを同時押し)配列数式です。
下へ複写する。
3
6
8
9
#NUM!
#NUM!
ーーー
上記の式の説明
A1:A2の値の中で=2のセルがあれば、その行の行番号を仮想エリアに記録すると考える。
この場合、2である行の行番号3,6,8,9の4つと、=2でない0が16個です。
この場合の4つはCOUNTIF($A$1:$a$20,2)で求まる数です
0でないものは、20個のうち小さい順では16+1=17番目、次ぎは18番目、次ぎは19番目、次ぎは20番目に
SMALL関数で小さい物を取ると、行番号が小さいものが取れる。それは上の行から取り出すことに当たる。
次々と番目数に1を加えるのは+ROW(A1)で実現できる。式を複写するとA2,A3・・と番号が増えるから。
B列のデータを採るのは、=INDEX($A$1:$B$20,(上記で求まる行),2)
あと残る問題は、5行以下に#NUMが出ることを防ぐ必要があるが
これはA列で2の数COUNTIF($A$1:$A$20,2)より、行数が大になれば(IFで判別)、空白を返すようにする。
G2に
=INDEX($A$1:$B$20,SMALL(IF($A$1:$A$20=2,ROW($A$1:$A$20),),20-COUNTIF($A$1:$A$20,2)+ROW(B1)),2)
と入れてSHIFT+CTRL+ENTER(3つのキーを同時押し)配列数式です。
下へ複写する。
結果
3 b
6 e
8 g
9 h
#NUM! #NUM!
#NUM! #NUM!
エラーを消すには
H2に
=IF(ROW(H1)>COUNTIF($A$1:$A$20,2),"",INDEX($A$1:$B$20,SMALL(IF($A$1:$A$20=2,ROW($A$1:$A$20),),20-COUNTIF($A$1:$A$20,2)+ROW(C1)),2))
と入れてSHIFT+CTRL+ENTER(3つのキーを同時押し)配列数式です。
下へ複写する。
ーーーー
Sheet2へ結果を出す方法
Sheet1を参照している部分はSheet1!を番地の前につければ良い。右最後の部分のROW(C1)のc1は結果を出すシートの行数なので、シート名をつけなくて良い。
ーーー
#1のご回答や、上記でも、質問者は関数で抜き出したいですか。
補足
すみません。コピーしてみましたが上手くいきません。 勝手にセルが結合され、結合されたセルが青い罫線で枠組みされます。 関数を勉強し始めたばかりなので、それぞれの関数(例えばROWやCOUNTIF)などの意味はわかります。 しかしこのようにつながると、いったいこの数式は何を支持しているのかわかりません。 この数式について、もう少しわかりやすく説明していただけないでしょうか?