質問: if関数の論理式が文字列?? 他人が作成したエクセル関数式を理解したいのですが、どう調べたものか手の付け所がわからず、質問をさせて頂きます。 関数は以下の様なものです(<xxx_yyy_10000>の部分はデフォルメしていますが、 xxx,yyy,1000はそれぞれもともと文字列と数字です)。 =if(or(a1="",a1xxx_yyy_10000-2,a1=xxx_yyy_10000,3,1))) どなたか詳しいかた、この関数の動作について簡単で結構ですのでご教示頂けないでしょうか。 特に、論理式が<xxx_yyy_10000-2>の様に文字列と数字が混じっており、何を条件としているのか見当つかず躓いています。 すごく頓珍漢な質問をしている様な気もするのですが宜しくお願い致します。
回答: 例えばexcelにおける半角大文字の"a"のコード番号は65ですね。 同様に半角大文字の"b"のコード番号は66ですね。 それでは次に適当なセルに次の様な関数を入力してみて下さい。 ="a"<"b" すると関数の結果が「true」(その式の関係が成り立つものである事を表す値)になる筈です。 同様に ="a">="b" という関数の結果は「false」(その式の関係が成り立たないものである事を表す値)になる筈です。 つまり、excelでは"a"という文字列よりも"b"という文字列の方が大きな値と見做されている訳です。 この様にexcelではコード番号が大きい文字の方が大きな値として扱われます。 例えば"aazz"という文字列と"ab"という文字列では、左から1番目にある文字のコード番号は同じですが、2番めにある文字のコード番号は"aazz"の方が65であるのに対し、"ab"の方は66ですので、"aazz"よりも"ab"の方が大きな値として扱われます。 尚、上記の話はあくまで一般的な目安であり、多少の例外は存在しています。 例えば、excelではアルファベットの大文字と小文字を同じ文字として扱っているため、半角大文字の"a"のコード番号が65で、半角小文字の"a"のコードが97であるにもかかわらず、 ="a"="a" の結果がtrueとなり、 ="a"<"a" や ="a">"a" はfalseとなります。 又、文字列データは数値よりも大きな値として扱われますから、例えば半角文字の"#"のコード番号は35で、半角文字の"1"のコード番号である49よりも小さな値ですが、 ="#">1 の右辺の「1」は文字列データではなく数値データであるため、その判定結果はtrueになります。 一方、 ="#">"1" の場合は、両辺ともに文字列データであるため、"#"よりも"1"の方が大きな値と見做されるため、結果はfalseとなります。 御質問の件も、例えばa1セルに xxy_yyy_10000 という文字列が入力されていた場合には、 a1<"xxx_yyy_10000-2" の右辺にある"xxx_yyy_10000-2"と比べて、"xxy_yyy_10000"の3文字目の方が大きく、それよりも前の部分である"xx"の部分は等しいため、"xxx_yyy_10000-2"よりもa1セルに入力されている"xxy_yyy_10000"の方が大きな値と見做されるため、判定式の結果はfalseとなるといった具合です。