- 締切済み
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 ↑ ↑ 日付 ゼロ以外 関数については中級レベルだと思います。 いろいろ試したのですが、関数を組み合わせてもなかなかうまくいきません。 どなたかご教授いただけないものでしょうか? よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- DOUGLAS_
- ベストアンサー率74% (397/534)
<データ> のあるシートを「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)
<データ>のあるシートで セル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列もコピー、さらに下にコピーすれば<抽出>の ようになります。
お礼
shiritaiさん、ありがとうございます。 とても速い回答で驚きました。 難しく考えていたので、これなら単純明快でわかりやすいです。 そうですよね~ 初心に戻った心境です。助かりました。 3行目、4行目に 行を追加できるかどうか、確認してから試してみようと思います。 完成したらご報告いたします。まずはお礼までです。