プロが教える店舗&オフィスのセキュリティ対策術

エクセル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欄に表示されるようにしたいと考えています。

検索したのですがキーワードが違うのか思ったものが探せませんでした。
ご存じの方がいらっしゃいましたら教えてください。
よろしくお願いいたします。

A 回答 (5件)

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 でも言ったとおり、元の値とフラグを掛け算します。

オートフィルタで絞り込んだ状態の表を保存するには、コピーして他のシートに貼り付けるなどすればいいですね。
「エクセルの表から正の数、負の数を抜き出す」の回答画像5
    • good
    • 0

正負に「分ける」というのが「列を分ける」という意味なのでしたら、関数などを組み合わせた何かしらの 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 種類だけですし、上のように具体的な値で指定したほうがかえって分かりやすいでしょう。
「エクセルの表から正の数、負の数を抜き出す」の回答画像4

この回答への補足

まとめコメントですみません。
回答No.1~4の方々、ありがとうございます。アドバイスいただいた方法を、下手なりにひとつひとつ自分で確認しているところですので、返答はいましばらくお待ちください。

補足日時:2014/03/16 08:56
    • good
    • 1

空白を仕分ける必要はありません。



B1:
=IF(A1>0,A1,"")
以下コピー

C1:
=IF(A1<0,A1,"")
以下コピー。
    • good
    • 7

 御質問文の例にある様に、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行目以下に貼り付けて下さい。
「エクセルの表から正の数、負の数を抜き出す」の回答画像2
    • good
    • 2

B1に


=IF(A1="","",IF(A1>0,A1,""))

C1に
=IF(A1="","",IF(A1<0,A1,""))

あとは下に式をコピーです。
    • good
    • 1

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

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


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