- ベストアンサー
エクセル入れ子数式の工夫方法とは?
- エクセルの入れ子数式の制限を克服する方法をご紹介します。
- 2003バージョンのエクセルでは、8個までしか入れ子数式を使用することができません。
- 商品名に応じたサイズのリストを作成する方法をお教えします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
どんなにサイズの項目を増やしても対応できる方法です。 例えばG1セルから下方にサイズ、G2セルにS、G3セルにM,G4セルにG5セルにL,G6セルにXL,G7セルにS,G8セルにM,Lなどと、商品に必要な数だけ入力します。 その上でC1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(ISERROR(INDEX(G:G,ROW(A1)-MATCH("",B$1:B1,-1)+1)),"",IF(INDEX(G:G,ROW(A1)-MATCH("",B$1:B1,-1)+1)=0,"",INDEX(G:G,ROW(A1)-MATCH("",B$1:B1,-1)+1))) B列のどの位置からでも商品名を入力することでC列にはお望みの表示がされます。
その他の回答 (4)
- kagakusuki
- ベストアンサー率51% (2610/5101)
質問者様がどうしたいのかが今一つ不明確なので補足願います。 >=IF(B20="",IF(B19="",IF(B18="",IF(B17="",IF(B16="",IF(B15="",IF(B14="",IF(B13="",IF(B12="",IF(B11="",IF(B10="",IF(B9="",IF(B8="",IF(B7="",IF(B6="",IF(B5="",IF(B4="",IF(B3="","","XL"),"L"),"M"),"S"),"XL"),"L"),"M"),"S"),"XL"),"L"),"M"),"S"),"XL"),"L"),"M"),"S"),"サイズ") という関数では、B19セルが空欄ではない場合には、「サイズ」と表示するのは判るのですが、B20セルが空欄ではない場合には、何と表示したいのかが記されておりません。 又、御質問文の関数では、例えば、B3セルが空欄ではない場合において「XL」と表示するのは、B4~B20の範囲にあるセルが全て空欄となっている場合のみとなり、B4~B20の範囲にあるセルの内、B7、B11、B15以外のどれか一つでも空欄ではないものがある場合には、例えB3セルが空欄ではなくとも「XL」とは表示されない事になりますが、その様な働きをする関数を求めておられるのでしょうか? それとも、例えばB3セルに商品名が入力された場合には、必ずC3セルに「XL」と表示させたいのでしょうか? もし、前者だとしますと、次の様な関数となります。 =IF(COUNTIF($B$3:$B$20,"*?"),INDEX({"XL","L","M","S","XL","L","M","S","XL","L","M","S","XL","L","M","S","サイズ","B20が空欄ではない場合"},MATCH("",B3:B20,-1)),"") 或いは、 =IF(COUNTIF($B$3:$B$20,"*?"),IF(B20="",IF(B19="",INDEX({"XL","L","M","S"},MOD(MATCH("",B3:B20,-1),4)),"サイズ"),"B20が空欄ではない場合"),"") 御質問文にある関数と同じ働きをして、且つ、入れ子が少なく済む関数は以上の様なものとなります。 しかしながら、御質問文にある関数で出来る事と、ANo.1様の御回答に対する質問者様の御補足に記されている「やりたい事」は、内容が全く異なっています。 もし、 >B1に商品名を入れるとC1に「サイズ」、C2に「S」、C3に「M」、C4に「L」、C5に「XL」、C6に「S」・・・」と下に20個くらい自動で入れるようにしたいのです。 のでしたら、まず、C1セルには次の関数を入力して下さい。 =IF(INDEX($B:$B,ROW())="","サイズ") 次に、C2セルには次の関数を入力して下さい。 =IF(INDEX($B:$B,ROW())="","",INDEX({"S","M","L","XL"},MOD(ROWS($2:2),4))) そして、C2セルをコピーして、C3以下に貼り付けて下さい。 ANo.1様の御回答に対する質問者様の御補足に記されている「やりたい事」を実現させる方法は以上です。 尚、、「御質問文にある関数」と「ANo.1様の御回答に対する質問者様の御補足に記されている『やりたい事』」の内容が異なっているため、当然ながら、「御質問文にある関数と同じ働きをする関数」と「ANo.1様の御回答に対する質問者様の御補足に記されている『やりたい事』を実現させる関数」では、表示される結果も異なるものとなりますし、質問者様がどうされたいのかが不明確であるため、上記のどちらの方法も、質問者様の御期待に沿えるかどうかも不明となってしまいます。
お礼
お騒がせいたしました。 以下の関数で解決いたしました。 =IF(B10="",IF(F9="サイズ","S",IF(F9="S","M",IF(F9="M","L",IF(F9="L","XL",IF(F9="XL","S",""))))),"サイズ")
- imogasi
- ベストアンサー率27% (4737/17069)
IF関数を3つ以上(ぐらい)ネストする式を考えたら、ほかにマシな関数は無いのか、考えるべきだ。 初心者がよくIFを多段ネストした質問を出すが、関数の勉強不足が多い。 それは通常VLOOKUP関数MATCH関数などの場合が多い。こんな関数を知っていて、使えないと確信して、質問しているのか。 さて本件はどうなのかな。 >B列に商品名を入れるとC列に「サイズ、S、M、L、XL、S・・・」と下に20個くらい自動で入れるようにしたいのです。 の書き方があいまいではっきり判らない。 商品名に対応して、対応行隣列に、一律に商品に対応した記号文字を入れるならVLOOKUP関数のTRUE型かな。 質問にはシートの行列のデータ実例を少数挙げて質問すること。また複雑な式をコピペするだけでなく、データの特徴や、やりたいことも文章でも内容を説明のこと。 (いそがしい回答者にも読み解かせる時間をとらないよう配慮すること) どうも簡単なVBAプログラムでも組んだほうが簡単なのかな。S、M、L、XL、S・・・を入れるセルがB列が空白かどうかで 影響を受けるようだ。最終行空白セルを探すEnd(xlUp)を使う質問かな。
お礼
ご丁寧に回答頂きありがとうございます。無事解決いたしました。
- Hirorin_20
- ベストアンサー率20% (136/648)
andを併用する。 例:=IF(AND(A1="",B1=""),1,0) workセルを使う。 例:C1に=A1 & B1 としておき、=IF(C1="",1,0)
お礼
回答ありがとうございます。 大変申し訳ないのですが、頂いた回答ではちょっとどうすればいいのかわかりませんでした。 もしかしたた質問の仕方が悪かったのかもしれません。 補足で訂正いたしました。
補足
B列に商品名を入れるとC列に「サイズ、S、M、L、XL、S・・・」と下に20個くらい自動で入れるようにしたいのです。 ↓ 例えば、B1に商品名を入れるとC1に「サイズ」、C2に「S」、C3に「M」、C4に「L」、C5に「XL」、C6に「S」・・・」と下に20個くらい自動で入れるようにしたいのです。
お礼
お騒がせいたしました。 以下の関数で解決いたしました。質問ではF列がC列です。 =IF(B10="",IF(F9="サイズ","S",IF(F9="S","M",IF(F9="M","L",IF(F9="L","XL",IF(F9="XL","S",""))))),"サイズ")