- 締切済み
エクセル関数で複数の特定文字を抽出したい(改)
前回の質問が とてもわかりにくかったようなので、 改めて質問させていただきます。 ご教示いただいた方々には 本当に申し訳ありませんが、 意図と違う動きになってしまっていたので・・。 とはいえ、皆さま ありがとうございました。 今後の参考にはしたいと思います! さて、本題ですが 前回の質問が 伝わりにくかったようなので、 配列を直してみました。 まず、そもそものデータが A2~L?まで入っています。 ※1行目は項目として使用しているので、 2行目からデータが入っているイメージです。 そこから、 M1に「区分」・N1に「種別」・・と追加します。 M列に同じ行のD列セルの内容から一部を判定し、抜き出し N列でも同じように 同行のE列セルの内容から一部を判定し、抜き出す といった動きをさせたいと悩んでいます。 特定文字が1種類であれば Find関数を用いて"*●●*"などの指定で抜き出せるのですが、 特定文字が複数ある場合、 どうやったらうまく表示させられるでしょうか? 例えば、 DとEには文章(のような文字列)が入るので そこから一定の単語を抜き出し、 区分と種別として使用できる表に更新したいと考えているわけです。 ご面倒かと存じますが、 良案をご教示いただけますと とても助かります! 是非、よろしくお願い致します。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- mt2015
- ベストアンサー率49% (258/524)
ANo.4です。 他の回答やその補足も読ませて頂きました。 あなたがやりたいことは私や他の回答者の回答で十分可能です。 ただ、式をそのままコピペではなく、実際の環境・データに合わせて変更する必要があります。 今までの回答をしっかり理解して式を変更してください。 それが難しいようでしたら、望んでいる結果も含めたサンプルデータを、ちゃんと解るように提示したうえで説明をするか、お金を払ってプロにやってもらいましょう。 冷たいようですが、文字と小さな画像でしかやり取りできないこのサイトでは限界があります。
- bunjii
- ベストアンサー率43% (3589/8249)
>M列に ブランド名3種 か その他 の4種類を抜き出して表示させたい 例えばデータNo.7のブランド名(D8セルの値)とは「ABC」ですよね? と云うことは「ABC」をそのままM8へ代入するのですか? データNo.9のD10セルは「その他」と思いますのでM10へはD10と同じ「その他」になるのでM2の数式は次のようになります。 =D2 M3以下はM2を下へコピーするだけで良いでしょう。 >N列に 受付・承認・マスター登録・システム登録 などのE列に含まれる一部の文字を抜き出して表示させたい 前述のようにE8セルの値が「ブランド登録新規受付」でN8には「受付」を抽出したいということですか? N列へ抜き出す文字列は「受付」、「承認」、「マスター登録」、「システム登録」の何れかということなら可能性はあります。 前回の質問(https://okwave.jp/qa/q9364009.html)の回答No.5に提示した数式を応用すれば良いと思います。 =INDEX({"登録","確認","承認"},1,MAX(INDEX((FIND({"登録","確認","承認"},K2&{"登録","確認","承認"})<LEN(K2))*COLUMN($A2:$C2),0))) 修正箇所はあなたの応用力で判断してください。 K2 → E2 $A2:$C2 → $A2:$D2 {"登録","確認","承認"} → {"受付","承認","マスター登録","システム登録"}
- bunjii
- ベストアンサー率43% (3589/8249)
>いったん、エクセルをそのままコピペしてみます。 各行のフィールド(列)区切りが無いので逆効果です。 A列:日付 B列:担当者 C列:申請内容 D列:処理内容 E列~J列:他1~6 K列:処理月 L列:区分 M列:種別 のように見えます。 「DとEには文章(のような文字列)が入るので」と列がズレているように思われます。 A列に#として番号が付いていればM列とN列に数式を設定することに矛盾は無いのですが、2行目以降のD列とE列の区切りが分からないので説明になりません。 また、処理月、区分、種別についても2行目以降のデータにフィールド区切りが無いので補足としては不完全です。 更に、質問文の「一定の単語を抜き出し」という記述の「単語」が補足されていません。 最後に回答No.3の数式からあなたの目的に合う形に修正することについては検討されたでしょうか? 回答の数式を丸写しで数式の処理内容を理解しないままで使うことは後日に禍根を残すので数式を理解した上で使うようにしてください。 現状の補足内容では丸写し用の数式を提示できません。
- mt2015
- ベストアンサー率49% (258/524)
具体例を提示できない理由でもあるのでしょうか? あいまいな説明に回答者が振り回されているように見えます。 こんな感じで如何でしょう。添付の図を見てください。 セルP2:R5を表示用データとして使用しますので、図の通りに入力しておいてください。 #Q2、R2セルには半角スペースを入れておいてください。 セルM2: =VLOOKUP(SUMPRODUCT((COUNTIF(D2,"*"& $Q$3:$Q$5 &"*")>0)*$P$3:$P$5),$P$2:$Q$5,2,FALSE) セルN2: =VLOOKUP(SUMPRODUCT((COUNTIF(E2,"*"& $R$3:$R$5 &"*")>0)*$P$3:$P$5),$P$2:$R$5,3,FALSE)
お礼
ご連絡がとても遅くなってしまい、大変失礼しました。
補足
体調を崩し、お礼と補足が遅くなってしまい申し訳ありません。 また、サンプルの画像を貼ろうと下準備をしたものの、どうやって画像を貼ったら良いのかわからず・・・ いったん、エクセルをそのままコピペしてみます。 ※見にくいかもしれませんが、知識不足ですみません。 # 日付 担当者 申請内容 処理内容 他1 他2 他3 他4 他5 他6 処理月 区分 種別 1 7/10 Aさん Aブランド登録 新規受付 ・・・ 7月 ブランドA 受付 2 7/13 Bさん Aブランド登録 申請承認 ・・・ 7月 ブランドA 承認 3 7/21 Cさん BBブランド変更登録 変更受付・・・ 7月 ブランドBB 受付 4 7/22 Cさん Aブランド登録 システム登録 ・・・ 7月 ブランドA システム登録 5 7/30 Aさん Aブランド登録 内容確認 ・・・ 7月 ブランドA 確認 6 8/1 Dさん BBブランド登録 申請承認 ・・・ 8月 ブランドBB 承認 7 8/5 Cさん ABCブランド登録 新規受付 ・・・ 8月 ブランドABC 受付 8 8/14 Bさん ABCブランド登録 申請承認 ・・・ 8月 ブランドABC 承認 9 8/16 Aさん その他 マスター登録 8月 その他 マスター登録 10 8/18 Cさん ABCブランド登録 システム登録 ・・・ 8月 ブランドABC システム登録 こんなイメージです。 関数での対応で実現可能でしょうか?
- bunjii
- ベストアンサー率43% (3589/8249)
回答No.2に対して補足が無いので勝手解釈の表を作成して検証しました。 貼付画像はExcel 2013で処理したものです。 「一部を判定」の文字列を前回の質問に提示された"*変更*"、"*新規*"、"*削除*"の組み合わせと"*登録*"、"*確認*"、"*承認*"の組み合わせです。 M2=IF(OR(COUNTIF(D2,{"*変更*";"*新規*";"*削除*"})),INDEX({"新規";"変更";"削除"},MAX(INDEX((FIND({"新規";"変更";"削除"},D2&{"新規";"変更";"削除"})<LEN(D2))*ROW(A$1:A$3),0))),"") N2=IF(OR(COUNTIF(E2,{"*登録*";"*確認*";"*承認*"})),INDEX({"登録";"確認";"承認"},MAX(INDEX((FIND({"登録";"確認";"承認"},E2&{"登録";"確認";"承認"})<LEN(E2))*ROW(A$1:A$3),0))),"") 数式内の{"新規";"変更";"削除"}と{"登録";"確認";"承認"}は固定値の配列データですが予め何処かのセル範囲に入力されていればセル範囲に置き換え可能です。
お礼
体調を崩し、お礼と補足が遅くなってしまい申し訳ありません。 また、サンプルの画像を貼ろうと下準備をしたものの、どうやって画像を貼ったら良いのかわかりませんでした。知識不足ですみません。
- bunjii
- ベストアンサー率43% (3589/8249)
前回の質問(https://okwave.jp/qa/q9364009.html)と曖昧さは同じようなものです。 模擬データを10行ほど提示してください。 現状の質問文では回答困難です。 >Find関数を用いて"*●●*"などの指定で抜き出せるのですが、 それは誤りです。 FIND関数の検索文字列にワイルドカードは使えません。 ●●が含まれるか否かの判定は検索文字列を●●として対象から位置を返します。 無い場合は#VALUE!エラーが返ります。 >DとEには文章(のような文字列)が入るので >そこから一定の単語を抜き出し、 DとEの具体的な文字列を10例(10組の例)と「一定の単語」とはどのような文字列なのかを提示しないと数式を組み立てて検証できません。 後出しジャンケン的な質問文になります。
お礼
ご連絡がとても遅くなってしまい、申し訳ありません。
補足
体調を崩し、お礼と補足が遅くなってしまい申し訳ありません。 また、サンプルの画像を貼ろうと下準備をしたものの、どうやって画像を貼ったら良いのかわからず・・・ いったん、エクセルをそのままコピペしてみます。 ※見にくいかもしれませんが、知識不足ですみません。 # 日付 担当者 申請内容 処理内容 他1 他2 他3 他4 他5 他6 処理月 区分 種別 1 7/10 Aさん Aブランド登録 新規受付 ・・・ 7月 ブランドA 受付 2 7/13 Bさん Aブランド登録 申請承認 ・・・ 7月 ブランドA 承認 3 7/21 Cさん BBブランド変更登録 変更受付・・・ 7月 ブランドBB 受付 4 7/22 Cさん Aブランド登録 システム登録 ・・・ 7月 ブランドA システム登録 5 7/30 Aさん Aブランド登録 内容確認 ・・・ 7月 ブランドA 確認 6 8/1 Dさん BBブランド登録 申請承認 ・・・ 8月 ブランドBB 承認 7 8/5 Cさん ABCブランド登録 新規受付 ・・・ 8月 ブランドABC 受付 8 8/14 Bさん ABCブランド登録 申請承認 ・・・ 8月 ブランドABC 承認 9 8/16 Aさん その他 マスター登録 8月 その他 マスター登録 10 8/18 Cさん ABCブランド登録 システム登録 ・・・ 8月 ブランドABC システム登録 こんなイメージです。 関数での対応で実現可能でしょうか?
- msMike
- ベストアンサー率20% (368/1813)
》 改めて質問させていただきます え?「前回」の回答者を無視して「改めて」はないでせう! 「前回」のスレッドに、何処がどのように「意図と違う動きになってしまっていた」のか補足されたい!
補足
ご連絡が大変遅くなり、また、前回の質問も含め、わかりにくい説明だったこと、反省しております。申し訳ありませんでした。
補足
みなさんの回答でご教示いただいた数式を、それぞれサンプルに当てはめてみてのですが、どうもうまく表示されませんでした。 →当方の当てはめが うまく適用できていなかったのかもしれませんが・・ ちなみに、 サンプルでは D列には ブランド名が3つと その他 E列には 処理内容として、新規受付・システム登録 など それを M列に ブランド名3種 か その他 の4種類を抜き出して表示させたい N列に 受付・承認・マスター登録・システム登録 などのE列に含まれる一部の文字を抜き出して表示させたい というのがイメージするものです。 抜き出したい文字数は、全て2文字!などというわけではなく 固定数ではないのですが・・ 可能でしょうか?