『自動入力について』(こまったさん) おはようございます。 製品の受注表を作成しています。 そこで入力漏れがないように2つの条件に当てはまる時に自動で文字を入力させたいのですが・・・ [A] [B] [C] [1] 8月受注状況 [2] タイプ メタル アーム [3] 026SH B 600 [4] 36 800 [5] 26 500 [6] 026S B 650 [7] 26/D B 850 ・ ・ このような表でA列のタイプに26がありC列のアームの長さが600以上の時にB列のメタルに自動でBと入力させたいのですが、どうすればいいのかわかりません。 IF関数でサンプルを探してみたのですが、2つの条件を満たすのがわかりませんでした。 よろしくお願いします。 ---- ? 表示がずれましたね? 最初のレイアウトだと、B3に =IF(COUNT(FIND(26,A3))*(C3>=600),"B","") としてフィルドラッグ。 >2つの条件を満たすのがわかりませんでした。 と言う事ですが 単独での条件式を既に作って居られるのでしたら ご提示下さい。 特に「A列のタイプに26がある」の方。 (HANA) ---- > 表示がずれましたね? 表示を修正しました。申し訳ありません ---- (HANA)さん 早速のご回答ありがとうございます。 また、表の修正ありがとうがざいます。 単独の条件式はこちらのサイトでIF関数についての過去のログを参照して B3のセルに=IF(A3="026SH","B")から26だけを条件にするには =IF(A3="*26*","B")とか=IF(A3=" 26 ","B")とスペースを入れてみたりと・・・・ まったくの初心者で数式の基本を全く理解出来ていません・・・ この程度ですがよろしいでしょうか・・・。 (こまったさん) ---- 表の修正をしたのは私では有りませんので >表の修正ありがとうがざいます。 は、 >(HANA)さん の前に書いていただければと思います。 数式の基本は大切なので、理解して下さるのが良いと思います。 特に今回のIF関数は、かなり基本的な数式に分類されます。 IF関数は IF(論理式,真の場合,偽の場合) の様に書きます。 とても単純な関数ですが「論理式」の部分をどの様にするか と言う点で、難しい数式でもあります。 (実質的に、論理式の作成が難しい という場合も有りますし  同じ結果を導くいくつかの方法が有る という場合も有るためです。) 今回「真の場合」は「B」を表示するので 悩むことなく「"B"」とすれば良いですね。 偽の場合は、設定しない場合は FALSE と表示されて仕舞いますので そんなときは「""」長さ0の文字列 を表示する事にする場合が多いです。 さて問題は、論理式の部分です。 一つずつ考えます。 >C列のアームの長さが600以上 これは、C3>=600 で判定出来るのは分かりますよね? >A列のタイプに26があり こういった時は、 FIND,COUNTIF,SUBSTITUTE関数などと組み合わせて 判定する事が多いです。 その内、今回は FIND関数を使用しました。 D3セルに =FIND(26,A3) E3セルに =COUNT(D3) を入れてフィルドラッグし COUNT(FIND(26,A3)) の部分がどの様にして どの様な結果が得られているか確認して下さい。 また、 F3セルに =C3>=600 G3セルに =E3*F3 H3セルに =IF(G3,"B","") の式を入れてフィルドラッグしたものと 先ほどの数式 B3セルに =IF(COUNT(FIND(26,A3))*(C3>=600),"B","") の結果とも見比べながら 理解を深めていただければと思います。 論理式部分に「0」が入った場合は「偽の場合」 0以外の値が入った場合は「真の場合」へ 分岐します。 [A] [B] [C] [D] [E] [F] [G] [H] [1] 8月受注 状況  FIND  COUNT  C3 [2] タイプ メタル アーム ↓(26,A3) ↓(D3) ↓>=600 ↓E3*F3 ↓IF(G3,"B","") [3] 026SH B 600 2 1 TRUE 1 B [4] 36 800 #VALUE! 0 TRUE 0 [5] 26 500 1 1 FALSE 0 [6] 026S B 650 2 1 TRUE 1 B [7] 26/D B 850 1 1 TRUE 1 B (HANA) ---- 表の修正は(HANA)さんでは無かったのですね・・・ どなたかわかりませんがありがとうございました_(._.)_ 今回のIF関数につきまして、本当に細かくまた関数式の構成を説明して頂きありがとうございました。 これまで全く式の構成が理解出来ずサンプルの式からセルを置き換えてなんとか求めたい値を導いていましたが、これからは少しづつ式の構成を学んで行くように致します。 本当にありがとうございました。 今回ご指南いただいた関数式でひとつ問題がありました。 アームの長さで注文時には未定の場合があり、その時に?を入力しています。 この?の時にはBと表示させないようにするには・・・ アームのサイズの最大は900までです。 =IF(COUNT(FIND(26,A3))*(C3>=600),"B","")の式の(C3>=600)を(900=>C3>=600)とすれば・・ダメでした (こまったさん) ---- > アームの長さで注文時には未定の場合があり、その時に?を入力しています。この?の時にはBと表示させないようにする =IF(AND(C3<>"?",COUNT(FIND(26,A3))*(C3>=600)),"B","") では? ?は、全角半角混在であれば、JIS(C3)<>"?" か、ASC(C3")<>"?" としてください。 (とおりすがり) ---- (とおりすがり)さん 先ほどの式を入力ましたがうまくBが入力されず、そのことを書き込みしている間に式が変わっていました。 ?は半角で入力しています。 =IF(AND(JIS(C3)<>"?",COUNT(FIND(26,A3))*(C3>=600)),"B","")で出来ました。 ありがとうございました。 もうひとつお願いがあります。 アームの長さが600以上900以下の時だけBと入力させるにはどうすればいいのでしょうか? よろしくお願いいたします。 (こまったさん) ---- > アームの長さが600以上900以下の時だけBと よくわかりませんが、 AND(JIS(C3)<>"?", の部分を AND(C3>=600,C3<=900, とすれば、いかがですか? ?や?は、この条件に一致しなくなりますので、JIS(C3)<>"?" は必要なくなると思います。 ちなみに、以上、超、以下、未満の区分はきちんと理解されていますよね? (とおりすがり) ---- アームの長さが900以下 を判定する条件式は分かりますか? I3セルに入れてフィルドラッグしてみて下さい。 ワークシート上では、TRUE=1 FALSE=0 として扱われます。 G列が「0」の時に、FALSE扱いになり 「偽の場合」に分岐しましたね? また、5行目のように 1*FALSE = 0 と成りましたね? I列の条件も含めた時、G列の式を どの様に変更すればよいか分かりますか? 現在「1」と成っている行でも、I列が「0」なら「0」に成るようにしたいですね。 (HANA) ---- (とおりすがり)さん アームには400から900までの長さがあります。 また、50mm刻みに長くなっていきます。 今回自動入力でBと入力させたい条件といましては、製品のタイプに"26"という値があり、 さらにアームの長さが600mm以上の時はBという部品を使います。 いままではB3のセルにはタイプとアームの長さを確認して手動でBと入力していました。 (HANA)さんからご回答頂いた数式でアームに対しての条件は、600以上の数値として扱っていると思っていたので?マークのような文字(わたしは文字と判断しているのですが)は600以上の条件には当てはまらないと思っていました。 はじめに、アームの項目に?を書いておき?に対してはどうしたいのかを明記しておればよかったと反省しております。 ながながとご質問されたことと関係ないことを書いてしまいました。 >ちなみに、以上、超、以下、未満の区分はきちんと理解されていますよね? ですが、 600以上は600を含む大きな値で、超えるは600を含まない大きな値。 600以下は600を含む小さな値で、未満は600を含まない小さな値。 と認識しています。 ---- (HANA)さんのご質問に対してですが、 ご指導いただきました事から、I3にはC3<=900だと思います。 G列の式ですが、頭が混乱して来ました。。。 頭の中を整理してG列の式を導きだせるように頑張ります。 今少し時間を下さい。 (こまったさん) ---- > アームに対しての条件は、600以上の数値として扱っていると思っていたので?マークのような文字 > (わたしは文字と判断しているのですが)は600以上の条件には当てはまらないと思っていました。 やっぱりよくわからないのですが、 =IF(AND(C3>=600,C3<=900,COUNT(FIND(26,A3))*(C3>=600)),"B","") という数式で、?や?は空白で、600以上、900以下で条件が当てはまるとき"B"と表示されませんか? せっかく提示しているのですから、まずは、試してみた結果を教えていただけるとありがたいのですが。 このままでは、できていないのか、できているのかがわかりません。 なお、以上、超、以下、未満の区分の理解は合っています。失礼しました。 (とおりすがり) ---- (とおりすがり)さん すみませんでした。 =IF(AND(C3>=600,C3<=900,COUNT(FIND(26,A3))*(C3>=600)),"B","") のこの式でアームの長さが600以上900以下でタイプが26の時にBを自動入力させることが出来ました。 (HANA)さんへの回答と(とおりすがり)さんへの回答であたふたしていました。。。。 テキパキと出来ず申し訳ありません。。。 (こまったさん) ---- ゆっくりで良いですので 私はコメントをお待ちします。 既に書いていますが TRUE = 1 , FALSE = 0 として扱われます。 また、 1 * 1 = 1 1 * 0 = 0 0 * 0 = 0 ですね? >I3にはC3<=900だと思います。 これで合っていますので、後は TRUEと表示されたセルには「1」 FALSEと表示されたセルには「0」 が入っていると思って G3の =E3*F3 をどの様に変更すれば良いのか 考えてみて下さい。 (HANA) ---- この書き込みをしている間に(HANA)さんの書き込みがありましたが書き込みします。 (HANA)さんからの以下の課題で >アームの長さが900以下 を判定する条件式は分かりますか? =C3<=900でしょうか? >I3セルに入れてフィルドラッグしてみて下さい。 I3からI7までがTRUEとなりました。 >ワークシート上では、TRUE=1 FALSE=0 として扱われます。 >G列が「0」の時に、FALSE扱いになり 「偽の場合」に分岐しましたね? G列が「0」の時にI列にFALSEと表示されるということでしょうか・・・ ここでつまずいています・・・ (こまったさん) ---- 現在出来ているH列までの式は 新しいI列の判定結果は反映されていませんね。 IF関数を作る際に一番に考えるのは 各セルに入力されているデータを使って  条件が整った時に、TRUE(或いは0以外の値)  整っていない時に、FALSE(或いは0) に成るような条件式を作ることです。 >> G列が「0」の時に、FALSE扱いになり 「偽の場合」に分岐しましたね? H列の結果を見て下さい。 G列が「0」の時は「偽の場合」に設定してある「""」が G列が0以外の値(「1」の時)は「真の場合」に設定してある「"B"」が 表示されていますね。 いま、やってもらおうとしているのは  G列が「1」と成っているセルでも  I列が「FALSE」と成っていた場合  「0」に成るように、  G列に入っている数式を変更する という事です。 G列が「0」に成れば 自然とH列が「""」に成ります。 E列が「1」F列が「TRUE」の時 現在、G列には =E3*F3 の式が入っているので 1 * TRUE(1) = 1 と成っています。 でも、もう一つ条件を増やして I列がFALSE(0)の時は、G列も 0 になって欲しいのです。 =E3*F3 に、I3の結果を付加するのです。 どの様に追加すれば良いのか分かりますか? (HANA) ---- (HANA)さん いま私が理解できているところを説明させて下さい。 D列の=FIND(26,A3)はA3のセルに26の値があるか無いかの振り分けをする式です。 (2か1かの違いは分かりません) E列の=COUNT(D3)はD3のセルに数値が入っている数を数えています。 F列の=C3>=600はアームの長さが600以上を判定し600以上であればTRUE、そうでなければFALSEになります。 G列のE3*F3はD3でタイプに26が含まれる数を求めてた値1にF列の600以上はTRUE=1を掛けて(1*1)G3は1となります。 H列の=IF(G3,"B","")はG列の値が0もしくは空白以外の時にBを入れる。 という式だと思っています。ここまでですでに間違いがあるでしょうか? 次に、I列のアームが900以下を求める式ですが、これは=C3<=900でした。 このI列にH列までの式を反映させるというところが分かりません。 反映させるというのはI3=C3<=900*G3ということでしょうか? (こまったさん) ---- >ここまでですでに間違いがあるでしょうか? いいえ、合っています。 強いて書いておくなら >E列の=COUNT(D3)はD3のセルに数値が入っている数を数えています。 数えているのですが、エラー値を「0」それ以外を「1」に変換するのが目的です。 全てはG列を求める為です。 FIND関数は、検索値が見つからなかったらエラー値を返します。 つまり、D列でエラーに成った行は「26」が含まれていない行なので 「B」と表示されなくて良い行 なのです。 IF関数の作りとして、真の場合に「B」偽の場合に「""」とする事にしたなら(H列の式) D列でエラーに成った行は、IF関数で言うと FALSE=0 として扱われれば良い行です。 (26が含まれないのですから、その他の条件がどうなっていたとしても  「""」と成れば良いですよね?) そこで、E列で エラーに成った行を「0」それ以外を「1」に変換します。 この時「1」に成っている行は 【その他の条件によっては】「B」が表示されても良い 行です。 【その他の条件】の内の一つが、F列に入れた「=C3>=600」です。 ここで「FALSE」と表示された行は、「B」と表示されなくて良い行ですね。 (他の条件がどうであれ、600より小さい場合は「""」です。) そして、「TRUE」と表示された行は、【その他の条件によっては】 「B」が表示されても良い行です。 もしも  E列で「1」と成っていても、F列で「FALSE」と成っていたら  IF関数の判定としては FALSE にして「""」を表示するようにしなくてはいけません。  F列で「TRUE」と成っていても、E列で「0」と成っていたら  IF関数の判定としては FALSE にして「""」を表示するようにしなくてはいけません。 二つの内、どちらかが「0」或いは「FALSE」の時に 全体として FALSE(0) に成ると、IF関数は「""」へ分岐しますね。 ですから、二つの結果を掛け算します。 すると、  0 * FALSE = 0   26が含まれていない、600未満  0 * TRUE = 0   26が含まれていない、600以上 1 * FALSE = 0   26が含まれているが、600未満  1 * TRUE = 1 26が含まれていて、600以上 希望する条件が成立した時だけ「1」に成りますね。 ここまでは良いでしょうか? (HANA) ---- (HANA)さん 条件ごとにTRUEかFALSEという判別をしているという事でいいのでしょうか? (こまったさん) ---- はい、一つずつ判定をして(E列、F列、I列) どの条件がどうなっているときにどうなれば良いのか 最終的な判定をします。(G列) 一つでも FALSE と成っていたら FALSE に成れば良いなら 全ての判定結果を掛け算すれば良いです。 一つでも TRUE と成っていたら TRUE に成れば良いなら 全ての判定結果を足し算すれば良いです。 この二つはどちらかが成立すれば良いけど、これは絶対成立してないと駄目 なんて事も有るでしょう。 すると、掛け算と足し算を組み合わせる事に成りますね。 とおりすがりさんがやって居られるように AND関数やOR関数を使った方が分かりやすかったでしょうか? G列に入れた =E3*F3 は、AND関数を使って =AND(E3,F3)と書けますが。。。 I列で、もう一つの条件の判定は出来ています。 後はその条件も踏まえてG列で判定をすれば良いのですが 「踏まえる」ってのが分からないですか。。。? I列が FALSE と成っていたら「E3*F3」の結果が何であれ「0」に I列が TRUE と成っていたら「E3*F3」の結果が「1」の時に「1」 当然ですが「E3*F3」の結果が「0」の時はI列の結果が何であれ「0」 と成るような式を、G列に作ることに成るのですが。。。 「G列に!!??」って場合は、現在のG列の数式はそのままで G列の結果とI列の結果を使って J列に作ってもらっても良いですが。。。 (HANA) ---- (HANA)さん I列の判定で900以上を判別する式は=C3<=900でよかったんですね。 これをフィルドラッグすると全て結果はTRUEとなるのです。 これは全てTRUEでいいのですね。 (こまったさん) ---- (HANA)さん すみません900以下の間違いでした。 (こまったさん) ---- そ・・・そうですよね。。。 急にびっくりしちゃいました。^^ 因みに >これは全てTRUEでいいのですね。 それは、C列に何が入力されているかに依って変わります。 C列に900 とか それより大きい値、小さい値 色々な値を入れて、希望するときに 希望する TRUE/FALSE が表示されれば 良いって事になりますが。。。 最初に載せられたデータではC列は900以下なので 全てTRUEに成って良いですね。 (HANA) ---- では、G列にはE列の結果とF列の結果にさらにI列の結果の条件で、 E列にはタイプに26の値がありF列の600以上の条件にI列の900以下の条件をすべて満たせばいいので G列の式はE3*F3*I3でいいのでしょうか? (こまったさん) ---- はい。 すると、C7を1000とかに変えると H列の「B」が消えますよね? (HANA) ---- はいH列のBは消えました。 最終的にB3には タイプに26がありアームの長さが600以上900以下の条件を満たすときにBと自動入力させる式は =IF(COUNT(FIND(26,A3)*(C3>=600),"B","")*(C3<=900),"B","")   でしょうか? (こまったさん) ---- あれ・・・・違いますね・・・ 先走りしてしまったようです・・・ (こまったさん) ---- 最終的には一つずつ戻していきます。 E3セルは「COUNT(D3)」と成っているので D3セルの式「FIND(26,A3)」をD3の所へ入れます。 COUNT(FIND(26,A3)) そして、G3セルの式「E3*F3*I3」のE3と成っている所に その式を入れます。 COUNT(FIND(26,A3))*F3*I3 ~~~~~~~~~~~~~~~~~~ こんな感じで、F3は F3に入っている式 I3はI3に入っている式に置き換えた後 H3の式「IF(G3,"B","")」のG3部分と置き換わって B3に入れる式に成ります。 分かりにくければ、H3セルの式から なおしていってもらって良いですが・・・・。 「IF(G3,"B","")」のG3部分に G3セルに入っている式「E3*F3*I3」を入れる IF(E3*F3*I3,"B","") ~~~~~~~~ それぞれ、E3,F3,I3の式と置き換えて まだD3セルが有るので、それを置き換える。 (HANA) ---- 当初の式の条件部分は =IF(COUNT(FIND(26,A3))*(C3>=600),"B","") ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ここですよ。 ここにさらに *(C3<=900) 一つずつ入れ直した式と、同じ式に成ると思います。 (HANA) ---- 論理演算より AND関数の使い方を先に覚えた方がいいと思います。 =IF(AND(COUNT(FIND(26,A3))>0,C3>=600,C3<=900),"B","") >0 は省略してもかまいません。 (マドロコッシー) ---- > 論理演算より AND関数の使い方を先に覚えた方がいいと思います。 同意。 すでに、(とおりすがり)さんから提示が出ている数式で、解決しているのでは? > =IF(AND(C3>=600,C3<=900,COUNT(FIND(26,A3))*(C3>=600)),"B","") > の、この式でアームの長さが600以上900以下でタイプが26の時にBを自動入力させることが出来ました。 でも、この数式、整理すると、(マドロコッシー)さんのより2文字短くなるね。 =IF(AND(C3>=600,C3<=900,COUNT(FIND(26,A3))),"B","") 短くなればいいというものではないけど、無理して論理演算を覚えようとしなくてもいいのでは? (傍観者) ---- H3のセル式から順に置き換えると =IF(G3,"B","")から =IF(E3*F3*I3,"B","") 次にE3セルの式と置き換えて =IF(COUNT(D3)*F3*I3,"B","") 次にF3セルの式と置き換えて =IF(COUNT(D3)*C3>=600*I3,"B","") 次にI3セルの式と置き換えて =IF(COUNT(D3)*C3>=600*C3<=900,"B","") 最後にD3のセル式を置き換えて =IF(COUNT(FIND(26,A3))*C3>=600*C3<=900,"B","") これでいいのでしょうか? ()がいるのですね・・・ 元の式から考えて・・・ =IF(COUNT(FIND(26,A3))*(C3>=600)*(C3<=900),"B","") これですね(^^)v (こまったさん) ---- あら・・・ こんな私の為にいろいろとご指導いただきありがとうございます。 (こまったさん) ---- (HANA)さんへ 本日は朝早くからIF関数についてのご指導いただき本当にありがとうございました。 今回ご指導いただいたことを踏まえて自身で求めたい値が導き出せる様に勉強していきたいと思います。 こんなに親切にまたご丁寧にご指導いただいたことに心より感謝いたしております。 また、私のコメントでイライラされていた方も多くおられることと思いますが、じっと成り行きを見守って頂いたことに感謝いたします。 本当にありがとうございました。 (こまったさん) ---- ちょっと誤解があるといけませんので書いておきます。 G列を求める際「*」で求めましたが 別段それを推奨しているわけではありません。 私が当初書いた式が「*」だったため お話としてそのままつづけました。 (途中で方針が変わるのは 混乱の元ですので。) >とおりすがりさんがやって居られるように >AND関数やOR関数を使った方が分かりやすかったでしょうか? >G列に入れた =E3*F3 は、AND関数を使って =AND(E3,F3)と書けますが。。。 と書いていますように、=E3*F3*I3であれば AND関数を使って AND(E3,F3,I3)と書いても同じです。 その後、セル番地とそのセルに入っている数式を 入れ替えながら一つの式にしていくのは、これまでの手順と同じです。 今回重きを置きたかったのは ◆どういった成りたちで式が作成されるのかを、理解してもらいたい と言う点です。 これから先、数式を使って行った場合 複雑な組み合わせの数式を作る必要が出てくるかもしれません。 また、すでに作られている複雑な数式に出会うかもしれません。 しかし、基本はD列以降でやった様に分解できます。 複雑な式でも、一つずつ段階を踏んでいけば 作成できるようにもなると思います。 A列に入力されている文字が「26」を含んでいるかを判定する方法は いくつかありますが >=IF(A3="*26*","B")とか=IF(A3=" 26 ","B")とスペースを入れてみたりと・・・・ これらではできません。 実際にセルに 「=A3="*26*」や「=A3=" 26 "」と入れてみて 戻り値を確認しても 希望する行で TRUE にはなりません。 「*26*」や「 26 」が入っているセルにあたったときのみ TRUE となります。 この結果から 「これでは駄目だ。違う判定方法を探さなくてはならない」と 結論付けなくてはいけません。 ある文字が含まれているかどうかの判定で他によく使われる方法として COUNTIF関数を使用する方法があります。 COUNTIF関数ではワイルドカードが使えますので =COUNTIF(A3,"*26*")と言う書き方が出来ます。 A3セルに26という文字が含まれていたら「1」 含まれていなかったら「0」となります。 今回のFINDを使ったものと比べてすぐに(この式だけで) 1 / 0 ( TRUE / FALSE ) の判定が出ますが もしもA3セルの値が数値だった場合は、26があっても「0」が返されます。 (文字列で入力されている場合は、希望する結果が得られます。) ですから、面倒に思うかもしれませんが「一度セルで計算させて結果を確認する」 と言う事は、重要な事だと思っています。 (今回の様に 条件がいくつかある場合は特に。) もちろん、そんな事しなくても 大丈夫なくらい数式に慣れてしまえば、 当り前の確認をする必要は無いと思いますけどね。 それから、ついでですので書いておきますが 数式は(マクロもそうだと思いますが)理由をもって書くのが良いと思います。 理由をもって と言うのは、後から「どうしてここはこうなっているの?」 と聞かれた時に、理由が付けられる と言う事です。 引き合いに使わせていただきますが (とおりすがりさん、他意はありませんので、あしからずご了承下さい。) > =IF(AND(C3<>"?",COUNT(FIND(26,A3))*(C3>=600)),"B","") この数式の条件部分「AND(C3<>"?",COUNT(FIND(26,A3))*(C3>=600))」 C3<>"?" は AND(~~~~~~~~,~~~~~~~~~~~~~~~~~~~~~~~~~~~~) 単独でAND関数の引数です。 そして、COUNT(FIND(26,A3))*(C3>=600)が、もうひとつの引数として入っています。 この時、  「COUNT(FIND(26,A3))*(C3>=600)」は、どうしてそれぞれが  AND関数の引数になっていないの? 或いは、  この二つが「*」なら、C3<>"?" も「*」じゃダメなの? と考えると、私はなぜなのか分かりません。 その次の >=IF(AND(C3>=600,C3<=900,COUNT(FIND(26,A3))*(C3>=600)),"B","") に関しては、「C3>=600」が重ねて条件に入っていますが それがなぜなのか分かりません。 同じAND関数と「*」が混在するにしても AND(COUNT(FIND(26,A3)),(C3>=600)*(C3<=900))であれば、 AND(~~~~~~~~~~~~~~~~~~,~~~~~~~~~~~~~~~~~~~) A列に関する確認と、C列に関する確認がAND関数の中に入っているので そう言われれば、そう考えられなくもない。。。。 しかし、すべて等しくAND条件なのですから、ここはやはり AND(COUNT(FIND(26,A3)),C3>=600,C3<=900) としておくのがすっきりしそうに思います。 もちろん、「どうしてそうなっているの?」と言われた時に 「これはこうだから、こうしたの!!」と言えるのなら そしてそれで、問題なく希望する結果が得られるのなら どんな式になっていても良いと思います。 >とても単純な関数ですが「論理式」の部分をどの様にするか >と言う点で、難しい数式でもあります。 >(実質的に、論理式の作成が難しい という場合も有りますし > 同じ結果を導くいくつかの方法が有る という場合も有るためです。) の実例と言えると思います。 どの書き方をしても、同じ結果を得ることは出来ますので。 (HANA) ---- To, HANAさん >> =IF(AND(C3<>"?",COUNT(FIND(26,A3))*(C3>=600)),"B","") > この数式の条件部分「AND(C3<>"?",COUNT(FIND(26,A3))*(C3>=600))」 > C3<>"?" は AND(~~~~~~~~,~~~~~~~~~~~~~~~~~~~~~~~~~~~~) > 単独でAND関数の引数です。 > そして、COUNT(FIND(26,A3))*(C3>=600)が、もうひとつの引数として入っています。 > > この時、 > 「COUNT(FIND(26,A3))*(C3>=600)」は、どうしてそれぞれが >  AND関数の引数になっていないの? 引数がだぶっていますね。 (傍観者)さんが、書かれている =IF(AND(C3>=600,C3<=900,COUNT(FIND(26,A3))),"B","") がすっきりしますね。 もちろん、質問者の、こまったさんも =IF((C3>=600)*(C3<=900)*(COUNT(FIND(26,A3)))),"B","") でご理解されたように思います。 結局、どちらでも答えは、一緒で、AND関数を使うか、論理演算を使うかの差かと思います。 (とおりすがり)