• 締切済み

お知恵を貸して頂きたいです。 エクセル関数

資料を作っているのですが、どうしていいかわかりません。 ご存知の方がいらっしゃいましたら、アドバイス頂ければと思います。 【パターン1 =Good】 A類  1  ○ A類  2  ○ A類  1 B類  2 C類  1 B類  1 B類  1 C類  2 【パターン2 =NG】 A類  1  ○ A類  2  ○ A類  1 B類  2  ○ C類  1 B類  1 B類  1 C類  2 【パターン3 =NG】 A類  1   A類  2   A類  1 B類  2   C類  1 B類  1 B類  1 C類  2 【パターン4 =NG】 A類  1   A類  2   A類  1  ○ B類  2  ○ C類  1 B類  1 B類  1 C類  2 【パターン4 =NG】 A類  1   A類  2   A類  1   B類  2  ○ C類  1 B類  1 B類  1 C類  2 【パターン6 =NG】 A類  1  ○ A類  2  ○ A類  1 B類  2  C類  1  ○ B類  1 B類  1  C類  2  ○ パターン1の様に、 ある1つ類 且つ、1と2 それぞれに「○」が1つ以上ついている時のみ、OKなのですが、 パターン2の様に 異なる類にまで「○」がついていると、NGになります。 異なる類は1つ以上あればNGです。 パターン3の様に どれにも全く「○」が付いていないのも、NGです。 パターン4の様に 1か2だけで複数の類に「○」 も、NGです。 パターン5の様に ある種の1か2のどちらか1つだけ「○」も、NGです。 パターン6の様に ある類の1と2に「○」 プラス 他のある類(←1種類以上)の1と2に「○」 も、NGです。 つまり、 パターン1(1つの類で1と2に必ず「○」がある)のみGOODで、 ・「○」をもつ(類列の)類名が複数ある時 ・1と2が揃わない時 は、NGになってしまうパターンなのですが… これを関数で示す事は出来るのでしょうか? (ひょっとすると、パターン全ての関数が必要無いかもしれません。) 宜しくお願い致します。

みんなの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.7

 表の行数が何行あるのか不明なため、行数が何行になっても指定範囲を変更するつ様の無い関数とします。  今仮に、類が入力されているのがA列であり、1や2が入力されているのがB列であり、〇が入力されているのがC列であるものとします。  質問者様が御使用になられるExcelのバージョンがExcel2007以降の場合には次の様な関数となります。 =IF(IF(COUNTIF($C:$C,"○"),AND(COUNTIFS($C:$C,"○",$A:$A,"<>"&INDEX($A:$A,MATCH("○",$C:$C,0)))=0,COUNTIFS($B:$B,1,$C:$C,"○",$A:$A,INDEX($A:$A,MATCH("○",$C:$C,0)))*COUNTIFS($B:$B,2,$C:$C,"○",$A:$A,INDEX($A:$A,MATCH("○",$C:$C,0)))),FALSE),"GOOD","NG")  又、御使用になられるExcelのバージョンがExcel2007よりも前のバージョンである場合には次の様な関数となります。 =IF(IF(COUNTIF($C:$C,"○"),AND(SUMPRODUCT((INDEX($C:$C,MATCH("○",$C:$C,0)):INDEX($C:$C,MATCH("○"&CHAR(1),$C:$C))="○")*(INDEX($A:$A,MATCH("○",$C:$C,0)):INDEX($A:$A,MATCH("○"&CHAR(1),$C:$C))<>INDEX($A:$A,MATCH("○",$C:$C,0))))=0,SUMPRODUCT((INDEX($C:$C,MATCH("○",$C:$C,0)):INDEX($C:$C,MATCH("○"&CHAR(1),$C:$C))="○")*(INDEX($A:$A,MATCH("○",$C:$C,0)):INDEX($A:$A,MATCH("○"&CHAR(1),$C:$C))=INDEX($A:$A,MATCH("○",$C:$C,0)))*(INDEX($B:$B,MATCH("○",$C:$C,0)):INDEX($B:$B,MATCH("○"&CHAR(1),$C:$C))=1))*SUMPRODUCT((INDEX($C:$C,MATCH("○",$C:$C,0)):INDEX($C:$C,MATCH("○"&CHAR(1),$C:$C))="○")*(INDEX($A:$A,MATCH("○",$C:$C,0)):INDEX($A:$A,MATCH("○"&CHAR(1),$C:$C))=INDEX($A:$A,MATCH("○",$C:$C,0)))*(INDEX($B:$B,MATCH("○",$C:$C,0)):INDEX($B:$B,MATCH("○"&CHAR(1),$C:$C))=2))),FALSE),"GOOD","NG")

