プロが教えるわが家の防犯対策術!

VBAを使わずに関数で求めたいです。
関数得意な皆様にお知恵を拝借したく。
よろしくお願いします。

画像のように検索させたい単語(F列)が複数あります。
これをA列の各セル内で検索をさせます。
セル内でヒットする単語があったら、どの単語にヒットしたのか表示させたいです。
B列の結果のように。

IFを繋げて単語ひとつずつ検索するのは数十個あるので現実的ではなく、
また作ったとしてもうんざりするくらい式が長くなってしまいます。
excel2010なので64個までは繋げられるかとは思いますが・・・

簡潔な式で上手く検索する方法はないでしょうか?
どうぞよろしくお願いします。

「複数の単語を検索させてヒットしたら該当の」の質問画像

質問者からの補足コメント

  • ベストアンサーをつけると締め切られるということで、
    どこで全体のお礼をつけたらいいのかわからなかったので、補足欄に記載しちゃいます。
    すみません。

    皆さん参考になる式を教えてくださり、大変勉強になりました!&助かりました!
    本当にありがとうございました。

    ベストアンサーは初めて見る検索値の方法をお教え下さったCoalTarさんにさせて頂きます。
    ありがとうございました!

      補足日時:2015/12/13 11:51

A 回答 (5件)

>>=LOOKUP("ー-",MID(A2,FIND($F$2:$F$5,A2),LEN($F$2:$F$5)))


>もしよろしければ意味を教えて頂けると嬉しいです!
1. FIND($F$2:$F$5,A2)
は皆さんと同じ、4行1列の配列を返す数式。=FIND(検索文字列,対象)
 
2. LEN($F$2:$F$5)
も4行1列の配列。=LEN(文字列)

3. MID(A2,FIND($F$2:$F$5,A2),LEN($F$2:$F$5))
も中身が配列になっているので4行1列の配列。=MID(文字列,開始位置,文字数)

4. =LOOKUP("ー-",MID(A2,FIND($F$2:$F$5,A2),LEN($F$2:$F$5)))
 VLOOKUP関数の検索の型をTRUE とか、MATCH関数の照合の型を1として考えてください。
 で仮に=MATCH(8^8,B:B,1) としたとき、B列に入力してある数値の一番下、その行番号を返します。
 ただし、数値は8の8乗(16777216)未満であること。
 を踏まえて、
 今度はその文字列版。"ー-"は単純に文字として大きいと判断されます。
 "ー"(長音)だけでも良かったのですが、遊び心ですm(_ _)m
 だから、投稿した後、もうちょっと顔文字っぽく
 =LOOKUP("ーー",MID(A2,FIND($F$2:$F$5,A2),LEN($F$2:$F$5)))
 とすればよかったと、若干後悔してました。(ってそんなことで後悔するなって)

5. エラー処理は当方、EXCEL2003なのでIFERROR関数を使えないから
 =IF(COUNT(FIND($F$2:$F$5,A2)),LOOKUP("ーー",MID(A2,FIND($F$2:$F$5,A2),LEN($F$2:$F$5))),"なし")
 Find関数で見つからない場合エラー値しか返さないのでCOUNTの結果は0。つまり、Falseと判断される
 逆の場合、1(以上)でTrueと判断される

注1. 数字だけを検索することがないと判断してます
注2. 検索するセル範囲(F列)は すべて文字が埋まっているものとしています。
    • good
    • 0
この回答へのお礼

おぉぉー、ご丁寧に全ての解説をありがとうございます!
エラー処理はIFERRORで代用ができました!

>"ー-"は単純に文字として大きいと判断されます
これ、これです!検索したときもこの「文字として大きい」という説明が出ていましたが、
これが私には少々理解しにくいんですよね・・・
他にも使ってみて理解を深めていくしかないですね。

とにかく問題が解決できました。
大変勉強になりました。
本当にありがとうございました!

お礼日時:2015/12/13 11:43

エラー処理してませんが、


=LOOKUP("ー-",MID(A2,FIND($F$2:$F$5,A2),LEN($F$2:$F$5)))
    • good
    • 0
この回答へのお礼

こんな短い式で出るのか?と思ったら出たー!出ました!!
すごい!感動です!ありがとうございます!

何故これだけで計算できるのかイマイチ使い方が理解できませんがこれからもう少し調べてみます。
特に検索値の「"ー-"」は初めて拝見しました。
検索してみましたが説明が載っているようなページがあまりなく、
もしよろしければ意味を教えて頂けると嬉しいです!

お礼日時:2015/12/12 08:23

1.範囲 C1:C5 を選択


2.[数式]→[定義された名前]→[選択範囲から作成]を選択
3.“上端行”だけにチェックを入れて Enterキーをパシーッ
4.セル B2 に次の配列数式を入力して、このセルのフィル
__ハンドルを「エイヤッ!」とダブクリ
__=IFERROR(INDEX(検索したい単語,MATCH(TRUE,ISNUMBER(FIND(検索したい単語,A2)),0)),"なし")
「複数の単語を検索させてヒットしたら該当の」の回答画像3
    • good
    • 0
この回答へのお礼

こちらも値が出ましたー!!

やっぱり関数得意な方達ってすごい!
大変助かりました、ありがとうございました!

お礼日時:2015/12/12 07:53

こんばんは!


一例です。やり方だけ・・・

↓の画像のようにF列検索文字列データ範囲に空白がないようにしておきます。
(まずA列に入ることはないであろうと思われる「アスタリクス」で埋めています)
検索単語が増える場合はアスタリクスの部分に追加していきます。
とりあえず10行目までの数式にしています。

画像ではB2セルに
=IF(A2="","",IF(OR(ISNUMBER(FIND(F$2:F$10,A2))),INDEX(F$1:F$10,SUMPRODUCT(ISNUMBER(FIND(F$1:F$10,A2))*ROW(F$1:F$10))),"なし"))
配列数式になりますので、Ctrl+Shift+Enterで確定!
この画面からコピー&ペーストする場合は
上記数式をドラッグ&コピー → B2セルを選択 → 数式バー内に貼り付け → そのまま(編集可能なまま)
Ctrl+Shiftキーを押しながらEnterキーで確定!
B2セルのフィルハンドルで下へコピーすると
画像のような感じになります。

こんな感じではどうでしょうか?m(_ _)m
「複数の単語を検索させてヒットしたら該当の」の回答画像2
    • good
    • 0
この回答へのお礼

すごい!
値が返りましたー!!!

自分は普段ISNUMBERを使うことがありませんので発想になかったです、
また配列は苦手なので大変助かりました!

大変助かりました、ありがとうございました!

お礼日時:2015/12/12 07:50

んー。


配列数式で一発のような気もするけど、考えるのがめんどくさいw

A列に”AABBCCDDDDD123”など、複数の語句が検索結果に一致する文字列があった場合はどうするのだろう。
こういうところまで考えないといけません。
    • good
    • 0
この回答へのお礼

めんどくさいと言わずそこをなんとかw

ひとつのセル内に複数の語句は存在しません。
単語はある程度決まった言葉で、同じ語句が重複することもありません。

お礼日時:2015/12/10 22:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!