- 締切済み
エクセル教えて下さい
以下の様なデータで、 __A__B__C 1_10__12__● 2_12__14__△ 3_18__18__◎ 4_22__31__□ 5_31__33__● A列にある数字とB列にある数字が一致する行だけを別シートに抽出したい場合、 どのような方法がありますか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
(テストデータ)A2:C12(第1行目は見出し用にあけています) 9 10 a 12 12 b 3 4 c 13 4 d 4 4 e 23 24 f 1 2 g 3 3 h 4 3 I 6 6 j 7 5 k (関数式) D2に=IF(A2=B2,1,"") D3に=IF(A3=B3,COUNT($D$2:D2)+1,"") $はこの通り正確に入れてください。 D4からD12までD3を複写する。 (D列結果の値) D3=1、D6=2、D9=3、D11=4となります。 A列=B列の行が4行ありますと言うこと。 (関数式) E2に=OFFSET($A$2,MATCH(ROW()-1,$D$2:$D$12,0)-1,2) E3以下E5まで複写する。5=4(4はD11の値。D列の最大値)+1(+1は第2行目から始めたため。) (結果) E1=b、E2=e、E3=h、E4=jとなります。 ●やっていることは自分の行番号-1(第2行目からはじめるため-1となる)と同じ数字がD列に入っている行を探し、その行のA列から右3列目(オフセットでは2)のセルの値を取ってきています。 普通は関数式では条件に合ったものを、上行から積めてセットして行く抜き出しは出来ません。本解答は、送る側からでなくて、受ける側で、その行に来るべき行を探しています。その点技巧的です。今まで市販本での解答には載っていないのではと思います? VBAでやればなんなく出来るのですが。
- maruru01
- ベストアンサー率51% (1179/2272)
つまり、質問の例だと、1、3、4行目を書き出すわけですね。 じゃあこれ。 Sheet2のA1に、 =IF(SUMPRODUCT(ISNUMBER(MATCH(Sheet1!$B$1:$B$5,Sheet1!$A$1:$A$5,0))*1)>=ROW(1:1),INDEX(Sheet1!B:B,SMALL(IF(ISNUMBER(MATCH(Sheet1!$B$1:$B$5,Sheet1!$A$1:$A$5,0)),ROW(Sheet1!$B$1:$B$5)),ROW(1:1))),"") と入力して、[Ctrl]+[Shift]+[Enter]で配列数式にします。 そして、右へ必要な列数分コピーし、さらに下の行へコピーします。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 元のデータがSheet1にあるとして、Sheet2に抽出するとします。 Sheet2のA1に、 =IF(SUMPRODUCT((Sheet1!$A$1:$A$5=Sheet1!$B$1:$B$5)*1)>=ROW(1:1),INDEX(Sheet1!A:A,SMALL(IF(Sheet1!$A$1:$A$5=Sheet1!$B$1:$B$5,ROW(Sheet1!$A$1:$A$5)),ROW(1:1))),"") と入力して、[Ctrl]+[Shift]+[Enter]で決定します。 (数式の両端に「{}」が付いて、配列数式になります。) そしたら、これをC1までコピー、さらに下の行へコピーします。 下の行へのコピーは元のデータ数分で十分です。
補足
さっそく回答ありがとうございます。 質問を読み返すと、伝えたい事が伝わらない書き方だったので補足します。すみません。 やりたい事というのが、B列の中に含まれる、A列と一致する数字の行だけを抜取りたいというものです。 つまりB列には余分な数字があり、データ個数的にもB列の方が多いです。 B列にある数字がA列にもあるという行だけをB列以降、行ごと別シートに抜きとりたいのです。 おそれいりますがよろしくお願いします。