全文を見る
すると、全ての回答が全文表示されます。
回答No.6

No.2です。 >難しい関数を教えて頂き感謝します。 確かに組み上がった数式は、長くて難しいですね。ただ一応、使っている関数は全て、使用頻度の高いものではあります。よかったら、それぞれの関数名をインターネットで検索してみてください。 >……同類で、2に「○」が1つ    同類で、1に「○」が2だとNGと出てしまう様です。 ごめんなさい、1つ「以上」という条件を見逃してしまいました。それでは、次式ならいかがでしょうか。 =if(countifs(b1:b8,1,c1:c8,"○")*countifs(b1:b8,2,c1:c8,"○")*((countif(c1:c8,"○")=countifs(a1:a8,"A類",c1:c8,"○"))+(countif(c1:c8,"○")=countifs(a1:a8,"B類",c1:c8,"○"))+(countif(c1:c8,"○")=countifs(a1:a8,"C類",c1:c8,"○"))),"Good","NG")     ……Excel2007以後 あるいは =if(sumproduct((b1:b8=1)*(c1:c8="○"))*sumproduct((b1:b8=2)*(c1:c8="○"))*((countif(c1:c8,"○")=sumproduct((a1:a8="A類")*(c1:c8="○")))+(countif(c1:c8,"○")=sumproduct((a1:a8="B類")*(c1:c8="○")))+(countif(c1:c8,"○")=sumproduct((a1:a8="C類")*(c1:c8="○")))),"Good","NG")     ……Excel2003以前 今回の条件では、これ以上短い1本の数式にするのは難しそうです。もっと短いほうがいい場合は、上式の各部分を、作業列に分けて入力してください。

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

No.4です! たびたびごめんなさい。 前回の数式では仮に1だけが3つ以上あっても「GOOD」と表示されてしまいます。 F2セルの数式を↓に変更してください。 =IF(AND(SUMPRODUCT((B1:B1000=1)*(C1:C1000="○")),SUMPRODUCT((B1:B1000=2)*(C1:C1000="○")),SUM(D:D)=SUMIF(C:C,"○",B:B)),"GOOD","NG") これで何とかご希望に近い形にならないでしょうか? 検証せずに投稿してごめんなさいね。m(_ _)m

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんばんは! 一例です。 ↓の画像のように作業用の列を設けます。 作業列D2セルに =IF(C2="","",IF(A2=INDEX($A$2:A2,MIN(IF($C$2:C2<>"",ROW($A$1:A1)))),B2,"")) これは配列数式になってしまいますので、Shift+Ctrl+Enterで確定! この画面からコピー&ペーストする場合はD2セルに貼り付け後、数式バー内で一度クリック! 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 このD2セルをオートフィルでずぃ~~~!っと下へしっかりコピー! 最後に結果のF2セル(配列数式ではありません)に =IF(AND(SUM(D:D)>2,SUM(D:D)=SUMIF(C:C,"○",B:B)),"GOOD","NG") という数式を入れると画像のような感じになります。 こんな感じではどうでしょうか? 的外れならごめんなさいね。m(_ _)m

全文を見る
すると、全ての回答が全文表示されます。
  • jacob-wk9
  • ベストアンサー率36% (85/231)
回答No.3

B類1など、同じ項目が複数回出てくるのでしょうか。 アンケートの集計とか、どういう案件なのかわかると、もう少しイメージしやすいのですが。 また、YESの事例ももう少し多いほうが、イメージしやすいです。 初期エクセル関数から追加されたものを勉強していませんので、単純関数で回りくどいやり方になりますことをご了承ください。 画像と合わせて要件あってるかご評価ください。 C1行~8行 「=IF(B1="○",1,0) 」(B1~B8) B10行~B15行「=SUMIF($A$1:$A$8,A10,$C$1:$C$8)」 (A10~A15) D10行~D15行「=IF(B10>0,1,0)」 (B10~B15) D16「=SUM(D10:D15)」 D17「=IF(D16=2,0,1)」 2値化した評価点合計が2の場合のみOKにする準備 F10、F13、F15「=IF(AND(D10>0, D11>0),1,0)」  (D10とD11、D12とD13、D14とD15を評価) F17「=IF(SUM(F10:F15)=1,1,0)-D17」 (1および2がセットになったものがAかBかCのいずれか1類のみ存在し、 かつ余計なところに丸がついていない)

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

