• ベストアンサー

複数のデータについて正数か負数かを一括して識別したいのですが(ワークシート関数)

例えばセルA1~A20のデータが全て正数もしくは全て負数ならば B1にA1~A20の合計値を、正数と負数両方混じっているならB1には ゼロを出力させたいのですが、この処理を簡潔に記述する方法は ありますか? データの数が多くなるケースもあり、「IF(A1>0 and A2>0・・・」と 一つずつ記述すると冗長になりすぎてしまいます。 OSはWindows2000、エクセルはExcel2000を使用しています。 ワークシート関数での回答をお願いします。

noname#128465
noname#128465

質問者が選んだベストアンサー

  • ベストアンサー
noname#52504
noname#52504
回答No.4

簡潔にということなので、ちょいとテクニカルですが、SUMPRODUCTも配列数式も使わずにやってみました。  =IF(MAX(A1:A20)*MIN(A1:A20)>=0,SUM(A1:A20),0)  [最大値と最小値が同符号なら和を、でなければ0を] ※上記は0が混じる場合でも和を返します。  0が混じる場合に0を返すなら、>=0 の部分を >0 に。

noname#128465
質問者

お礼

うまく処理することができました。 ありがとうございました。

その他の回答 (3)

noname#204879
noname#204879
回答No.3

》 正数と負数両方混じっているなら… 正数でも負数でもない 0 が混じることはない、と考えて構わないのでしょうか?

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.2

◆こんな方法もありますよ =(SUMPRODUCT((SIGN(A1)=SIGN(A1:A20))*1)=COUNT(A1:A20))*SUM(A1:A20)

noname#128465
質問者

お礼

うまく処理することができました。 ありがとうございました。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

作業列を使うなら、 C1=ABS(A1) C2=ABS(A2) … C20=ABS(A20) の総和と、A列の総和の絶対値を比較すれば良いかと。 -- 配列数式を使えば、1回の式で書けると思います。 =IF(ABS(SUM(A1:A20))=SUM(ABS(A1:A20)),SUM(A1:A20),0) でCtrl+Enter とか?

noname#128465
質問者

お礼

うまく処理することができました。 ありがとうございました。

関連するQ&A

  • エクセルのワークシート間のデータ共有について

    教えてください。エクセルなんですが、ワークシート1のセルA1にデータを入力し、ワークシート2のセルB2にそのデータが出るように、関数を埋め込んでいます。そこまでは良いのですが、そこからワークシート2のセルB2に新しくデータを入力して、ワークシート1のセルA1に反映させることは出来るのでしょうか?分かりづらく申し訳ありませんが、イメージとして現在データ入力をA→Bとなっているところを、A<=>Bにしたいのです。

  • エクセルのワークシート関数で最小値

    エクセルのワークシート関数でA1セルとB1セルの最小値を求める場合 =MIN(A1,B1) だと思います。 しかし、これではどちらかのセルが空白だった場合、空白セルを0とみてはくれません。 そのため =MIN(A1*1,B1*1) と、1を乗ずることで空白セルを0にして比較できます。 しかしA1、B1セルの値が直接入力されたものでなく計算の結果の場合にはうまくいかない場合があります。 A1、B1ともに計算式がはいっているので空白はあり得ないのですが、計算結果で =”” と空白表示の場合、空白表示セルを0とみてはくれません。 しかし、空白表示セル(=””)に1を乗ずるとVALUEエラーになってしまいます。 やむを得ず、IF関数を使い =MIN(IF(A1="",0,A1),IF(B1="",0,B1)) と、無理やり=””を0にしているのですが、ほかになにか良い方法はないでしょうか? A1、B1の計算式を変えて=0とすればよいのでしょうが、元の計算式を変えずにやる方法があれば御教示ください。

  • エクセル2007 複数のワークシートの印刷について

    Excel2007を使っています。(2003も可) 複数のワークシートに 同一セルに作成したデータを 一枚の用紙に、コピペを使わず、プリントすることは可能でしょうか? (関数式に加え、セル結合等しています) データの内容としては、給料計算を作成しました。 個人の12ヶ月を、ワークシート内に作成しましたが 明細して使用するなら、月ごとで一枚の用紙に出力したいのですが・・・ 解る範囲で調べると、マクロを使用するとか・・・ マクロ自体使った事がないので 解説をみても、どこで作成したらいいのか 全く解りません(><) よろしくお願いします。

  • 関数 各条件により貼り付けるデータを変えたい

    二つのワークシートがあり、各条件により貼り付けるデータを変えたいのですが、IF文等の関数で可能でしょうか。 ワークシートW   A列    B列    C列    D列    E列   G列 1 倉庫   商品1   10円 2       商品2   50円 3 倉庫   商品3   20円 4       商品4   15円 5              17円 ワークシートY   A列     B列    C列 1 if関数(1)  if関数(2)  if関数(3) 2 if関数(4)  if関数(5)  - このデータで、以下のことをしたいのですが、可能でしょうか ワークシートWのA1とB1に文字がある場合、ワークシートYのA1をワークシートWのD1に貼り付ける ※これを同じ条件で、貼り付けるデータを「ワークシートWのE1にワークシートB1を貼り付け」、 「ワークシートWのG1にワークシートWのC1を貼り付け」をしたい また、ワークシートWのA1に文字がないが、B列に文字がある場合、ワークシートY2をワークシートWのD2に貼り付ける ※これを同じ条件で、貼り付けるデータを「ワークシートWのE2=ワークシートYのB2」、 「ワークシートWのG2にワークシートWのC2を貼り付け」をしたい なお、ワークシートYにはIF文が入力されています。 ご存知の方いらっしゃればお願いします。

  • 複数シート、複数条件でのSUMPRODUCT関数について

    こんにちわ。 SUMPRODUCT関数に挑戦していて上手くいかない点があるので教えていただけると助かります。 複数のシート(A,B,C)のそれぞれ同じセル範囲の中から、集計するシート内と一定条件に合致したものを抽出したいので、 =IF($A19=0,0,(SUMPRODUCT(($A19=A!$A$723:$A$769)*(A!$C$723:$AG$769))))+IF($A19=0,0,(SUMPRODUCT(($A19=B!$A$723:$A$769)*(B!$C$723:$AG$769))))+IF($A19=0,0,(SUMPRODUCT(($A19=C!$A$723:$A$769)*(C!$C$723:$AG$769)))) という式を作りました。3シート目位までは結果が正しく戻るのですが、途中でエラーが出てしまいます。全部で12シート分の条件にあったセルを合計したいのですが。 長すぎるのか、括弧のつけ方とかがあるのかと思うのですが、短くする方法がいまいちわからず困っています。 宜しくお願いします。

  • エクセルVBAでワークシート関数のようにしたい

     例えば、セルA1に日付を入力して、セルB1に関数WEEKDAYが入力されていると、すぐセルA1の値を返してくれますが、これと同じことをVBAで再現したいのですが、可能でしょうか?  マクロやVBAでWEEKDAYを記述しても、「ツール」→「マクロ」→「マクロ」か「VBA」でやらないとA1の値をB1に返せないので、A1に日付を入力した瞬間、B1に値を返したいのですが、よろしくお願いします。

  • EXCEL ワークシート間のデータ比較

    EXCELのワークシート間のデータ比較について教えて下さい。  A.XLSとBワークシート(新)とCワークシート(旧)の特定の列のデータを比較したいと思っています。  Bワークシート(新)とCワークシート(旧)の比較に関して Bワークシート(新)には、Cワークシート(旧)のデータと比較すると 一致するもの、追加されたもの、削除されたものが含まれています。  Bワークシート(新)の値をCワークシート(旧)の値を全て比較すると頭では分かっているのですが、関数のみの機能で対応できませんか?

  • Excel にて非表示行を探すワークシート関数

    ある膨大なデータをまとめた数百行からなる Excel ファイルがある のですが、その中で数箇所「非表示にされた行」があります。 その非表示行を探すワークシート関数って有りますでしょうか? (ワークシート関数が無理なら、マクロでも良いです。) ・非表示にされた行は1行だけの時もありますし、  2, 3 行をまとめて非表示にしている場合もあります。 ・Excel バージョンは 2003 です。 ・私の方で見つけた1つの方法として、以下の方法があります。   1. 適当な列に連続データで 1 から始まる番号を振る   2. それを適当なグラフにする   3. グラフの中で急に傾きが変化している所があれば、そこが非表示行である ・ただし、上記の方法ですと数十行なら視覚的に見つけやすいのですが  数百行、数千行の場合はグラフの中の傾きの変化が見つけづらいので NG ・一番理想的なのは画像の中の B4 (黄色いセル) のように、非表示行の1つ上の行に  "1" を表示し、かつ、それをワークシート関数で実現する事です。 ・Ctrl-A で全部のセルを選択し、適当な所で右クリックをして「再表示」とすれば  非表示行が表示される方法は既に知っております。  私が知りたいのは「非表示の状態で、非表示行の場所」を知りたいのです。 以上、よろしくお願いします。

  • エクセルのワークシート関数でA、B列不同数取得

    エクセルのワークシートA列とB列にデータがあります。 データは数値、文字列、空白です。エラー値はありません。 A列のセルと同じ行のB列のセルの値が同一でないA列データの個数(またばB列データの個数)を求めるワークシート関数はないでしょうか?(空白同士は同一とみなします。) C列などに作業列を作ってA、Bの比較をして求める方法はすぐに思いつきますが、作業列なしで求めたいのです。

  • エクセル:ワークシート関数、等比級数

    エクセルでの質問です。 セルA1に0から100未満の正の数が入っていて、 等比級数で、 =(1+A1/100)^0+(1+A1/100)^1+(1+A1/100)^2+(1+A1/100)^3 のような数式で、上の式では(1+A1/100)^N(例えばNがセルB1に入っていて、そこまで足す)ようなワークシート関数はないでしょうか?(もち、組み合わせで) 財務関数を転用して、できそうなきがしているのですが、うまくいきません。 他のページ:http://oshiete1.goo.ne.jp/qa1655468.htmlを、参考にすると、マクロを使うと出来るみたいなのですが、ワークシート関数の組み合わせだけでは無理なのでしょうか?

専門家に質問してみよう