• 締切済み

エクセルの論理演算について

A,Bが等しいかどうかの場合、A=B 真なら1 偽なら0 を返す AよりもBが大きいかどうか、 A<B 真なら1 偽なら0 を返す では質問ですが、A,Bが等しくないならば..はどのように記述するのでしょうか。A<>B, A><B, A.ne.B(←これはフォートラン) 今、必要なのは文字列の不一致なのですが。 また、1つ驚いたのですが、A>Bの比較の場合、A,Bのどちらかに数値としての大小比較できないもの(空白の文字、カンマなど)があると驚いたことに1を返すようです。論理演算の対象ではないと判断したら1を返すというのは確か基本なのかも知れませんが、常識からはかなり逸脱しています。ある行が無効となっており数値のところに全角のカンマみたいなものがあり、これを使って当然ゼロと評価すべきところを1と評価して集計してしまうということがありました。 エクセルは複雑に集計するような場合、相当習熟していないと大変大きな失敗を犯すことがあるようです。 以上、よろしくお願いします。

みんなの回答

  • shinkami
  • ベストアンサー率43% (179/411)
回答No.3

A<>Bです。<>が全角になっていませんか 文字列にも大小関係はあります。 汎用機とパソコンでは文字のコード体系がEBCDICコード,ASCIIコードと異なる為大小の順番が違ってきます。 ASCIIコード NULL<数値<記号<英字<全角文字 EBCDICコードの場合数値の位置が違っていたような? もしご存知なら提示願います

noname#79209
noname#79209
回答No.2

A≠Bは「A<>B」で表します。 計算式以前に、セルがどのような内容かは、表の設計段階で決めておくべきです。 しかし、外部からのデータなどではそうも行かない事もあるでしょう。 そのようなときは、 =IF(AND(ISNUMBER(A1),ISNUMBER(B1)),AとBの大小チェックなど,FALSE) といったようなトラップが必要になります。 状況によっては、 ISNUMBER(A1)*ISNUMBER(B1)でもAND(ISNUMBER(A1),ISNUMBER(B1))と等価に使えます。

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.1

Fortranを知っているのであれば説明は不要ですよね 関数で扱う場合 ・A<>B ・NOT(A=B) こんな記述ができます 集計ミスの件はどのような数式になっているのか分かりませんが  真=TRUE=1  偽=FALSE=0 というのが前提ですので、今一度 数式を見直してみましょう エラーの扱いなど、きっとどこかで TRUE と FALSE の扱いが逆になるような記述 またはゼロや空白以外のセルを数えるなどの記述をされているのではないかと思います

