ExcelのIF関数で条件に応じたグループを抽出する方法
- 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グループ ・・・つづく にあてはめて、条件の●グループを引っ張ってきたいのですが、 どのような関数を入れたらいいのでしょうか? よろしくお願いします。
- hirodayo33
- お礼率92% (38/41)
- その他MS Office製品
- 回答数9
- ありがとう数11
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
条件が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) のような式で可能かと思います。
その他の回答 (8)
- kagakusuki
- ベストアンサー率51% (2610/5101)
> 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以下に貼り付けて下さい。 以上です。
お礼
ありがとうございます。 本当にいろんな考え方や関数があるのだと驚いております。 とても参考になりました。ありがとうございました。
- MackyNo1
- ベストアンサー率53% (1521/2850)
添付画像を忘れていましたのでアップします。 なお、操作の目的や実際の表のレイアウトだけでなく、何を(どの部分を)抽出したいのかなどの条件を詳細に説明されたほうが、皆さんからより的確な回答が寄せられると思います(目的や条件によって最も効率的な操作が違います)。
お礼
なるほど、なるほど。 たびたびありがとうございます!
- MackyNo1
- ベストアンサー率53% (1521/2850)
ご希望の関数ではありませんが、複雑な条件にも対応できる最も簡単で確実な方法である、フィルタオプションの設定を利用する方法を提示します。 グループ分け対応表で、「データ」「フィルタ」で抽出したいグループを選択し、この抽出範囲をコピーし、条件のセル(添付画像のE2:F3セルの部分)に貼り付けます(1行目は項目名)。 これで「データ」「フィルタ」「フィルタオプションの設定」(2007は「詳細設定」)をクリックし、リスト範囲を少し大きめに選択しておき(今後のデータの追加に対応できるようにする)、検索条件範囲にE1:F3を指定し、抽出先を「指定した範囲」にして、例えばE5セルを選択します。 上記の操作を、マクロの記録で実行すれば、自動化することも可能です。 なお、この場合は、上記のフィルタ操作の代わりに最初に提示した数式(No4の回答)で該当するA列とB列のデータを表示させておき(グループを選択すると対応するデータが表示される)、名前定義を利用してこの検索条件範囲を自動的に取得できるようにする必要があります。 もしこの方法に興味があれば具体的な操作法を提示しますので、ご連絡ください。
お礼
ありがとうございました。 時間がある時にきっちり実践してみますので その際不明な点がありましたら、ご連絡させていただきます。
- MackyNo1
- ベストアンサー率53% (1521/2850)
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件以上ないという条件の数式になっています。 重複データがあるなど、データベースにさらに条件が付くようであれば、数式で対応するよりも(数式だけでも対応できる可能性はあります)フィルタオプションの設定で抽出するほうが計算負荷も少なく簡単なような気がします。
お礼
修正とアドバイス、ありがとうございます!
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 (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)
お礼
ありがとうございます。 使ったことのない関数なので、ちょっとチャレンジしてみます。 ありがとうございました。
- MackyNo1
- ベストアンサー率53% (1521/2850)
グループ分けの一覧表があり、データーベースからそのグループのデータを抽出したいという意味なら、以下のような関数で表示できます(添付画像参照)。 抽出したいグループ名をE1セルに入力し、I~K列にグループ分けの一覧表がある場合、E3セル(どのセルでも同じ数式)に以下の式を入力し、右方向および下方向に適当数オートフィルします。 =INDEX(A:A,SMALL(INDEX(($K$2:$K$100<>$E$1)*1000+ROW($K$2:$K$100),),ROW(A1)))&""
お礼
ありがとうございます。 イメージを挿入いただけたので、とってもわかりやすかったです。 ありがとうございました。
- yy_kd
- ベストアンサー率25% (5/20)
組み合わせが沢山あるようなので、マクロで仕分けをしたらいかがですか? 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列にグループ分けをします
お礼
回答いただき、ありがとうございます。 残念ながら、マクロが得意ではなく短時間で処理できそうにありません。 今後の参考にさせていただきます。ありがとうございました。
- metabo-poo
- ベストアンサー率33% (45/136)
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”) とグループの数だけ入れるだけです
お礼
早々にありがとうございました。 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関数でなくてもよいのですが、未処理(キャンセル扱い除く)条件のみの数字を表示させる 方法をご教示お願いいたします。
- ベストアンサー
- その他MS Office製品
- エクセル 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種文字列があるときも〇になってしまいますのでダメでした。
- ベストアンサー
- Excel(エクセル)
- 【エクセル】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,"○","×") 自分ではなにがいけないのかがわからなかったので、 出来ればこちらの関数の矛盾点も指摘して頂きたいです。 関数の単語だけでも、なにかヒントを頂きたいと思っています。 よろしくお願いします。
- ベストアンサー
- Linux系OS
- 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列に関数を入力して実現できますでしょうか?
- ベストアンサー
- オフィス系ソフト
お礼
ありがとうございます。 私のスキルレベルでは、ご教示いただいた内容が一番スムーズに作業できそうです。 助かりました、ありがとうございました。