ExcelのIF関数で条件に応じたグループを抽出する方法

このQ&Aのポイント
  • ExcelのIF関数を使用して、A列とB列の組み合わせに応じた条件を判定し、特定のグループを抽出する方法を説明します。
  • 特定の条件に基づいてデータを分類する必要がある場合、ExcelのIF関数を使用することで簡単に解決することができます。
  • この方法を使用すれば、複数の条件に基づいてデータを抽出し、特定のグループに分類することができます。
回答を見る
  • ベストアンサー

ExcelのIF関数について教えてください。

Excelでデータ抽出をする際の関数について。 A列の情報(文字列)と、B列の情報(文字列)の2つの組み合わせに対し、条件がある ・下記のような情報がある時、   A列   B列   Blue   Red   Blue Yellow   Red   Blue   Yellow Red   Red Green ・下記の条件、   A列   B列   Blue と Blue  は  Aグループ   Blue と Yellow は Bグループ   Blue と Red  は Cグループ   Blue と Green は Dグループ   Red と Blue  は  Aグループ   Red と Yellow は Bグループ   Red と Red  は Cグループ   Red と Green は Dグループ   ・・・つづく にあてはめて、条件の●グループを引っ張ってきたいのですが、 どのような関数を入れたらいいのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • don9don9
  • ベストアンサー率47% (299/624)
回答No.3

条件が1つなら、一般的にはVLOOKUP関数で可能なケースだと思いますが 2つあるということなので、少し工夫する必要がありますね。 「A列の文字列とB列の文字列を結合した文字列」と 「それに対応するグループ」の対応表を準備します。 「BlueBlue」「Aグループ」 「BlueYellow」「Bグループ」 「BlueRed」「Cグループ」 「BlueGreen」「Dグループ」 「RedBlue」「Aグループ」 「RedYellow」「Bグループ」 「RedRed」「Cグループ」 「RedGreen」「Dグループ」 仮に上記の対応表がSheet2のA1:B8に入っているとすると =VLOOKUP(A1&B1,Sheet2!$A$1:$B$8,2,FALSE) のような式で可能かと思います。

hirodayo33
質問者

お礼

ありがとうございます。 私のスキルレベルでは、ご教示いただいた内容が一番スムーズに作業できそうです。 助かりました、ありがとうございました。

その他の回答 (8)

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

>  A列   B列   Blue と Blue  は  Aグループ   Blue と Yellow は Bグループ   Blue と Red  は Cグループ   Blue と Green は Dグループ   Red と Blue  は  Aグループ   Red と Yellow は Bグループ   Red と Red  は Cグループ   Red と Green は Dグループ   ・・・つづく とありますが、B列の値のみでグループ分けをするのでしょうか?  それとも、   A列   B列   Blue と Blue  は  Aグループ   Blue と Yellow は Bグループ   Blue と Red  は Cグループ   Blue と Green は Dグループ   Yellow と Blue  は  Eグループ   Yellow と Yellow は Fグループ   Yellow と Red  は Gグループ   Yellow と Green は Hグループ   Red と Blue  は  Iグループ   Red と Yellow は Jグループ   Red と Red  は Kグループ   Red と Green は Lグループ   Green と Blue  は  Mグループ   Green と Yellow は Nグループ   Green と Red  は Oグループ   Green と Green は Pグループ の間違いなのでしょうか?  取り敢えず、後者であるものとして話を進めます。  まず、適当なSheet(例えばSheet2)に以下の様なリストを作成しておきます。     A列  B列  C列  D列  E列 1行目     Blue Yellow Red  Green 2行目  Blue  A   B   C   D 3行目 Yellow  E   F   G   H 4行目  Red   I   J   K   L 5行目 Green  M   N   O   P  次に、元の条件が入力されているSheetのC1セルに、次の数式を入力して下さい。 =IF(OR(COUNTIF(Sheet2!$A2$:$A$5,$A1)=0,COUNTIF(Sheet2!$B$1:$E$1,$B1)=0),"",INDEX(Sheet2!$B$2:$E$5,MATCH($A1,Sheet2!$A2:$A$5,0),MATCH($B1,Sheet2!$B$1:$E$1,0))&"グループ")  続いて、C1セルをコピーして、C2以下に貼り付けて下さい。  以上です。

hirodayo33
質問者

お礼

ありがとうございます。 本当にいろんな考え方や関数があるのだと驚いております。 とても参考になりました。ありがとうございました。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.8

添付画像を忘れていましたのでアップします。 なお、操作の目的や実際の表のレイアウトだけでなく、何を(どの部分を)抽出したいのかなどの条件を詳細に説明されたほうが、皆さんからより的確な回答が寄せられると思います(目的や条件によって最も効率的な操作が違います)。

hirodayo33
質問者

お礼