=if((countif(c1:c8,"○")=2)*(sumif(c1:c8,"○",b1:b8)=3),if(index(a1:c8,match("○",c1:c8,0),1)=index(a1:c8,match("○",c1:c8,1),1),"Good","NG"),"NG")

0020c
質問者

お礼

難しい関数を教えて頂き感謝します。 ありがとうございます。

0020c
質問者

補足

有難うございます。 エクセルで操作してみたのですが、 同類、なおかつ、必ず1と2がそれぞれ1つ以上はGOODとなるのですが、 同類で、2に「○」が1つ 同類で、1に「○」が2だとNGと出てしまう様です。

全文を見る
すると、全ての回答が全文表示されます。
  • Cupper-2
  • ベストアンサー率29% (1342/4565)
回答No.1

条件は  A類…1と2で○が二つ  B類…×  C類…×  A類…×  B類…1と2で○が二つ  C類…×  A類…×  B類…×  C類…1と2で○が二つ でGood。 他はNoGood。 ってことかい? 意外と条件を並べるだけで自身で解決できたりします。 難しい条件だな…と思ったら、まずは整理してみましょう。 整理している間に良いアイディアが浮かぶかも知れません。 まあ質問の例では条件の成立には3つのケースあることが分かります。 これで何とかなるんじゃない? あとは、1つのパターンで条件を作って、それを3つ組み合わせたら解決すると思うんだ。

0020c
質問者

お礼

