プロが教えるわが家の防犯対策術!

初めて投稿します。よろしくお願いいたします。

EXCEL2000を使用しています。
オートフィルタを使わずに
関数でデータを抽出する方法で悩んでいます。

下記<データ>が存在しています。
2行目がゼロ以外のものを、
別シート<抽出>に上から詰めて抽出したいのです。

<データ>
  A列 B列 C列 D列 E列
1行 1  2  3  4  5  ←日付
2行 5  3  0  2  0  ←数字

<抽出>別シート
  A列 B列 
1行 1  5
2行 2  3
3行 4  2

  ↑  ↑
  日付 ゼロ以外

関数については中級レベルだと思います。
いろいろ試したのですが、関数を組み合わせてもなかなかうまくいきません。
どなたかご教授いただけないものでしょうか?

よろしくお願いいたします。

A 回答 (2件)

 <データ> のあるシートを「Sheet1」、<抽出>別シート を「Sheet2」とします。



A)一発で抽出する方法(配列数式)
1)Sheet2 A1 に
=IF(ROW(A1)<=COUNTIF(Sheet1!$2:$2,">0"),INDEX(Sheet1!$1:$1,SMALL(IF(Sheet1!$A$2:$CV$2=0,256,COLUMN(Sheet1!$A$2:$CV$2)),ROW(A1))),"")
をコピペし、[Shift] + [Ctrl] + [Enter] で確定します。
2)Sheet2 B1 に
=IF(ROW(A1)<=COUNTIF(Sheet1!$2:$2,">0"),INDEX(Sheet1!$2:$2,SMALL(IF(Sheet1!$A$2:$CV$2=0,256,COLUMN(Sheet1!$A$2:$CV$2)),ROW(A1))),"")
をコピペし、[Shift] + [Ctrl] + [Enter] で確定します。
3)Sheet2 A1:B1 を選択、下方向にコピーします。

B)二発で抽出する方法
1)Sheet1 A3 に
=IF(A2>0,COLUMN(),"")
と入力し、これを右方向に必要分コピーします。
2)Sheet2 A1 に
=IF(ROW(A1)<=COUNTIF(Sheet1!$3:$3,">0"),INDEX(Sheet1!$1:$1,SMALL(Sheet1!$3:$3,ROW(A1))),"")
Sheet2 B1 に
=IF(ROW(B1)<=COUNTIF(Sheet1!$3:$3,">0"),INDEX(Sheet1!$2:$2,SMALL(Sheet1!$3:$3,ROW(B1))),"")
をコピペします。
3)Sheet2 A1:B1 を選択、下方向にコピーします。
    • good
    • 3

<データ>のあるシートで


 セルA3 : =IF(A2<>0,1,"") (B列以降もコピー。以下同じ)
 セルA4 : =IF(A2<>0,COUNT(A3:$A3),"")
 セルA5 : =A1
 セルA6 : =A2

つぎに、
 A列の10行目から下に、1から順に数字を入れる
 9行B列に「2」、9行C列に「3」を入れる

 セルB10に、 =HLOOKUP($A10,$A$4:$F$6,B$9,FALSE)
 といれてC列もコピー、さらに下にコピーすれば<抽出>の
 ようになります。
    • good
    • 1
この回答へのお礼

shiritaiさん、ありがとうございます。
とても速い回答で驚きました。

難しく考えていたので、これなら単純明快でわかりやすいです。
そうですよね~ 初心に戻った心境です。助かりました。

3行目、4行目に 
行を追加できるかどうか、確認してから試してみようと思います。

完成したらご報告いたします。まずはお礼までです。

お礼日時:2009/04/12 14:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A