なるほど、なるほど。 たびたびありがとうございます!

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.7

ご希望の関数ではありませんが、複雑な条件にも対応できる最も簡単で確実な方法である、フィルタオプションの設定を利用する方法を提示します。 グループ分け対応表で、「データ」「フィルタ」で抽出したいグループを選択し、この抽出範囲をコピーし、条件のセル(添付画像のE2:F3セルの部分)に貼り付けます(1行目は項目名)。 これで「データ」「フィルタ」「フィルタオプションの設定」(2007は「詳細設定」)をクリックし、リスト範囲を少し大きめに選択しておき(今後のデータの追加に対応できるようにする)、検索条件範囲にE1:F3を指定し、抽出先を「指定した範囲」にして、例えばE5セルを選択します。 上記の操作を、マクロの記録で実行すれば、自動化することも可能です。 なお、この場合は、上記のフィルタ操作の代わりに最初に提示した数式(No4の回答)で該当するA列とB列のデータを表示させておき(グループを選択すると対応するデータが表示される)、名前定義を利用してこの検索条件範囲を自動的に取得できるようにする必要があります。 もしこの方法に興味があれば具体的な操作法を提示しますので、ご連絡ください。

hirodayo33
質問者

お礼

ありがとうございました。 時間がある時にきっちり実践してみますので その際不明な点がありましたら、ご連絡させていただきます。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.6

No4の回答に誤りがありましたので訂正です。 E3セルに入力する式は以下のような複雑な数式になります。 =INDEX(A:A,MAX(INDEX((INDEX($I:$I,SMALL(INDEX(($K$2:$K$100<>$E$1)*1000+ROW($K$2:$K$100),),ROW(A1)))=$A$2:$A$100)*($B$2:$B$100=INDEX($J:$J,SMALL(INDEX(($K$2:$K$100<>$E$1)*1000+ROW($K$2:$K$100),),ROW(A1))))*ROW($A$2:$A$100),)))&"" 上記の数式は、データベースに同じデータが2件以上ないという条件の数式になっています。 重複データがあるなど、データベースにさらに条件が付くようであれば、数式で対応するよりも(数式だけでも対応できる可能性はあります)フィルタオプションの設定で抽出するほうが計算負荷も少なく簡単なような気がします。

hirodayo33
質問者

お礼

修正とアドバイス、ありがとうございます!

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.5

一例です。 (1)別シートに5×5のマトリクス表を作成(行・列見出しに色名称を設定) (2)C列にOFFSET又はINDEX関数でマトリクス表から抽出    マトリクス表はSheet2のA1:E5範囲、データシートのC1に以下の関数を設定、下方向にコピー   (例)=OFFSET(Sheet2!$A$1,MATCH($A1,Sheet2!$A$1:$A$5,0)-1,MATCH($B1,Sheet2!$A$1:$E$1,0)-1)

hirodayo33
質問者

お礼

ありがとうございます。 使ったことのない関数なので、ちょっとチャレンジしてみます。 ありがとうございました。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

グループ分けの一覧表があり、データーベースからそのグループのデータを抽出したいという意味なら、以下のような関数で表示できます(添付画像参照)。 抽出したいグループ名をE1セルに入力し、I~K列にグループ分けの一覧表がある場合、E3セル(どのセルでも同じ数式)に以下の式を入力し、右方向および下方向に適当数オートフィルします。 =INDEX(A:A,SMALL(INDEX(($K$2:$K$100<>$E$1)*1000+ROW($K$2:$K$100),),ROW(A1)))&""

hirodayo33
質問者

お礼

ありがとうございます。 イメージを挿入いただけたので、とってもわかりやすかったです。 ありがとうございました。

  • yy_kd
  • ベストアンサー率25% (5/20)
回答No.2

組み合わせが沢山あるようなので、マクロで仕分けをしたらいかがですか? Sub Macro1() Y=1 :' データ行は1行目 while cells(Y,"A")>"" if cells(y,"A")="Blue" and cells(y,"B")="Blue" then cells(y,"C")="A" elseif cells(y,"A")="Blue" and cells(y,"B")="Yellow" then cells(y,"C")="B" elseif cells(y,"A")="Blue" and cells(y,"B")="Red" then cells(y,"C")="C" elseif cells(y,"A")="Blue" and cells(y,"B")="Green" then cells(y,"C")="D" elseif ・・    ・組み合わせの条件を書きます    ・  endif   y=y+1 wend end sub A列が空白になるまでC列にグループ分けをします

hirodayo33
質問者

お礼

回答いただき、ありがとうございます。 残念ながら、マクロが得意ではなく短時間で処理できそうにありません。 今後の参考にさせていただきます。ありがとうございました。

回答No.1

