同行複数セルの条件から特定の値を抽出する方法
- 同行複数セルの条件から特定の値を抽出する方法を教えてください。
- B~E列のセルには、A・B・C・Dのどれかが入力されています。
- 条件に基づいて、F列に特定の値を表示する方法をお伝えいたします。
- ベストアンサー
同行複数セルの値から条件で特定の値を抽出したい
次のようなことをするにはどうすればよいですか やりたいこと:複数の判定から、総合判定を出したい。 1 A B C D E F 2 血圧 体重 血液検査 運動 総合判定 3 佐藤 B C A D 【ココ】 4 鈴木 A A A B 【ココ】 B~E列のセルには、A・B・C・Dのどれかが入力されている。 B~E列のうち、Dが1つでもあれば、F列に「D」 B~E列のうち、Dがなく、Cが1つでもあればF列に「C」 B~E列のうち、D・Cがなく、Bが1つでもあればF列に B~D列のうち、D・C・Bがなく、AのみであればF列に「A」 となるように、F列に表示するには、F列【ココ】にはどんな式を入れればよいですか。 ちなみに、F3には「D」が、F4には「B」が表示されるようにしたいのです。 よろしくお願いいたします。 ※別の方法でもっと簡単にできる方法がありましたら、重ねて教えて下さい。
- KGD01504
- お礼率55% (16/29)
- Excel(エクセル)
- 回答数9
- ありがとう数6
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
ABCD以外が入らないならこんな感じでどうでしょうか。 =IF(COUNTA(B3:E3)<>4,"-",IF(COUNTIF(B3:E3,"D"),"D",IF(COUNTIF(B3:E3,"C"),"C",IF(COUNTIF(B3:E3,"B"),"B","A")))) B:E列が埋まっていないときは「-」を表示します。
その他の回答 (8)
- bunjii
- ベストアンサー率43% (3589/8248)
回答No.8の数式を一部訂正します。 エラー防止を考慮しました。 =CHOOSE(MAX(INDEX((B2:E2={"";"A";"B";"C";"D";"E";"T"})*ROW(A$1:A$7),0)),"","A","B","C","D","E","T") ↓ =CHOOSE(MAX(INDEX((B2:E2={"A";"B";"C";"D";"E";"T"})*ROW(A$1:A$6),0))+1,"","A","B","C","D","E","T")
- bunjii
- ベストアンサー率43% (3589/8248)
>「E」と「T」はどうにかなったのですが、「空欄」があると表示がエラーになってしまい、このあとどうすればよいのかわかりませんでした・・・。 すべてが空欄のときエラーになることは回答No.4に明示しました。 対策は幾つかの方法があります。 一番簡単なものを1つだけ提示します。 =CHOOSE(MAX(INDEX((B2:E2={"";"A";"B";"C";"D";"E";"T"})*ROW(A$1:A$7),0)),"","A","B","C","D","E","T") これはCHOOSE関数の第1引数を算出する数式を工夫してすべてが空欄のとき1となり、その他は文字列の順位で2~7までを検出しています。 尚、すべてのセルに関係のない文字列が入力されていると別の要因のエラーになります。 Excel 2007以降のバージョンではIFERROR関数ですべてのエラー原因に対応できるのでエラー対策が考え易いかも知れません。
- tsubu-yuki
- ベストアンサー率46% (179/386)
> Excel素人でして 大丈夫です。ご質問を拝見すればなんとなく、分かります(笑)。 ですが、IF関数とCOUNTIF関数については ご自身で少し調べていただきたいところです。 それが脱素人・脱初心者への一歩ですから。 さて。 > 「E」と「T」と「空欄」の場合があるのです。 はい、了解です。 ・・・が、それぞれの時にどうしたいのか?が抜けちゃいましたね。 > 特に「空欄」を とのことですが、回答者から見ても同じことが言えるのです。 「空欄」がどの程度あったらどうするのか?が欲しいところです。 まずは私(のみならず、皆さん)が提示した式を使って色々お試しください。 自身ののみ解説すると、 「B列~E列が全て空欄であればF列にも空白を返す」 ようにしてあります。 ※提示の式だとA~D以外の文字列でも空白が返りますが。 条件範囲内にAもBもCもDも無い⇒全て空欄 (あるいは条件外の何か)ですからね。 それでは足りないのであれば、条件を極力わかりやすく詳細にご説明ください。 ・・・という中に「空欄を数える」のヒントも含んでいます。 まぁつまり =COUNTIF(B3:E3,"") で空白を数えてくれちゃいます。 つまり「””⇒空白」です。 ※厳密には少し違いますよ。 でも、今の段階ではそれで覚えていてもまだいけます。 おいおい覚えていけば良いです。 さておき。 エクセルではIF関数を重ねてやると概ね「前から順に」処理します。 ちなみにIF関数は =IF(条件,そうだったら,そうじゃなかったら) という関数です。 なので先般の私が提示した式をざっくり解説すると 「ぞうじゃなかったら」のところにどんどん重ねてやって、 「どれも当てはまらなかったら空白("")を返しなさいね」 という式なのですね。 つまり =IF(範囲に"D"があったら,"D"を,無い場合(範囲に"C"があったら,"C"を,無い場合・・・・(最終的にドレも無かったら空白("")を)))) という式なのです。んー、日本語で表現するのは難しい(笑)。 余計混乱しちゃったらごめんなさいです。 ってことは、 「E」「T」「空欄」の場合も同様に重ねてやればOKぽいですね。 重要なのは「優先する順番」だけです。 健康診断には明るくないので何とも言えませんが、 T→E→・・・→A→全部空欄なら空白 でいいのかなー、とエスパーし、改めて F3セル:=IF(COUNTIF(B3:E3,"T"),"T",IF(COUNTIF(B3:E3,"E"),"E",IF(COUNTIF(B3:E3,"D"),"D",IF(COUNTIF(B3:E3,"C"),"C",IF(COUNTIF(B3:E3,"B"),"B",IF(COUNTIF(B3:E3,"A"),"A","")))))) でいけるような気がしますよ。 一つでも空欄があれば空白を、なら・・ 先頭にそのIF関数式を入れてやればOKですね。 うん、重ねてアレですが・・・ 余計に解りづらくしていたらごめんなさいです(汗)。
- tsubu-yuki
- ベストアンサー率46% (179/386)
ごく単純な関数で頑張るなら F3セル:=IF(COUNTIF(B3:E3,"D"),"D",IF(COUNTIF(B3:E3,"C"),"C",IF(COUNTIF(B3:E3,"B"),"B",IF(COUNTIF(B3:E3,"A"),"A","")))) いわゆる、IFのネストと言われるやり方です。 半角と全角は区別しますが、大文字小文字は混在してもOKです。 関数自体が単純で初心者さんでもなんとかなる(と思われる)のですが、 条件が増えれば増えるだけ読みづらくなるのが欠点ではありますね。 私が作って自己満足で済ます(他人に配布しない)なら、 F3セル:=CHAR(MAX(CODE(B3:E3))) ※CTRL+SHIFT+ENTERで確定(配列数式) を使うかなぁ・・と少しだけ考えてみました。 2番さんと同じ考え方ですが、 これだと項目(対象の列数)が増えても式がスッキリしますしね。 配列数式は他人さんに説明するのが億劫なところが最大の問題です(笑)。
お礼
回答ありがとうございました! ですが、、、すみません。こちらの、条件をすべて出していなかったので せっかく回答頂いた式ですが使いこなせませんでした。 実は、実際の表には、「A」「B」「C」「D」の他に、「E」と「T」と「空欄」の場合があるのです。 特に「空欄」をどうすればよいのか判らず・・・。 回答しやすいよう、質問内容をシンプルにしようとしたのが間違いでした。 お手間をかけて申し訳ありません。 「[No.2]の asciizさんと同じ考え方の式とのこと。 式がゴチャゴチャしていない、シンプルなところがすごいのだろうなと思いました。 ですが、Excel素人でして「配列数式」についても???な状態で・・・。本当にすみません。 もっと勉強して理解しようと思います。 またわからないことがありましたら、教えてください。よろしくお願いいたします。
- imogasi
- ベストアンサー率27% (4737/17068)
VBAでユーザー関数を作ってみた。 データ例 F列は当初は空白ですが、下記回答の結果です。 1 A B C D E F 2 氏名 血圧 体重 血液検査 運動 総合判定 3 佐藤 B C A D D 4 鈴木 A A A B B 5 木村 A A A C C 6 大野 A A A A A 7 佐野 B C A A C 8 木下 A D A B D 9 熊本 B B A C C 10 東 A B A B B 11 西村 C C B B C ーーー 標準モジュールに Function hantei(b) i = b.Row Set Rng = Range("C" & i & ":F" & i) ' MsgBox Rng.Address '-- If WorksheetFunction.CountIf(Rng, "D") > 0 Then hantei = "D" Exit Function ElseIf WorksheetFunction.CountIf(Rng, "C") > 0 Then hantei = "C" Exit Function ElseIf WorksheetFunction.CountIf(Rng, "B") > 0 Then hantei = "B" Exit Function ElseIf WorksheetFunction.CountIf(Rng, "A") > 0 Then hantei = "A" Exit Function Else hantei = "x" End If End Function シートのG3セルに =hantei(B3) と関数を入れる。下方向に式を複写。 結果データ例の通り。 ーー 本件は関数だけでもできるが、条件(=優先関係)が複雑になると、 VBAなら、きめ細かくコードを修正して対処できる場合が出てくると思う。
お礼
回答ありがとうございました! ですが、、、すみません。こちらの、条件をすべて出していなかったので せっかく回答頂いた式ですが使いこなせませんでした。 実は、実際の表には、「A」「B」「C」「D」の他に、「E」と「T」と「空欄」の場合があるのです。 特に「空欄」をどうすればよいのか判らず・・・。 また、Excel素人だとも書いておけばよかったです。 VBAはほとんど使用したことがないので、VBAを始める画面でさえ出せませんでした・・・。 回答しやすいよう、質問内容をシンプルにしようとしたのが間違いでした。 お手間をかけて申し訳ありません。 VBAについては今後勉強していきます。 またわからないことがありましたら、教えてください。よろしくお願いいたします。
- bunjii
- ベストアンサー率43% (3589/8248)
下記のような模擬データとしてF2セルへ数式を設定します。 A B C D E F 1 名前 血圧 体重 血液検査 運動 総合判定 2 佐藤 B C A D 【ココ】 3 鈴木 A A A B 【ココ】 =CHOOSE(MAX(INDEX((B2:E2={"A";"B";"C";"D"})*ROW(A$1:A$4),0)),"A","B","C","D") F2セルを下へ必要数コピーすれば目的通りになるでしょう。 但し、B列からE列までAからDまでの文字が無い(すべてが空欄も含む)ときはエラーになりますのでエラー防止が必要のときはIF関数またはIFERROR関数で対処してください。
お礼
回答ありがとうございました! ですが、、、すみません。こちらの、条件をすべて出していなかったので せっかく回答頂いた式ですが使いこなせませんでした。 実は、実際の表には、「A」「B」「C」「D」の他に、「E」と「T」と「空欄」の場合があるのです。 「E」と「T」はどうにかなったのですが、「空欄」があると表示がエラーになってしまい、 このあとどうすればよいのかわかりませんでした・・・。 回答しやすいよう、質問内容をシンプルにしようとしたのが間違いでした。 お手間をかけて申し訳ありません。 回答の式は、空欄がない表の場合に使ってみたいと思います。 またわからないことがありましたら、教えてください。よろしくお願いいたします。
- msMike
- ベストアンサー率20% (363/1775)
F3: =IF(COUNTIF(B3:E3,"A")=4,"A",IF(COUNTIF(B3:E3,"D"),"D",IF(COUNTIF(B3:E3,"C"),"C","B"))) でも、[No.2]の asciizさんの提示式は実にお見事!脱帽です。
お礼
回答ありがとうございました! ですが、、、すみません。こちらの、条件をすべて出していなかったので せっかく回答頂いた式ですが使いこなせませんでした。 実は、実際の表には、「A」「B」「C」「D」の他に、「E」と「T」と「空欄」の場合があるのです。 「E」と「T」はどうにかなったのですが、「空欄」があると表示が「0」になってしまい、 このあとどうすればよいのかわかりませんでした・・・。 回答しやすいよう、質問内容をシンプルにしようとしたのが間違いでした。 お手間をかけて申し訳ありません。 またわからないことがありましたら、教えてください。よろしくお願いいたします。
- asciiz
- ベストアンサー率70% (6637/9404)
ご質問にある4つの条件判断は、以下の一文にまとめられると考えました。 「4つの判定値のうち、最も大きいものを表示する。」 大きいっていうのは A < B < C < D の順番でってことです。 ただ、Excelは文字列の大小比較はできないので、「文字コード」に直して、比較します。 文字から文字コードにするのには、CODE 関数。 文字コードから文字に戻すのは、CHAR 関数。 そして複数の物のうち、最も大きいものを返すのは、MAX 関数。 以上を組み合わせると、 F3 =CHAR(MAX(CODE(B3), CODE(C3), CODE(D3), CODE(E3))) となりました。 以上を入力して、F3をF4にコピーすれば4行目用になります。 注意しなければいけないのは、「A~Dを半角もしくは全角、どちらかに統一すること」。 そして「余計な空白などが混じらないようにすること」。 もし手入力で、半角B・C・Dがあるところに、全角の「A」が混じると、漢字である全角「A」が一番大きいものとなって表示されてしまいます。 そのためには、小さいテーブルを作ってA~Dをドロップダウンリストから選択させるようにすればいいと思います。
お礼
回答ありがとうございました! ですが、、、すみません。こちらの、条件をすべて出していなかったので せっかく回答頂いた式ですが使いこなせませんでした。 実は、実際の表には、「A」「B」「C」「D」の他に、「E」と「T」と「空欄」の場合があるのです。 特に「空欄」をどうすればよいのか判らず・・・。 (あと、「小さいテーブルを作ってA~Dをドロップダウンリストから選択させるようにすればいい」というのも ???でして・・・。Excel素人だとも書いておけばよかったです。) 回答しやすいよう、質問内容をシンプルにしようとしたのが間違いでした。 お手間をかけて申し訳ありません。 回答3番msMileさんの「[No.2]の asciizさんの提示式は実にお見事!脱帽です。」のメッセージにあるように、 式がゴチャゴチャしていない、シンプルなところがすごいのだろうなと思いました。 「空欄」のない表で、「ドロップダウンリスト」を勉強して試してみたいと思います。 またわからないことがありましたら、教えてください。よろしくお願いいたします。
関連するQ&A
- 条件にあった複数データを組合わせて別のセルに表示するには?
例えば、以下のデータがセルに入っていたとして A列には姓 B列には名 A1:鈴木 B1:一郎 A2:鈴木 B2:次郎 A3:鈴木 B3:三郎 A4:佐藤 B3:あきら A5:佐藤 B3:けんた 同じ姓にあてはまるデータの名を、組合わせて別のセルに表示したいのです。 結果イメージ C1:鈴木 D1:一郎 次郎 三郎 C2:佐藤 D2:あきら けんた このようなことAccessかExcelで出来ますか?
- ベストアンサー
- オフィス系ソフト
- 別シートの条件に合うセルを抽出したい
例えば、sheet1に A列 B列 C列 1/1 東京 佐藤 1/1 横浜 鈴木 1/2 北海道 山田 1/3 大阪 加藤 と入力したとします。 このとき、sheet2のA1に1/1と入力すると、Sheeet2のA2、A3に1/1、B2、B3に東京、横浜、C2、C3に佐藤、鈴木と自動的に表示されるようにしたいのですがどうしたらよいのでしょうか?
- 締切済み
- オフィス系ソフト
- 複数の条件に合う行の特定のセルを返す
ほぼ同じ質問をいくつか見かけたのですが、その式を自分の内容に置き換えても全く希望通りの結果が出ず、質問させてください。 2 1 Aさん 4 1 Bさん 5 1 Cさん 2 2 Dさん 5 2 Eさん セルのA1には「2」、B1には「1」、C1には「Aさん」と入ったシートがあり、例えばセルのD1に A列、B列ともに「2」が入力されている4行目のC列「Dさん」という値が反映して欲しいのですが、その関数が分からなく困っています。 他にもA列が「5」、B列が「1」の結果が(Cさん)が欲しい時もあり、条件にはA列の値とB列の値を使う方法で考えています。 お知恵を貸してください。
- 締切済み
- オフィス系ソフト
- エクセル:複数セルからの参照
お世話になります。 A,B,C列にデータが入っています。 D,E,F列に参照のためのデータがあります。 A,B,C列はそれぞれD,E,F列に対応しています。 A,B,C列と同じ並びのデータが入っている行をD,E,F列から探し、その隣のG列の値をH列に返す。 D,E,F列の並びが重複する行はありません。 A,D列は場所の名前、B,C,E,F列には数字が入っている。 例) A1に事務室 B1に20 C1に3 が入っているとする。 D/E/F列が 事務室/20/3 の並びになっているのが10行目の場合、H1にG10のセルの値を返す。 この場合、H列にはどんな計算式を入れておけばよいのでしょうか? A,B,C列と同じ並びのデータがD,E,F列で見つからない場合は空白をH列に返す。 ちなみにD/E/F列が 事務室/20/3 の並びになっている行は10行目しかないです。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 指定した3つのセルのデータを抽出し別表を作成する
A表(A~F列、1~7行)のうちB、D、F列にデータが入力表示されたデータを抽出して別のB表(A,B,C列、1~7行)を作成するためのエクセル関数をご教授下さい。下図のとおり、F列は同じデータですのでVLOOK関数で表示できるのですが、B,D列にデータが入力されていない場合は、表示しないようにしたいのです。よろしくお願いします。 また、3つのうち一つでもデータがない場合は、表示させない方法でも結構ですよろしくお願いします。 [A表] A B C D E F 1 5 8 9 12 2 ○ 2 4 ○ 3 7 10 ○ 4 ○ 5 3 4 10 5 ○ 6 ○ 7 × [B表] A B C 1 8 12 ○ 2 7 10 ○ 3 4 5 ○ 4 5 6 7
- ベストアンサー
- その他(ITシステム運用・管理)
- 条件1つで複数の値を抽出することはできませんか。
エクセルのことなのですが、条件1つで複数の値を抽出してきたいと思っています。 しかし、様々な本やインターネットのサイトを参照したのですがうまくできません。 内容なのですが、「シート1」というシートがありこのシートを「シート2」のように番号で分けて、横に並べるようなシートを作りたいと思っています。 シート1 番号 品目 100 A 100 B 101 C 101 D 101 E 101 F 101 G 101 H 101 I 102 J 103 K 103 L シート2 番号 品目 100 A B 101 C D E F G H I 102 J 103 K L すみませんが教えていただけないでしょうか。 よろしくお願いします。
- 締切済み
- 情報工学
- 数式が入ったセルで値がないときは詰めたい
いつもお世話になります。 WINDOWS7 EXCELL2010です。 今回ご指導を戴きたいのは赤枠内です。 A Bは手入力します。 その結果、C D E Fの各列には下記の数式で表示されます。 例えば、 E5 E8 E9 の各列のように空白が出るので「見易く」 したいため詰めるのにどんな関数を入れればできますか。 添付画像で各列の説明です A 手入力 B 手入力 C =IF($B2="","",VLOOKUP($B2,一覧表!$A$2:$B$20,2,FALSE)) D =IF(COUNTIF($B$2:B2,B2)=1,ROW(B1),"") E =IF(K2="","",C2) F =IF(L2="","",COUNTIF($C$2:$C$19,"*"&C2&"*")) どうかよろしくお願いします。
- ベストアンサー
- その他MS Office製品
- 複数セルから特定の文字を検索して、その対象セルを抽出したい
エクセルで関数、VBAを使用して、下記のようなDATA抽出を行ないたいのですが、どなたか、ご指導いただけないでしょうか。 たとえば、2種のシートが、各々、 <シート1> 列A 列B 行1 A1 ABCD-123 行2 B23 EFGH-456 行3 C456 あいうえお <シート2> 列A 列B 列C 列D 列E 行1 A1 A2 A3 行2 B23 C5 A4 行3 A5 B2 C456 ・・・・・・・となっている場合、 <シート2> の列D 行1 へ "A1"と入力(記載)がある場合、列Eに ”ABCD-123”と表示(抽出)を行ないたい。 セルには、文字、数字、記号が入ります。 よろしくお願い致します。
- ベストアンサー
- オフィス系ソフト
- エクセル 複数条件でのLOOKUP
エクセルで、特定のキーで別表を参照してそこから値を表示するにはVLOOKUPを使用すると思いますが、複数条件でLOOKUPする事は可能でしょうか。 例えば、 シート1のA列とD列 シート2のB列とF列 2つの条件に合う(シート1A列=シート2B列 and シート1D列=シート2F列)レコードをシート2のG列からシート1のE列に表示したいと言う場合です。 シート1 A B C D E 1 01 ** ** 01 2 01 ** ** 02 うう 3 05 ** ** 01 ああ ↑ シート2 A B C D E F G 1 ** 08 ** ** ** 01 いい 2 ** 01 ** ** ** 02 うう 3 ** 05 ** ** ** 01 ああ 判りにくい説明で申し訳ありませんが、よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- EXCELで指定した行内にある値以外を抽出する
こんにちは。 業務で困っていることがあるので、知恵をお貸し下さい。 EXCELで指定した行内にある値以外を抽出したいのです。 A1:対象品番 B1:対象外 C1:数量 D1:納入日 E1:品番 F1:数量 A2:HHH6030 B2: C2: D2:09/9/29 E2:HIH6260 F2:1 A3:HHH6060 B3: C3: D3:09/9/29 E3:IIHK110 F3:84 A4:HHH7000 B4: C4: D4:09/10/1 E4:HHH6030 F4:24 A5:HHH7130 B5: C5: D5:09/10/1 E5:IHH7000 F5:8 A6:HHH7140 B6: C6: D6:09/10/1 E6:HHH7130 F6:2 とあります。 ●E列の中から、A列にある値以外のものを抜き出し、B列に値を返す。 ●の作業をしたいので、VBAを使ってもかまいませんので、何か良い方法があれば教えてください。 よろしくお願いします。
- ベストアンサー
- その他(業務ソフトウェア)
お礼
回答ありがとうございました!早速使ってみて、こちらの希望通りの表示がされました。 また一番早く回答を頂いたので、ベストアンサーとさせていただきました。 ひとつ勉強になったことは、、、質問する際には条件をすべて出さないとダメなんだ、ということです。 実は、実際の表には、「A」「B」「C」「D」の他に、「E」と「T」と空欄の場合があるのです。 ですから、「B:E列が埋まっていないとき(→空欄の場合があるとき)」について 考えた式を作ってくださったので大変ありがたかったです。 (増えた「E」と「T」については「たぶんこうすれば良いだろう」と試したらアタリました。) 他の方も折角いろいろ考えて下さっていたのですが、「埋まっていないとき」の条件がなかったりすると、 表示が「0」や「FALTE」になったりとうまくいかったです。 回答しやすいよう、質問内容をシンプルにしようとしたのが裏目に出てしまいました。 またわからないことがありましたら、教えてください。よろしくお願いいたします。