ありがとうございます。 関数がある事を知らなかったので、 今本を買ってきて色々作っている所で、 関数自体、全く意味がちんぷんかんぷんな状態での質問です。 条件は、 類はABCの3つだけではなく、 延々と出て来ますので、無数になります。 ABCも仮称です。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • IF関数とAND関数の組み合わせについて

    IF関数を使用し下記の条件にしたいのですが、 どうにも行き詰っています。。どうすればいいのか、またもっといい方法があればご教授ください。 (1)A1には品番プラスアルファベットを入力(末尾に数量が1~9個なら「a」10~49個なら「b」50個~99個を「c」100個以上を「d」と入力する) (2)A2には数量を入力 A1とA2が合っているかを確かめA3セルにGOODかNGかを表示できるようにしたい。 A3セルに =IF(AND(RIGHT(A1,1)="a",A2<10),"GOOD",IF(AND(RIGHT(A1,1)="b",A2<50),"GOOD",IF(AND(RIGHT(A1,1)="c",A2<100),"GOOD",IF(AND(RIGHT(A1,1)="d",A2<=100),"GOOD","NG")))) A1セルの右から1文字目がaでかつ10より下ならGOODというふうに式を作ってみましたが。。。うまくいきません。 よろしくお願いします。

  • エクセル関数

    エクセル関数 EXCEL2007の関数に関してご教授下さい。 A+B=Cという単純な項目があります。 (1)Aがマイナスの場合は「0」 (2)BがマイナスでCがプラスならCの50% (3)BがプラスでCがプラスならAの50% としたい場合の関数で試行錯誤しております。 if関数などを使用して試しているのですがそもそもあまり知識が無いため なかなかゴールにたどり着けません。 ifで良いのかもわからない状態です。 何とかゴールに導いて頂ければと質問いたしております。 よろしくお願いします。

  • エクセル関数

    関数でわからないのでお願いします   A    B    C    1 45        45歳以上 2 44        45歳未満 3 18         ・・・・・ 例えばA列に年齢入力すると 45以上はC1の文字 45歳未満は、C2の文字 18以下は、C3の文字が反映されるようにしたいのですが、 複数の条件の書き方が分かりません、それに A列が、空白の時エラーが出ないようしたいのですが、困ってます。よろしくおねがいします。

  • 関数のやり方を教えてください。

    エクセル初心者なので教えてください。 3つの数値をプラス値かマイナス値かで表示をわけて、 そのパターンをさらに区別したいです。 分かりにくいと思うので、[セル番地:入力数値]で 具体的に記載します: 例えば、[A1:-10][B1:+10][C1:-7]の3つの数が あるとし、A2、B2、C2には、それぞれA1、B1、C1が プラス値かマイナス値のみを表示させたいです。 [A2:=IF(AND(A1<0),"-","+")] [B2:=IF(AND(B1<0),"-","+")] [C2:=IF(AND(C1<0),"-","+")] と入力すれば、[A2:-]、[B2:+]、[C2:-]の表示となる ところまではできました。 これをさらにパターンで区別したいです。 今回の例は-、+、-の結果でしたが、-、-、-であったり +、-、+で会ったりすると思います。 それぞれに-、+、-をパターン(1)、-、-、-をパターン(2)などと 指定し、セル番地D2あたりに、(1)または(2)または(3)などの 表示が出てくるようにしたいです。 つまり、3つのセルから判断してそのパターン番号を自動的に 表示できるようにしたいです。 どのような関数を使えばいいでしょうか。 分かりにくい説明で申し訳ないです。

  • エクセルのIF関数について

    エクセルIF関数について教えていただきたいのですが A    B   C   5    5 -5       -5 上記のようにIF関数を組みたいのですが Aの値がプラスならBへ表示 Aの値がマイナスならCへ表示したいのですが IF関数で表すならどう関数を組めばよろしいでしょうか?

  • Excelの関数で

    お願いします。 Index関数とMatch関数を使用して表の中の値を求めようとしましたが、 検索行が複数あるため、うまくいきません。 検索する列は1列(a,b,c)ですが、検索行(あ、い、う~)が複数になっています。 更に空白もあります。 こんな感じ↓です。 ---------------------   あ  い   う   え      お   か ---------------------    a  10  20  30 b  40  50  60 c  70  80  90 --------------------- こういった場合にはどんな関数を使って一致する値を求めたら良いのでしょうか? 大変困っております。よろしくお願いします。

  • エクセルの関数について

    以下のようなことを実現できるエクセルの関数を教えてください。 <状況> ・ひとつのセルに、複数の数字が「,」区切りで入力されている。  (仮にA1セルとします) ・B1セルに検索値が入っています。 <実現したいこと> B1の値が、A1に含まれるとき、C1に”○”を返す。 このときのC1に入力すべき関数を教えてください。 <具体例> A1:12,13,14 B1:12 C1:○

  • エクセル関数で・・・

    教えてください! エクセル表で労働時間管理をしています。  1 2 3 4 5・・・ aあ あ 休 あ い・・・ bい 休 あ い 休・・・ c休 い い 休 あ・・・ dあ あ 休 あ あ・・・ 分かりづらいでしょうか・・・? この表で、『a』が『あ』の時10時間で、『d』が『あ』なので『a』は2時間引くと言う式はできたのですが、私が作った関数はIF関数で『a』が休みで『d』が休みの時も2時間引いてしまい、式ができません。両方が『休』の時は2時間プラスする。といった式はどうすればいいですか??

  • 関数 数式 Excel

    すみませんが教えてください! E列に下のような関数を入れたところ正しく表示されませんでした・・・ どうぞよろしくお願いします。 A列(数字・空白を含む)が 1 の場合”◎” A列が1以外の場合は B列(別シートから参照のVLOOKUP関数が入っている)と C列(別シートから参照ののVLOOKUP関数が入っている) を足した数字が D列(別シートから参照ののVLOOKUP関数が入っている) が同じなら ”OK” 違うなら ”NG" と表示させたいので =IF(A1=1,"◎",IF(D181=(B181+C181),"OK","NG")) としてみましたが"◎"が表示される表示は正しいのですが "OK" "NG"が正しく表示されません。 これに加えていずれのセルにも空白が存在するのでエラーを出さないようにしたいです。 よろしくおねがいします!!

  • エクセル2003のIF関数についてお尋ねします。

    エクセル2003のIF関数についてお尋ねします。 A1、B1、C1に数字を入れます。A1またはB1が50以上の場合で、「且つ」C1が120以上である場合にD1に※を入れたいときの関数式を教えて下さい。 =IF(OR(A1>=50,B1>=50),?????,"※"、"")という感じなると思いますが、????の部分をどうしたらいいのか分かりません。且つC1が120以上の表現方法がわかりません。よろしくお願いします。

専門家に質問してみよう