IF関数でグループ分けはできますがそれを集計する為には更に別の関数を使い集計を行うか、VBAでユーザー関数を作成するしかありません ワークシート関数だけで行うには IF関数でグループ分けをし、COUNTA関数でそれぞれのグループを数えます 例えばC列にグループ分けの出力をするのであればC1セルに =IF(A1="blue”&B1=”blue”、A,if(A1=blue”&B1="yellow"、B、IF(・・・・ とグループ分けの数だけIF関数を繰り返し C列のデータ最下行に =COUNTA(c1:c??、”A”) その下に =countA(c1:C??,”B”) とグループの数だけ入れるだけです

hirodayo33
質問者

お礼

早々にありがとうございました。 VBAはできないので、説明助かりました。

関連するQ&A

  • エクセル2007 IF関数について教えてください

    お世話になります。 どうしてもIF関数がうまくできず困りはてています。 下記のような項目を含むデータを2万件くらい抽出しています。 A列     B列  C列      D列 E列 状況    拒否理由       注文数   確認数 (1) 在庫不足   入力ミス  1     0 → キャンセル (2) 在庫不足       1      0 → 未処理 (3)                 5        0 → 未処理 (4)                 1       1 → 処理済 (5)   お客様キャンセル      10    0     →     キャンセル 未処理の件数を管理したいのですが、キャンセル扱いとなる条件を除く IF関数をうまく作成できません。 =IF(AND(D2>0,E5>0),"完了","未処理") といったように1個の条件についてはなんとかできるのですが、 B列が空欄or文字の入力有、C列が空欄、E列が0の数字の場合、D列の 数字を表示しなさい、といったようにまとめて、条件式をつくることができません。 何個かつなげると、TRUE、FALSEと表示され指定する列の(この場合D列)数字が表示 できません。 IF関数でなくてもよいのですが、未処理(キャンセル扱い除く)条件のみの数字を表示させる 方法をご教示お願いいたします。

  • エクセル IF関数 初心者です。。

    A    B   C  D Aさん 9:00  1  9:00 Bさん 10:00 2  9:30 Cさん 11:00 3  10:00 Dさん 12:00 4  10:30 Eさん 9:00  1  9:00 A列氏名 B列時間 C列 B列IF関数 9:00からは1、10時からは2、 11からは3・・・ D列はC列のVLOOKUP関数 1=9:00、2=9:30、3=10:00・・・ そこでお聞きしたいのですが・・ A    B   C  D Aさん 9:00  1  9:00 Bさん 10:00 3  10:00 Cさん 11:00 4  10:30 Dさん 12:00 5  11:00 Eさん 9:00  2  9:30 IF関数を用いて IF(B1>=0.375),1,if(B1>=0.416666666666667),2,IF(B1>=0.458333333333333),3・・・ Eさんが2になるような数式がわかりません。 よろしくお願いします。。

  • IF関数について

    EXCELのIF関数について教えて下さい。 A列 B列  C列 D列 ○     ○  ○    ○  ×  × ×     ○  × AもしくはB列が○で、C列が○ならD列は○ AもしくはB列が×で、C列が○ならD列は× AもしくはB列が×で、C列が×ならD列は× AもしくはB列が空白で、C列が空白ならD列は空白 と言った条件式をD列のセルに記述しようと思っています。 試行錯誤してみたんですが、上手くいきません。 アドバイスでも構いませんので、教えて下さい。

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

    エクセルのIF関数について質問をさせて頂きます。 現在、下記のような条件で抽出できる式を考えているのですが、 中々思うような式が思い浮かびません。 例えば、     A列  B列  C列  D列 1行目  111 2行目  222 3行目  333 4行目  444 5行目  555 6行目  666 7行目  777 8行目  888 9行目  999 上記のようなシートがあったとして、     A列  B列  C列  D列 1行目  111       999 2行目  222       333 3行目  333   ○   123   × 4行目  444 5行目  555 6行目  666 7行目  777 8行目  888 9行目  999   ○ 上記のように、例として C列の1行目に「999」と入力した場合、A列の9行目に「999」の数字があるので、その横のB列に「○」 C列の2行目に「333」と入力した場合、A列の3行目に「333」の数字があるので、その横のB列に「○」 C列の3行目に「123」と入力した場合、どこにも該当番号がないので、入力したC列の横、即ちD列の3行目に「×」を表示 要は、A列のどこかに該当数字があった場合にはその数字の横(B列)に「○」、どこにも該当数字が無い時には、入力した数字の横、D列に「×」を表示するような数式を考えています。 IF関数を使えばできるような気がするのですが、色々と試してみても中々うまくいきません。 下手な説明で分かり辛いかもしれませんが、どなたかご存知の方がいましたら、ご教授の程頂ければ幸いです。 どうぞ宜しくお願い致します。

  • エクセルのIF関数(条件に合った値かどうか調べる)

    エクセルの関数についてお聞きします。 次のような値があります。 A列 B列 C列 犬 鳥 PP 01 QQ 空 牛 魚 09 この組み合わせ以外のものを下記のように、D列に「×」と表示させ、条件に合うものを「●」と表示させる式を作ろうと思います。 例: A列 B列 C列  D列 犬 QQ 09   ● 02 鳥 空   × 牛 魚 11   × 01 QQ 空   ● このような式はどう作ればいいですか?IF関数ということは分かるのですが、そこから先が進みません・・・。 ちなみに調べたいデータは上の例のように数字、文字が混在しています。 どうぞよろしくお願いいたします。

  • 難解 条件に合えば〇を付ける 関数 

    添付ご覧ください。 4グループ、その中に4項目あります。 1行ごとにみて、条件に合う場合、その行に〇を付けるという関数を作りたいのですが、できないので助けてください。 条件というのは (1)各グループに必ず1つ以上A~Dのいずれかが含まれる。(空欄のみのグループ があってはダメ) (2)A~Dが1つずつ4グループに含まれる。(A、B、C、Cはダメで、A、B、C、Dとなれば〇。順番は不問) 条件を満たすのは、添付でいうと赤字でわかるようにした行です。 関数の方がありがたいですが、マクロでもいいです。 ちなみに私が試みたのは、 4グループのそれぞれで空欄がない、かつ、1行(A~P列)に4種以上の文字列がある場合は〇、という関数を作ったのですが、それでは、1グループに2種文字列があるときも〇になってしまいますのでダメでした。

  • 【エクセル】if関数 or条件に関して

    エクセル初心者です。 A列を検索条件とし B列から検索 一つでも該当がある場合にはCにチェックを入れる (もしくは該当セルの色を変える等) という関数を作りたいと思っています。 IF関数を使って試しに作ってみました。 =IF(OR($A$1=$B$1:$B$26,$A$2=$B$1:$B$26,$A$3=$B$1:$B$26),"○","×") ※結果は画像を参照お願い致します。 A列の(a,f,m)という文字列を条件としてB列を検索し、一つでも該当する場合には C列に○を、該当しない場合は×をつける。 検索条件を(A1,A2,A3)と3つだけの場合はこちらで対応出来るのですが、 本来やりたいものは、 (A列)検索条件が100個以上、 (B列)検索をかける対象も1000個以上といったものをやりたいので (A1,A2,A3・・)を手打ちだとものすごく時間がかかってしまいます。 なので、文字列の条件を簡単に範囲指定(複数指定)出来るような書き方があれば 教えて頂きたいと思い質問をさせて頂きました。 また、以下のIF文を最初に思いついたのですが、 こちらは書き方が間違っているようで、「!」が出てしまいました。 =IF($A$1:$A$3=$B$1:$B$26,"○","×") 自分ではなにがいけないのかがわからなかったので、 出来ればこちらの関数の矛盾点も指摘して頂きたいです。 関数の単語だけでも、なにかヒントを頂きたいと思っています。 よろしくお願いします。

  • EXCEL IF関数に関する質問

    EXCELです。よろしくお願いします。 A列(A1~A300まで) に0~100までの数字が入っています。 B列に80以上100以下ならA、    60以上79以下ならB、    40以上59以下ならならC、    20以上39以下ならD、    0以上19以下ならEを 入れたいのです。 そして C列にB列がAなら5、    B列がBならば4、 B列がCならば3、 B列がDならば2、    B列がEならば1 を入れたいのです。 B1とC1のどのような関数を入れればよいですか。 教えてください。 よろしくお願いします。  

  • ExcelのVLOOKUP関数?IF関数?

    下記のようなExcelがシート1にあります。  A     B     C 11/1 11/2 11/3 11/4 11/5 11/6 A列には月日が1日から31日まで入っています。 別のシート2には下記のようなExcelがあります。  A     B     C 11/1   1000    2000 11/1   2000    3000 11/3   5000    10000 11/3   7000    4000 11/5   500     3000 11/6   5000    1000 A列には月日が飛び飛びの状態です。 シート1には結果として下記のように表示したいのです。  A     B     C 11/1   3000    5000 11/2    0      0 11/3   12000   14000 11/4    0      0 11/5   500    3000 11/6   5000    1000 シート1の月日とシート2の月日の同一のものを探し、その値の合計をB列C列に表示する。 シート1の月日とシート2の月日が同一でないものは"0"と表示する。 この場合、どういった関数を使えばよいでしょうか。 また、関数式も具体的にどういったものにすればよいでしょうか。

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

    関数を使って下記図のようにしたいのですが可能でしょうか? A列が「在籍」になっているもののB列の文字をD列に反映させたいです。 これをD列に関数を入力して実現できますでしょうか?

専門家に質問してみよう