- ベストアンサー
Excel ゼロ以外の数字を抜き出す方法
すごく単純かもしれませんが、 A列に 4,0,5,6,0,8,6,0(各縦方向にですね) というように、ゼロ以上の数値とゼロが混在しているとします。 そのゼロの行が必要ないので、 B列に 4,5,6,8,6 というようにゼロのない数値だけを並べて表示したいのです。 どのようにすればよいでしょうか。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (7)
- keithin
- ベストアンサー率66% (5278/7941)
- Prome_Lin
- ベストアンサー率42% (201/470)
すみません。 やはり、関数では、分かりませんでしたので、VBAで、 Option Explicit Sub Test() Dim c, i As Long c = 0 For i = 1 To Range("A1").End(xlDown).Row If Cells(i, 1).Value > 0 Then c = c + 1 Cells(c, 2).Value = Cells(i, 1).Value End If Next i End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
質問者はエクセルの関数しかなじみがないのだろうが、関数でやることが、やさしいと思うのは間違い。非常な技巧を要する課題も多い。 この、「条件を付けて抜き出す」課題は、それに該当するのだ。今までもこのタイプの質問は相当あったが、下記のように「作業列を使う方法」でない方法でやる方法の式は、初心者や中級者には、むつかしすぎる式になる。 (興味があれば、Googleで「imogasi方式」で照会すれば、私以外の回答の中に、むつかしく長い式の回答が出ているものが多い。本質問にもそういう回答が、出るかもしれない。) 私には、VBAでやる方が考えやすい。 ーー それで関数を使いかつ作業列を使う方法で、やってみる。これで中級クラス向けの回答かなと思う。 ーー 例データ 式の結果(C,D,E列)も、下記には載せている A1:B10 A列 B列 C列 D列 E列 項目 数値 作業列 抜出後項目 抜出後数値 a1 12 1 a1 12 a2 0 a3 23 a3 23 2 a6 21 a4 0 a7 16 a5 0 a9 42 a6 21 3 a7 16 4 a8 0 a9 42 5 関数式 C2の式は =IF(B2<>0, MAX($C$1:C1)+1,"") 下方向に式を複写。 B列が0でない行に 上から連番を振っている。 E2の式は =INDEX($A$1:$A$10,MATCH(ROW()-1,$C$1:$C$10,0),1) F2お式は =INDEX($A$1:$B$10,MATCH(ROW()-1,$C$1:$C$10,0),2) それぞれ5行分(C列のMAX値)式を複写。 結果は上記の通り。 10行目まで式を複写しても、#N/Aが出ない式もできるが、 E2の式は、=IF(ROW()-1<=MAX(C1:C10),INDEX($A$1:$A$10,MATCH(ROW()-1,$C$1:$C$10,0),1),"") とでもすればよい
- msMike
- ベストアンサー率20% (364/1804)
[No.2補足]へのコメント、 》 B列に関数でやりたいのです 関数が苦手と推察して、関数なしの方法をご案内したまで。 「B列に」がメインなら、A列をB列にコピーして実行すれば好いのです。 どうしても難解な関数に固執するなら・・・ B1: =IFERROR(INDEX(A$1:A$100,SMALL(IF(A$1:A$100,ROW(A$1:A$100),""),ROW(A1))),"") 【お断り】上式は配列数式として入力すること
- quindecillion
- ベストアンサー率48% (87/180)
直接的にはマクロになるのではないでしょうか。 作業列をCに作りBに表示するというのでしたら Bに=IF(ROW()>=MAX($C:$C),"",INDEX(A:A,SMALL($C:$C,ROW(A2)))) Cに=IF(A1<>0,ROW(),"") という感じでできなくもないようですが。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1269557477?__ysp=RXhjZWwgMOS7peWkliDmipzjgY3lh7rjgZc%3D ご参考に。試して見るとnullが出ましたが一応出来ていました。 vbaでしたら Sub 抽出転記() Dim data(), tbl Dim i As Long, j As Long With Sheets("sheet1") tbl = .Range("a1:a" & .Range("a65536").End(xlUp).Row).Value For i = 1 To UBound(tbl, 1) If Val(StrConv(tbl(i, 1), vbNarrow)) <> 0 Then j = j + 1 ReDim Preserve data(1 To UBound(tbl, 1), 1 To 2) data(j, 1) = tbl(i, 1) End If Next i End With Sheets("sheet1").Range("b1").Resize(j, 2) = data End Sub ですとか Sub try() Dim i As Long With Sheets("sheet1") endlow = Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To .Cells(Rows.Count, 1).End(xlUp).Row If .Cells(i, 1) <> 0 Then .Cells(i, 1).Resize(, 1).Copy _ Sheets("sheet1").Cells(i, 2).End(xlUp).Offset(1) End If Next i End With End Sub などで可能です。 たどりつけなくなってしまったので参考URLの表示ができませんが、tryの方は上記参考URLの回答者の方のものです。 「Excel 0以外 抜き出す」 などで検索されると色々でてきます。 ご参考になれば幸いです。
- msMike
- ベストアンサー率20% (364/1804)
- masnoske
- ベストアンサー率35% (67/190)
表示するだけなら、フィルターで0以外を選択してはどうでしょうか。
補足
ありがとうございます。 すみません、B列に関数でやりたいのです。
補足
ありがとうございます。 すみません、B列に関数でやりたいのです。