Excel配列計算についての疑問と解決方法

このQ&Aのポイント
  • Excelの配列計算について疑問があります。求めたい人数を計算する際に、なぜ「<>0」をつけると正しい結果が得られるのか疑問です。
  • 配列計算で求めたい人数を計算する際に、「<>0(0以外の条件)」をつけることで、重複カウントを回避することができます。
  • 「<>0」をつけることで、男性かつ東京在住の人を一度だけカウントすることができます。これにより、正しい結果が得られます。
回答を見る
  • ベストアンサー

Excelで使われる「配列計算」について

こんばんは。 Excelの配列計算について、1から勉強していました。 すると、非常にわかりやすい説明↓ http://home.att.ne.jp/zeta/gen/excel/c01p09.htm を見つけ、読み進めていたのですが…とある箇所で「えっ?」と、わからなくなってしまいました(>_<) リンク先の解説を読み進めていくと、 ・ ・ 人数を求める場合、 {=SUM(((B2:B6="男")+(C2:C6="東京")<>0)*1)} ・ ・ ・ 人数を求める場合は工夫が必要です。 男性かつ東京在住の場合、TRUE+TRUEで2を返してしまうので、人数が二人とカウントされてしまいます。 そこで、<>0(0以外)の条件をつけ再度、TRUE・FALSEの判定をしています。 ・ ・ ・ とありますが、なぜ「<>0」をつけると、計算がうまくいくのでしょうか? 敢えて「<>0」を取り除き、 {=SUM(((B2:B6="男")+(C2:C6="東京"))*1)} のように計算してみると、求めたい人数は「男、または東京に住んでいる人」なのに、「男かつ東京在住」の人を、二重カウントしてしまって、結果が「6」と出てしまいます。(正しくは「4」ですが・・・) 「<>0(0以外)」とは、なぜ必要で、どういう意味を持っているのでしょうか?

  • dj-s
  • お礼率81% (228/280)

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

  • ベストアンサー
回答No.3

添付図の下表は論理計算になります 論理値にはTRUE、FALSEの2値しかありません つまり、0か1しかないのです。 上図 TRUE+TRUE は2になってしまうので そのまま計算に使用するには不都合です。 よって、リンク先の説明ではIF関数を使用したり、 <>0にすることで 男または東京である人の数を数えています

dj-s
質問者

お礼

何度もご回答いただきすいません(>_<) なんとなくわかりました。 「<>」が比較演算子↓ http://www.kentei.ne.jp/quali/column/knowhow/030815/030815.html と呼ばれるものだということ、そしてこの「<>(等しくない)」という比較演算子を用いることで、複数のデータを比較してTRUEとFALSEに収斂させることができるということ、さらにこれらに算術演算子を加える =TRUE*1 → 1 =TRUE+1 → 2 =FALSE*1 → 0 =FALSE+1 → 1 と、数値を導き出せるということ等、CoalTarさんのおかげで大分理解できました。 本当にありがとうございます<m(__)m>

その他の回答 (2)

回答No.2

>求めたい人数は「男、または東京に住んでいる人」なのに、「男かつ東京在住」の人を、 の部分が理解できていないのかなぁと感じました =(B2="男")+(C2="東京") で「または」の条件が出来上がります。 ただし、そのまま計算したのでは結果が2となります。 結果としては1が欲しいのです。 よって =((B2="男")+(C2="東京"))<>0 としTRUEを返すことにより、結果の1を導き出します。 >その2を避けるというのであれば、 ><>2(2以外) では0も含みますので、「男かつ東京」でない人の数になります ◆“達人”芳坂和行氏に学ぶ、エクセル(Excel)「配列数式」講座 http://pc.nikkeibp.co.jp/pc21/special/hr/ を先に理解したほうがいいかも。 ちなみに、計算速度は作業列を使ったほうが速いです。

dj-s
質問者

お礼

