- 締切済み
エクセルの表から正の数、負の数を抜き出す方法
エクセル2003にある数字の羅列を正の数と負の数とに分けたいと思っていますが、 うまくできません。関数などご存じでしたら教えてください。 例 10000 -20000 30000 40000 50000 -60000 -70000 ↓↓↓このようになるようにしたいと考えています↓↓↓↓↓↓ A B C 10000 10000 -20000 -20000 30000 30000 40000 40000 50000 50000 -60000 -60000 -70000 -70000 できるならばA欄に数字を入れたら正の数ならB欄に数字が表示され、 負の数ならC欄に表示されるようにしたいと考えています。 検索したのですがキーワードが違うのか思ったものが探せませんでした。 ご存じの方がいらっしゃいましたら教えてください。 よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
No.4 です。少し訂正させてください。 符号で分類するには SIGN 関数が使えると言いましたが、「符号そのものを数式中で使いたい」という目的でない場合は、次式でも十分でした。どちらかというと、こうしたほうが簡明で、良いですね。すみません。 B2 =0+(a2>0) C2 =0+(a2=0) D2 =0+(a2<0) E2 =sum(b2:c2) あるいは =0+(sum(b2:c2)=1) あるいは =0+(a2>=0) 上式では、「ゼロ以上」のフラグとして、E2 セルを追加してみました。複数の項目(列)への該当の有無を見るには、フラグ同士を合計すればいいのですね。「>=」は、「≧」の意味です。同様にして、「ゼロ以外」や「ゼロ以下」を求めることも可能ですね。「<>」と書くと、「≠」の意味になります。「<=」は「≦」です(「=<」は誤り)。 まあ今回の場合、正、ゼロ、負の 3 種類だけなので、例えば負だけを除きたいという場合は、オートフィルタで負の列が 0 である行のみに絞り込めば、目的は達成されるんですけれどね。 もっとたくさんの条件と列がある場合には、E2 のような計算もできるという補足情報です。SUM 関数で合計した結果が 2 以上になることもある場合は、E2 の 3 式のうち 2 番目のタイプを使って「=2」と書くと、合計が 2 未満なら 0、2 に等しいなら 1 を算出してくれます。1 番目のタイプでは 2 などの合計値がそのまま表示されるので、それはそれで絞り込みに使えますね。 A 列の値をそのまま書き写すには、No.4 でも言ったとおり、元の値とフラグを掛け算します。 オートフィルタで絞り込んだ状態の表を保存するには、コピーして他のシートに貼り付けるなどすればいいですね。
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
正負に「分ける」というのが「列を分ける」という意味なのでしたら、関数などを組み合わせた何かしらの 1 種類の数式だけを考えていれば解決するということではないですよね。横方向の位置が問題になるわけです。 列を分けた後でどのような分析を考えていらっしゃるのか分かりませんが、列を分けることなく、直に A 列のデータを使って分析するということも、今後、検討してみるとよいかもしれません。数値の符号だけの問題なら、余計な操作をかませずに、比較的簡単な数式のみで処理できることも多いからです。 Excel には、数値の符号に応じた値(1、0、-1)を返す SIGN 関数というものが用意されています。A 列に既存であるデータをわざわざ他の列に丸写しするというのも、ちょっとダブっているようなムダな感じもするので、符号に従って SIGN 関数により A 列の値を分類するフラグを、B ~ D 列に算出する数式を作ってみました。 B2 =0+(sign($A2)=1) C2 =0+(sign($A2)=0) D2 =0+(sign($A2)=-1) このフラグにより、オートフィルタにおいて、正、負、ゼロの行のみに絞り込み表示するといったこともできるでしょう。どうしても他の列に写す必要がある場合は、A 列の値と 0 や 1 を掛け算すればいいだけですね。 横方向の位置というものも関数の組み合わせで表現することもできなくはないのですが、正、負、ゼロの 3 種類だけですし、上のように具体的な値で指定したほうがかえって分かりやすいでしょう。
- keithin
- ベストアンサー率66% (5278/7941)
空白を仕分ける必要はありません。 B1: =IF(A1>0,A1,"") 以下コピー C1: =IF(A1<0,A1,"") 以下コピー。
- kagakusuki
- ベストアンサー率51% (2610/5101)
御質問文の例にある様に、A列に入力したのと同じ行に表示させるのでしたら、回答No.1様の方法が正解です。 又、もしも、 A列 B列 C列 1行目 10000 10000 -20000 2行目 -20000 30000 -60000 3行目 30000 40000 -70000 4行目 40000 50000 5行目 50000 6行目 -60000 7行目 -70000 の様に、間を詰めて表示させたい場合には、まず、B1セルに次の関数を入力して下さい。 =IF(ROWS($1:1)>COUNTIF($A:$A,">0"),"",SMALL($A:$A,COUNTIF($A:$A,"<=0")+ROWS($1:1))) 次に、C1セルに次の関数を入力して下さい。 =IF(ROWS($1:1)>COUNTIF($A:$A,"<0"),"",LARGE($A:$A,COUNTIF($A:$A,">=0")+ROWS($1:1))) そして、B1~C1の範囲をコピーして、同じ列範囲の2行目以下に貼り付けて下さい。
- t-yamada_2
- ベストアンサー率40% (587/1460)
B1に =IF(A1="","",IF(A1>0,A1,"")) C1に =IF(A1="","",IF(A1<0,A1,"")) あとは下に式をコピーです。
補足
まとめコメントですみません。 回答No.1~4の方々、ありがとうございます。アドバイスいただいた方法を、下手なりにひとつひとつ自分で確認しているところですので、返答はいましばらくお待ちください。