- ベストアンサー
IF関数の論理式での文字の扱いは?
ExcelのIF関数なのですが、 ---------------------------- A1 → 6 A2 → 辞職 A3 → 3 ---------------------------- というデータが入っており、5以上なら○、それ以外は×と表示をしたいと思い、 =IF(A1>=5,"○","×") と入力した結果、 ---------------------------- A1 → 6 ・・・○ A2 → 辞職 ・・・○ A3 → 3 ・・・× ---------------------------- という具合に、「辞職」が○になってしまうのですが、これはなぜですか? ちなみに、 =IF(A1<5,"×","○") でもやってみたのですが結果は同じ。 数値よりも大きいと判断するようです・・・。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。maruru01です。 「5」というのは、数値としての「5」と文字としての「5」の両方があります。 =IF(A1>=5,"○","×") という書き方の場合は、数値の「5」との比較ということになります。 文字の「5」との比較の場合は、 =IF(A1>="5","○","×") という風に、文字であることを示すために「"」で括ります。 そして、これらの大小関係は、 数値データ<文字データ 数値データどうしは、単純な大小 文字データどうしは、先頭文字から、文字コードによる大小 になります。(そういう仕様です。) 一方、セルの内容ですが、おそらく、A1とA3は数値(表示形式が「標準」か「数値」)になっており、A2は当然文字ですので、質問のような結果になります。 ちなみに、数式を、 =IF(A1>="5","○","×") にすると、A1(6)も"×"になります。 それは、A1が数値データで、比較するのが「"5"」という文字だからです。 逆に、A1~A3のセルの表示形式を「文字列」にして、あらためて、A1に「6」、A3に「3」と入力し直すと、元の数式、 =IF(A1>=5,"○","×") の結果は、A1~A3全て"○"になります。 (セルは全て、文字データで、比較するのが「5」という数値だから) もっとも、A2の「辞職」(の先頭文字「辞」)の文字コードは、文字の「0」~「9」よりも大きいので、どちらにしても、"○"になりますが。 (文字コードは、=CODE(A1)で確認出来ます。) なお、これらの大小関係は、セルの並べ替えでも確認出来ます。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
(1)数値データ<文字データ (2)数値データどうしは、単純な大小 (3)文字データどうしは、先頭文字から、文字コードによる大小と ご説明があります。理解方法・記憶方法としてはこれで良いと思いますが、エクセルと言うことを離れると比較や大小ルールは1つになってしまい、2つのデータを比べて左よりの対応ビットを比べてのOFF・ONが大小を決めるものになります。文字列も数値も区別がなくなる場面に行き着きます。しかし言語や表計算ソフト作成者がその気になれば、文字列と数値データの比較をエラーにしたり、一方に変換したり(数字の場合のみ)して比較するも出来ます。 しかし文字列には長さの要素があり、数も高等言語や処理ソフトでは精度(長さ)が複数あるの問題があり、各ソフトの数のメモリー上の表現形式(注)を知らないと本当の様子を理解できないでしょう。しかし同じ文字列や数値タイプの中では左よりの対応ビットのOFF・ONが大小を決めるものになるはずです。どう設計するにしろ、上記(2)は絶対そうなるようにしないと、使えませんから。(注)文字列は文字コードで表現されるのは確実です。数値は2進数ではないかと思います。パック10進数というのも経験しましたし、先頭ビットがオンを負の数の印に使っていたりで、バリエーションがあって、コンピュター基礎論・設計論と係わり奥が深いですよ。
お礼
根本的なところのご説明、大変勉強になりました。 ありがとうございました。
- shishishishi
- ベストアンサー率39% (362/921)
なるほど! maruru01さんのわかりやすい解説でわたしも勉強になりました。 それで対処方法ですが、 =IF(ISNUMBER(A1),IF(A1<5,"×","○"),"") とすれば、数値以外のデータは無視されます。
お礼
対処方法まで考えていただき、ありがとうございました。 参考になりました。
お礼
ありがとうございました!! "(文字コードは、=CODE(A1)で確認出来ます。) " これは初めて知りました。結構カンドーしました。。。