再度ご回答いただき本当にありがとうございます(>_<) リンク先とCoalTarさんの回答を読ませていただき、少し理解できました。「男または東京在住」という結果は、論理演算の「1」に相当するんですね。 OR条件(論理値の和) TRUE TRUE 2 TRUE FALSE 1 FALSE TRUE 1 FALSE FALSE 0 という条件に当てはめると、上から「男かつ東京在住」「男または東京在住」「男または東京在住」「男でも東京在住でもない」と解釈できました。 しかし、「<>0(0以外)」であるならば、 TRUE TRUE 2 TRUE FALSE 1 FALSE TRUE 1 の3つが残ることになり、除かれるべき「男かつ東京在住」の値「2」が、残ってしまうと思うのですが・・・ CoalTarさんが最初に回答したくださったように、1+1=1 (論理演算)であるならば、「男かつ東京在住(TRUE+TRUE)」も、1として扱えるような気がします・・・もしかすると、「<>0」という記号を付ければ、何でも0と1の論理演算のデータとして、扱えることができるものなのでしょうか? 本当に理解力が乏しくてすいません。 お暇な時で構いませんので、ご回答いただければ幸いです(>_<)

回答No.1

簡単に言うと =(B2="男")+(C2="東京") の計算結果が2になってしまうから です 1+1=1 (論理演算)で会って欲しいので =((B2="男")+(C2="東京"))<>0 が True となり =(((B2="男")+(C2="東京"))<>0)*1 が 1 となるのです もう少し先を読めば解説がありますね

dj-s
質問者

お礼

返信遅くなってすいません(>_<) もう1度じっくり読んでみると、「0以外=FALSE+FALSE以外」という記述を見つけました。しかし「TRUE+TRUEで2を返してしまう」という記述もあり、その2を避けるというのであれば、 <>2(2以外) とするべきではないでしょうか?