関連するQ&A

  • 論理演算の問題です

     AとBがあって、どちらかが真でどちらかが偽のとき、A・Bはなぜ0になるんですか? 存在しないということですか? ベン図を見てもAでなくBである部分は存在しています。

  • 論理演算について質問

    int a=1,b=0,c=0のとき a==1 && b==0 || (a==1 && b==0) の論理式あったとします 質問1:&&や||の論理演算子について、その『両側』にある2つの関係式を「1つ1つ評価」することにより論理演算する。この認識で正しいですか? 質問2:論理式 a==1 && b==0 || (a==1 && b==0)について、trueになるプロセスの認識は以下で正しいですか? (a==1 && b==0)のa==1を評価しtrue、次にb==0を評価しtrue。 よってこの論理式はtrue      ↓ a==1 && b==0 のa==1 を評価しtrue、b==0 を評価しtrue。 よってこの論理式はtrue      ↓ ||は、右の論理式((a==1 && b==0))がtrueで左の論理式(a==1 && b==0 )もtrueだから、論理式全体はtrueで確定しているので、評価を行わない。

    • ベストアンサー
    • Java
  • 論理演算、ビット演算

    C言語仕様上、真/偽は(Not0/0)であることは理解しています。また、処理順序から、論理演算とビット演算では評価対象の範囲が違うことも知っているつもりです。 その上で質問させていただきます。 お手数ですが、お解りになる方は教えていただけると助かります。 例えば、 i=0,j=0である場合 ( (i == 0) && (j == 0) )は真であると思いますが、 ( (i == 0) & (j == 0) )は規定されているでしょうか。 また、( (i == 0) | (j == 0) )は真となることが(理論上)保証されているように思えますが、問題ないでしょうか。 以上、よろしくお願いいたします。

  • 論理演算について教えて下さい。

    基本的な論理演算について教えて下さい。 例えば、変数aにTrueを、変数bにNullを代入し、 a and b をした場合、Nullになるのは、わかるんですが、 a or b をした場合、なんでTrueになるんですか? 又、変数aにFalseを、変数bにNullを代入し、 a or b をした場合、Nullになるのは、わかるんですが、 a and b をした場合、なんでFalseになるんですか? お願いです。教えて下さい。。。 理由がわかりません。。。。

  • 論理演算について

    Cを勉強中の者です。論理演算についてよくわからいことがあります。 以下のソースコードを実行し結果が真なら0001、偽なら0000が出力されるプログラムを作りました。 #include <stdio.h> int main(void) { unsigned short a = 0x1234; unsigned short b = 0xfafc; unsigned short c = 0xcdef; unsigned short x, y; x = a && b; y = b && c; printf("x=%04x\n", x); printf("y=%04x\n", y); return 0; } 結果はx=0001, y=0001となります。y=0001はbとcの文字列がそれぞれfとcをを持っているので演算による結果は納得できますが、x=0001はaとbの文字列には共通するものがないのになぜx=0000ではないのでしょうか? また0xが頭に付く表現は16進数だと強調するためにあるのですか? 説明に不足があればまた足しますのでよろしくお願いします。

  • 論理演算結果の表示について

    Cで論理演算をするプログラムを考えているのですが、少し行き詰ってしまいました。 例えば(A+B)*(A+B+C)を論理演算で考えた場合、答えはA+Bとなりますがどうすればこの結果を画面に表示させる事ができるのかが分からないのです。 ただ単に #include <stdio.h> int main(void) { int a,b,c,y ; a = 'A'; b = 'B'; c = 'C'; y = a|b & a|b|c; printf("%c\n",y); } としたら表示結果は「C」となってしまいますよね(文字を2進で計算しているからこの結果になるという事は理解しています)。 もしかしてif文を使用して総当り的に文字を調べていくしか方法がないのでしょうか?実際はもっと複雑な演算をプログラムに計算してもらいたいと考えているので、他に方法がないか考えているのですが… どうかよろしくお願い致します。

  • エクセル2003の集計で

    エクセル2003の集計で セルA列にコンマ区切りで数値が入っているのですが これをセルB列でで集計することってできますか? A列の数値の数はバラバラです このような感じです↓ A1 1,2,3 B1 6 A2 2,3 B2 5 A3 9,1,7 B3 17 よろしくお願いします

  • 論理演算子について

    ◎1----------------------------- int main(void) { int a=10,b=20; while(1){ if(a= =12 && b= =25){ break; } ++a; ++b; } return 0; } -------------------------------- ◎2------------------------------------------------------- #include<stdio.h> #include<ctype.h> int main(void) { char ss[256]="10%%'%shin(no((100!w**a'16&'shi&%$#n~|=~de)&64"; int dt,i=0; printf("右の文字列には言葉が隠れています: "); printf("%s\n",ss); puts(""); printf("1を入力すると言葉が分かります: "); scanf("%d",&dt); puts(""); while(dt!=1 && ss[i] !='\0'){ if( !isalnum(ss[i]) ){ ss[i]=' '; } ++i; } printf("%s\n",ss); puts(""); return 0; } ------------------------------------------------------------ 以上2つのプログラムにおいて疑問があります。 まず◎1のプログラムで、aが12、bが25になるという2つの条件を満たしたら、プログラムを終了させようと思ったのですが、条件を満たしても、ずっとデクリメントし続け終了しません。 「if(a= =12 && b= =25)」の部分を「if(a= =12 || b= =25)」とすれば、aが12になった時点で終了しました。 ◎1では「if(a= =12 && b= =25)」という条件が何故適用されないかという疑問があります。 次に、◎2ではdtが1になり、配列ssに格納されている文字列が、'\0'になるという2つの条件を満たしたら終了させようとしたのですが、1を入力すると、「ss[i]!='\0'」の条件が偽にもかかわらず、while文が一度も実行されませんでした。 そこで、1以外を入力すると、while文は実行されましたが、dtの条件が真になる事はないのに、ちゃんと終了しました。 プログラム◎1、◎2について何故こうのようになってしまうのか、教えていただければ嬉しいです。

  • perl 条件演算子 範囲演算子についてです

    演算子 条件演算子 条件演算子 ?: は条件式の値により、2者のうちのどちらかを選択します。 $a=($x<10)?10:20; 変数$aの値が$x<10という条件において、真であれば:左側の10を選び、偽であれば:右側の20を選ぶ。 $a=10; 変数$aに10を代入する。 $a==5?print "5です。\n":print "5ではありません。\n"; 条件式でaが5であれば:左側の print "5です。\n"を表示します。 条件式でaが5でなければ:右側の print "5ではありません。\n"を表示します。 $a==10?print "10です。\n":print "10ではありません。\n"; 条件式でaが10であれば:左側の "10です。\n" を表示します。 条件式でaが10でなければ:右側の "10ではありません。\n" を表示します。 範囲演算子 範囲演算子 .. は、左側の値から右側の値まで、1つずつ増やした値の集まりです。 値には、半角英数字の数値または文字列が指定できる。 print 3..5; 3 4 5 と表示する。 一応、訳を下に書いたのですが合っていますでしょうか。

  • エクセル関数 ISNUMBERについて

    こんにちは。 ISNUMBER と IF関数を用いてセルに"真"か "偽"を表示させたいのですが・・・ 例えば、セルに特定の数値が入力されれば“真”を表示する。ということです。 どうやら、数字の「1」は「10」「12」なども 「1」が含まれていると認識するようで、困っています。 また、他のセルの関数を参照していることからどのような式を組めばよいのか分かりません。 詳しく説明すると以下のようになります。 (( ))はセルに入力されている関数です。        A         B         C 1    2009/01/20   2      1    (( =MONTH(A1) )) 3     4、10月    (( 文字列  )) 4     真    (( = IF(ISNUMBER(SEARCH(A1,A3)),"真", "偽") )) A1 シリアル値で入力された日付 A2 その日付より“月”だけ取り出して表示 A3 真か偽かを判断する為の基本となるデータを入力 A4  ISNUMBER関数 → A2の数値がA3に含まれていれば“真”をそうでないらな“偽”を表示する。 上記のように 1 は 10月 とは異なるので“偽”としたいのですが、10月の 10 の 1 を読み取ってしまうようで “真”と なってしまいます。 11月、12月 等も 1、2、と 読み取ってしまうようで・・・・ 1は 1月のみ“真”と表示。 2は2月のみ“真”と表示。というようにするにはどうしたら良いのでしょうか? 宜しくお願いします。

専門家に質問してみよう