例えば氏名を入力したセルのとなりに性別を男、または女と入力された100人分のデータがあったとします。
この表から男、または女だけを抜き出した表を表示させたいのですが、ソートするのではなく、別のシートに一覧表として表示させるようなことはできますでしょうか。
VLOOKUPでできるかもしれないと思いましたが、これは該当するデータを1つ拾ってくる関数なので違うような気がします。
よろしくお願い致します。
これは配列数式で1つの関数でできるのですよ。
例えば、名前がA列、B列に男女が書いてあって100行あるとして
C1に次の数式を入れて、Ctrl+Shift+Enterで配列数式にして下にコピーすれば男の名前が抽出されます。
=INDEX(A$1:A$100,SMALL(IF(B$1:B$100="男",ROW(B$1:B$100),101),ROW()))
配列数式とは何かというのはこちらを見てください。
http://pc.nikkeibp.co.jp/pc21/special/hr/
早い話が作業列を使わずに一発でやるテクニックというところかな。
コードの説明をすると
IF(B$1:B$100="男",ROW(B$1:B$100),101)
で、B列が男の場合その行番号、それ以外は101を返す。
SMALL(~,ROW())
その行番目に小さい値を返す。
INDEX(A$1:A$100,~)
A列の~番目の値を返す。
(マクロで処理した方がすっきりしますが)
関数で処理したいということなので以下ではどうですか。
Sheet1(名前リスト)
A列;番号(1~100) 例では、1~10まで。
B列;名前
C列;性別
Sheet2(抜き出す表)
A列;=IF(Sheet1!C2="男",1,0) '男であれば1
B列;=SUM($A$2:A2) 'カウント
C列;1~100 '番号1~100(例では1~10)
'男性の行番号
E列;=IF(ISERROR(VLOOKUP(C2,$B$2:$C$10,2,0)=TRUE),"",VLOOKUP(C2,$B$2:$C$10,2,0))
'男性の名前
F列;=IF(ISERROR(VLOOKUP(E2,Sheet1!$A$2:$B$11,2,0)=TRUE),"",VLOOKUP(E2,Sheet1!$A$2:$B$11,2,0))
http://cid-df56e5e5c62da2d4.office.live.com/browse.aspx/%e5%85%a...
初歩的な質問で恐縮ですが、E列;=IF(ISERROR(VLOOKUP(C2,$B$2:$C$10,2,0)=TRUE),"",VLOOKUP(C2,$B$2:$C$10,2,0)) はE2のセルに、F列;=IF(ISERROR(VLOOKUP(E2,Sheet1!$A$2:$B$11,2,0)=TRUE),"",VLOOKUP(E2,Sheet1!$A$2:$B$11,2,0))
はF2にセルに
入れてみましたが何も起こりません。もう少し詳しくお教え頂ければ助かります。
これは配列数式で1つの関数でできるのですよ。
例えば、名前がA列、B列に男女が書いてあって100行あるとして
C1に次の数式を入れて、Ctrl+Shift+Enterで配列数式にして下にコピーすれば男の名前が抽出されます。
=INDEX(A$1:A$100,SMALL(IF(B$1:B$100="男",ROW(B$1:B$100),101),ROW()))
配列数式とは何かというのはこちらを見てください。
http://pc.nikkeibp.co.jp/pc21/special/hr/
早い話が作業列を使わずに一発でやるテクニックというところかな。
コードの説明をすると
IF(B$1:B$100="男",ROW(B$1:B$100),101)
で、B列が男の場合その行番号、それ以外は101を返す。
SMALL(~,ROW())
その行番目に小さい値を返す。
INDEX(A$1:A$100,~)
A列の~番目の値を返す。
分かりやすいご説明ありがとうございます。
正にこれです。
分かりやすいご説明ありがとうございます。
正にこれです。