質問者はエクセルの関数しかなじみがないのだろうが、関数でやることが、やさしいと思うのは間違い。非常な技巧を要する課題も多い。
この、「条件を付けて抜き出す」課題は、それに該当するのだ。今までもこのタイプの質問は相当あったが、下記のように「作業列を使う方法」でない方法でやる方法の式は、初心者や中級者には、むつかしすぎる式になる。
(興味があれば、Googleで「imogasi方式」で照会すれば、私以外の回答の中に、むつかしく長い式の回答が出ているものが多い。本質問にもそういう回答が、出るかもしれない。)
私には、VBAでやる方が考えやすい。
ーー
それで関数を使いかつ作業列を使う方法で、やってみる。これで中級クラス向けの回答かなと思う。
ーー
例データ
式の結果(C,D,E列)も、下記には載せている
A1:B10
A列 B列 C列 D列 E列
項目 数値 作業列 抜出後項目 抜出後数値
a1 12 1 a1 12
a2 0 a3 23
a3 23 2 a6 21
a4 0 a7 16
a5 0 a9 42
a6 21 3
a7 16 4
a8 0
a9 42 5
関数式
C2の式は =IF(B2<>0, MAX($C$1:C1)+1,"") 下方向に式を複写。
B列が0でない行に 上から連番を振っている。
E2の式は =INDEX($A$1:$A$10,MATCH(ROW()-1,$C$1:$C$10,0),1)
F2お式は =INDEX($A$1:$B$10,MATCH(ROW()-1,$C$1:$C$10,0),2)
それぞれ5行分(C列のMAX値)式を複写。
結果は上記の通り。
10行目まで式を複写しても、#N/Aが出ない式もできるが、
E2の式は、=IF(ROW()-1<=MAX(C1:C10),INDEX($A$1:$A$10,MATCH(ROW()-1,$C$1:$C$10,0),1),"")
とでもすればよい
補足
ありがとうございます。 すみません、B列に関数でやりたいのです。