- ベストアンサー
データの入力規則で条件が正しく動作しない理由
- データの入力規則で設定した条件が正しく動作しない理由は、数式の記述方法に問題があります。
- 最初に使用した数式(OR関数)では、18文字以上かつ36文字以下の文字列を正しいと判断してしまいます。
- 正しい動作を実現するには、AND関数を使用し、18文字以下かつ36文字以上の文字列を制限する必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
①の条件は =LENB(A1)<36 です。 ②の条件は =COUNTIF(A1,"*"&CHAR(10)&"*")=0 で良いでしょう。 ③の条件は =AND(①,②) でなければなりません。 論理演算の結果の TRUE を数値化すると 1 になり、 FALSE を数値化すると 0 になります。 OR関数は加算と等価で、AND関数は乗算と等価になります。 IF関数の論理式を複数の論理式を加算するとOR関数の結果と等価で乗算するとAND関数と等価です。 >①全角文字で18文字、半角文字で36文字以上の文字列が入力出来てしまう OR(LENB(A1)<=36,COUNTIF(A1,"*"&CHAR(10)&"*")=0) → OR(FALSE,TRUE) → TRUE ↓ 等価 (LENB(A1)<=36)+(COUNTIF(A1,"*"&CHAR(10)&"*")=0) → 1+0 → 1 (演算結果が0以外なのでTRUE) >②全角文字で18文字、半角文字で36文字以内でセル内改行が出来てしまう ①と同じ理由で演算結果はTRUEになります。(左右の項の結果が反転しているだけです) >③全角文字で18文字、半角文字で36文字以上でセル内改行が禁止される OR(LENB(A1)<=36,COUNTIF(A1,"*"&CHAR(10)&"*")=0) → OR(FALSE,FALSE) → FALSE ↓ 等価 (LENB(A1)<=36)+(COUNTIF(A1,"*"&CHAR(10)&"*")=0) → 0+0 → 0 (演算結果が0なのでFALSE) OR関数をAND関数に置き換えたときの状態をご自身で確認してください。 OR=加算、AND=乗算を忘れず。
その他の回答 (1)
- msMike
- ベストアンサー率20% (364/1804)
①の条件、 》 全角文字で18文字、半角文字で36文字以上の入力を制限する の意味は、入力文字数は全角18(半角36)文字未満を許可するでしょ? YESなら、「LENB(A1)<=36」は「LENB(A1)<36」とすべきです。 》 ①と②は各々個別に制限動作するようにする それホントですか?YESなら、 文字数が少なけりゃ、セル内改行があっても構わない、 セル内改行がなけりゃ、文字数が多くても構わない、 になりますよ! ①と②はORでなく、ANDでなきゃアカンのとチャイますか?
お礼
私が希望しておりました通りの明瞭・的確なご返答、ありがとうございます。 私の頭の中のもやもやとした霧がすっかり晴れました。 拙い質問にも関わらずご丁寧に説明していただき、感謝申し上げます。