関連するQ&A

  • エクセルで計算できない・・・

    初歩的な質問で申し訳ありませんが、困っておりますので教えて下さい。 エクセルで、計算式がフィルハンドルで効かなくなりました。 例えば、セルA1に「1」、セルA2に「2」、セルA3に「3」と入力し セルB1に「4」、セルB2に「5」、セルB3に「6」と入力します。 次にセルC1に「=SUM(A1:B1)」の計算式を入れると「5」と計算されますが、その後セルC1からセルC3までフィルハンドルを使うとセルC2、セルC3にも同じ計算がされて、セルC2「7」、セルC3「9」となるはずですが…セルC2、セルC3とも、セルC1と同じ「5」になってしまいます。 その場合も、セルC2には「=SUM(A2:B2)」、セルC3には「=SUM(A3:B3)」と、求めたい計算式は入っています。 今まで何ともなく使っていたエクセルのファイルがおかしいのです。 新規作成したエクセルファイルは何ともありません。 なぜこのような症状が出るのでしょう? 未熟者ですので解り易く教えていただけると助かります。 宜しくお願いいたします。

  • エクセルの配列

    エクセルの配列を使用しての関数がうまく出来なくて困っています。    A   B  C 1  1  1  東京都墨田区 2  1  1  東京都神奈川区 3  1  2  東京都杉並区 4  1  2  神奈川県横浜市 5  1  3  神奈川県川崎市 6  1  3  東京都多摩市 7  2  1  岩手県 8  2  1  大阪府 9  3  2  兵庫県 10  3  2  京都府 と並んでいます。 ここでA列=1 且つ B列=1又はB列=2 且つ C列が"東京都"という文字を含んでいる の総計を計算したいのですが(上の状態ならば「3」) {=SUM(SUMPRODUCT(IF(A1:A10=1,1,0))*(IF(OR(B1:B10=1,B1:B10=2),1,0))*(ISNUMBER(FIND("東京都",C$1:C10))))} と関数を入れても正しい値が出ません。どこがおかしいのでしょうか? 作業列を使わずに求めたいです。 どなたかご教授宜しくお願いします。

  • 配列のサイズが明示的でない計算について

    Fortranを例にとった場合、 行列A,Bの積Cを計算する場合、例えば以下のようなループで計算していました。(Fortran77) do i=1,10 do j=1,10 sum=0.0 do m=1,10 sum=sum+a(i,m)*b(m,j) enddo c(i,j)=sum enddo enddo それが今では、以下1行です。(Fortran95) c=matmul(a,b) 配列1つ1つの成分について計算する必要がないと言えそうです。Pythonなんかは全部こういう思想ですね。 プログラム言語はすべてこういう方向に進んでいるように思えます。 これがやや不安に思えるところがあります。配列のサイズを指定していないのでどこまで使って計算しているかわからないからです。 古い方(上段)では配列のサイズや上限を指定しているので、指定しているところより先がどうなっていてもとりあえず被害はありません。 しかし、サイズについてのケアがないと思いがけないような計算をしてくるんじゃないかと思うのですが。計算のバグ取のときここ大丈夫かな?となって疑心暗鬼ということにならないかと思うのですが。 配列の最大値なども関数1つと言う感じですが、どこまでの範囲での最大なの?と聞きたくなるわけですが。 いかがでしょうか。

  • エクセルで計算結果がおかしい

    エクセル2002で生産管理をやっています。おかしな計算結果が出ます。生産管理データそのままでなく、関係ない部分は省略した構成にして相談します。 1.入力データと計算式 A1:2305.6    A3:SUM(A1:A2) B1: 334.1   B3:SUM(B1:B2) C1: 41.4   C3:SUM(C1:C2) D1:  3.3   D3:SUM(D1:D2) D4:A3+B3+C3+D3=2684.4 D5:D4-A1-B1-C1-D1=0.0 D6:(A3+B3-A1-B1)/D5=-0.7 2.おかしいところ D6は、0÷0=エラー になるはずですが、-0.7になります。    

  • Excelで歩合給の計算をしたいのですが

    Excelで歩合給の計算をしたいのですが、どのような関数を使えばいいかわかりません。 以下のような計算をしたいと思っています。 売上商品が1点につき、1点(1カウント)として、以前は5カウントごとに、500円付けてました。  5カウント 500円 10カウント 1000円 15カウント 1500円 というふうに5カウントごとにエンドレスでつく関数を組んでました。 以下、その時の数式です。 =((SUM(K6:M6)*((INT((IF(ISBLANK(B6),0,VLOOKUP(B6,$AA$3:$AH$202,8,FALSE)))/5))))*500) ※(K6:M6)の部分は商品の種類 ※(B6)の部分は人の名前 ※(B6,$AA$3:$AH$202,8,FALSE)の部分は各データ人の名前とか これを、今後は10カウントからスタートで、5カウントごとに500円アップにしたいのですが、どう繋げていいのかわかりません>< カウント9までは、0 カウント10~14が、500 カウント15~19が、1000 カウント20~24が、1500 というように、5カウントごとに、500 UPにしたいんですが。 うまくいきません。 分かりずらいとは思いますが、よろしくお願いします。

  • Excelで歩合給の計算をしたいのですが

    Excelで歩合給の計算をしたいのですが Excelで歩合給の計算をしたいのですが、どのような関数を使えばいいかわかりません。 以下のような計算をしたいと思っています。 売上商品が1点につき、1点(1カウント)として、以前は5カウントごとに、500円付けてました。  5カウント 500円 10カウント 1000円 15カウント 1500円 というふうに5カウントごとにエンドレスでつく関数を組んでました。 以下、その時の数式です。 =((SUM(K6:M6)*((INT((IF(ISBLANK(B6),0,VLOOKUP(B6,$AA$3:$AH$202,8,FALSE)))/5))))*500) ※(K6:M6)の部分は商品の種類 ※(B6)の部分は人の名前 ※(B6,$AA$3:$AH$202,8,FALSE)の部分は各データ人の名前とか これを、今後は10カウントからスタートで、5カウントごとに500円アップにしたいのですが、どう繋げていいのかわかりません>< 10カウント  500円 15カウント 1000円 20カウント 1500円というふうに5カウントごとにエンドレスでアップする数式が知りたいです。 分かりずらいとは思いますが、よろしくお願いします。

  • エクセル:次のような計算式(関数)を教えてください。

    ★(表1)のような男女ソートされていない名簿があります。そこで、 ★(表2)のような「人数をカウントする計算式」を作りたいのです。私の知識でもなんとかできそうなのですが、ものすごく複雑かつ、長くなってしまいます。 きっとシンプルな計算式で解決すると思い、ご指導お願い申しあげます。とりいそぎ、セルAB2,AC2,AB3,AC3の4つの式を教えていただけないでしょうか?よろしくお願いいたします。 ★(表1)    A       B     C 1 (氏名)   (性別) (年齢) 2 山田太郎   男   92 3 川海花子   女   78 4 山田次郎   男   65 5 空田三郎   男   81 6 川村五郎   男   71 7 川村花恵   女   68 8 鈴木鈴子   女   102  ・・・以下約150人 ★(表2)   AA      AB      AC 1 年齢   男(人数)   女(人数) 2 60~64 3 65~69 4 70~74 5 75~79 6 79~84 7 85~89 8 90~94 9 94~100

  • エクセル2003 計算されないようにしたい

    例 A列     B列  1     =A1+A2  2     =A2+A3  3     =A3+A4 (A4は空白です) となっている場合に B1=3 B2=5 B3=3 になると思うんですが この時に空白のセルと計算結果を出すときは0もしくは 計算されないようにしたいです。 最終的にB列にSUM関数を使って合計を出したいのですが A列に求めたい数字が片方しか入ってない場合 (数字が入っているセル+空白セル)はSUM関数の合計に入れたくないです。 なので上記の例では B列にSUM関数をした場合11ではなく8にしたいです。 それには文字列を入力して#VALUE!にするしかないですか? でもその状態にしてSUM関数で合計を出したときも#VALUE!になってしまいます。 よろしくお願いします。

  • Excelの計算式内の文字列の一括置換は出来ますか

     Excelで、計算式の命令内の文字列を置換する方法はあるでしょうか。例えば、あるワークシートのセルで別のファイルやワークシートのセルを参照して計算している時、ほとんど同じ計算式で参照先だけを変えたい場合です。計算結果のワークシートのA列で、  A1=sum('G:\北海道'!A1:A100)  A2=sum('G:\北海道'!B1:B100)  A3=sum('G:\北海道'!C1:C100)・・・ となっているとします。つまり、北海道.xlsというシートの1から100までの列範囲の和を計算しているとして、B列には同様の青森県.xlsからの同じセル範囲の同じ計算、C列には岩手県.xlsからの同じ計算、D列には・・・というように、計算式が全く同様で、参照元のファイル名だけを変えたい場合です。  もう一つ、類似のものとして、計算結果のワークシートで、  A2=sum('G:\北海道'!B1:B100)  A3=sum('G:\北海道'!C1:C100)  A4=sum('G:\北海道'!D1:D100)・・・・ というように、計算式内の行や列を表す記号や数値を置換することは可能でしょうか。  同じような作業は出来るだけ簡単な操作でできる、というのが良いソフトのイメージなのですが、私が現在知る範囲では1つ1つ式を書き換えています。特にリンク貼り付けでやると、計算結果のワークシートでうまくコピーができません(上記では、北海道をB1で青森県に変えておいてそれをB2以下にコピーすると上手く行かない)。  宜しくお願い致します。

  • Excelの関数を簡素化する方法(質問1・2)

    Excelの関数で質問があります。できるだけ一つのセルに計算をまとめたいのですが、 ■質問1:データの最も優勢な値をカウントする計算 例えば、下のようなデータがあったとします。(a~cはデータ項目。1~5はデータ番号。)   a  b   c 1 50 100  84 2 37 11   56 3 64 39   61 4 87 47   70 5 73 71   44 同じデータ番号の系列で、a~cの中で最も高い数値をカウント「1」とします。それ以外は「0」とします。 例えば、aの1・bの1・cの1、の中の最高値という具合です。 そして、最終的に「同じデータ項目の最高値のカウント数/データ番号のトータルカウント数」の値を計算します。 例えばaの場合、「同じデータ項目の最高値のカウント数」は、データ番号の3、4、5が最高値なので「3」となり、「データ番号のトータルカウント数」はデータ番号が5個あるので「5」となり、「3/5」となります。 このような計算を一つのセルにする関数はあるでしょうか? 今は、最高値のカウント数を計算するセル、 「=IF(MAX(a1:c1)=a1,1,0)」 「同じデータ項目の最高値のカウント数/データ番号のトータルカウント数」を計算するセル、 「=SUM(a1:a5)/COUNT(a1:a5)」 に分かれています。(ここでいう「a1」「c1」「a5」とは例にあるデータ項目とデータ番号のことです。) ■質問2:あるデータ区間に当てはまるデータをカウントする計算 例えば、例のa1を30~70に当てはまった場合、「1」とし、それ以外を「0」とする計算なんですが、今は 「=IF(30<=a1,IF(a1<=70,1,0),0)」 という関数を使っていますが、これ以上簡単にできませんか? 回答よろしくお願いします。

専門家に質問してみよう