• 締切済み

EXCEL:ゼロ以外のデータを詰めて抽出する方法

初めて投稿します。よろしくお願いいたします。 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   ↑  ↑   日付 ゼロ以外 関数については中級レベルだと思います。 いろいろ試したのですが、関数を組み合わせてもなかなかうまくいきません。 どなたかご教授いただけないものでしょうか? よろしくお願いいたします。

みんなの回答

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.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 を選択、下方向にコピーします。

  • shiritai
  • ベストアンサー率43% (10/23)
回答No.1

<データ>のあるシートで  セル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列もコピー、さらに下にコピーすれば<抽出>の  ようになります。

higuchi935
質問者

お礼

shiritaiさん、ありがとうございます。 とても速い回答で驚きました。 難しく考えていたので、これなら単純明快でわかりやすいです。 そうですよね~ 初心に戻った心境です。助かりました。 3行目、4行目に  行を追加できるかどうか、確認してから試してみようと思います。 完成したらご報告いたします。まずはお礼までです。

関連するQ&A