- ベストアンサー
同行複数セルの条件から特定の値を抽出する方法
- 同行複数セルの条件から特定の値を抽出する方法を教えてください。
- B~E列のセルには、A・B・C・Dのどれかが入力されています。
- 条件に基づいて、F列に特定の値を表示する方法をお伝えいたします。
- みんなの回答 (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/8249)
回答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/8249)
>「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/17069)
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/8249)
下記のような模擬データとして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% (364/1804)
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% (6803/9674)
ご質問にある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さんの提示式は実にお見事!脱帽です。」のメッセージにあるように、 式がゴチャゴチャしていない、シンプルなところがすごいのだろうなと思いました。 「空欄」のない表で、「ドロップダウンリスト」を勉強して試してみたいと思います。 またわからないことがありましたら、教えてください。よろしくお願いいたします。
お礼
回答ありがとうございました!早速使ってみて、こちらの希望通りの表示がされました。 また一番早く回答を頂いたので、ベストアンサーとさせていただきました。 ひとつ勉強になったことは、、、質問する際には条件をすべて出さないとダメなんだ、ということです。 実は、実際の表には、「A」「B」「C」「D」の他に、「E」と「T」と空欄の場合があるのです。 ですから、「B:E列が埋まっていないとき(→空欄の場合があるとき)」について 考えた式を作ってくださったので大変ありがたかったです。 (増えた「E」と「T」については「たぶんこうすれば良いだろう」と試したらアタリました。) 他の方も折角いろいろ考えて下さっていたのですが、「埋まっていないとき」の条件がなかったりすると、 表示が「0」や「FALTE」になったりとうまくいかったです。 回答しやすいよう、質問内容をシンプルにしようとしたのが裏目に出てしまいました。 またわからないことがありましたら、教えてください。よろしくお願いいたします。