• 締切済み

Excel 複数セル内の文字列を検索する関数

シート1にはA列に会社名、B列に業種が入っています。シート2のC列にシート1のA列の会社名を含む文字列が入っています。ここで、C列にA列の会社名が含まれていた場合、シート2のD列に会社名に対応する業種を入力したいと考えています。データ数は100-200行ほどです。 関数で表現したいと考えているのですが、簡潔に表現する方法が思いつきません。ご協力お願いします。

みんなの回答

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.5

[No.4補足]へのコメント、 》 解決の糸口が見えてきました それは良かった、精々頑張って頂いて、スマートな解決法を見付けたら、是非教えてください。 ちなみに、貴方なら「11行目以降空白」問題の(原因は兎も角として、既に暗示済みの)解決策に気付くのは朝飯前と思っておりました。ま、此方も精々頑張ってくださいネ。

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.4

何方かの受け売りですが、 添付図参照 Sheet2!D2: =IFERROR(VLOOKUP(IF(OR(ISNUMBER(FIND(Sheet1!A$2:A$10,C2))),INDEX(Sheet1!A$1:A$10,SUMPRODUCT(ISNUMBER(FIND(Sheet1!A$1:A$10,C2))*ROW(Sheet1!A$1:A$10)))),Sheet1!A$2:B$10,2,FALSE),"") 【お断り】上式は必ず配列数式として入力のこと

rotoiti
質問者

補足

データが100行以上あるので、検索値の範囲などを書き換えてからご教示いただいた関数を試してみたのですが、どうにも11行目以降が空白で表示されてしまいます。教えていただいた中のFind関数の部分だけでも試してみたのですが、Find関数内で11行目以降にエラー(#Value!)がでるようです。当方Libraofficeなのですが、Libra特有のエラーなのかもしれないとも疑っているですが、どうにも腑に落ちません。この件をもう少し調べてみたいので、別質問で質問させていただくことにいたします。ご教示いただいた関数自体は素晴らしくて、解決の糸口が見えてきました。ありがとうございました。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.3

>データ数は100-200行ほどです。 模擬データを10例ほど提示してください。 >関数で表現したいと考えているのですが、簡潔に表現する方法が思いつきません。 組み込み関数には目的に叶うものが見当たりません。 検索文字列:"ABCDE" 検索対象:{"ABC","BCD","CDE"} 上記の条件では検索文字列の一部を切り落とすための条件が提示されていなければなりません。 検索文字列:"ABCDE" → LEFT("ABCDE",3) → "ABC" 上記のように検索文字列を加工する規則が無いと数式を組めません。 従って、該当する会社名を探せません。

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.2

Libraofficeが手元にないのでネット検索したところ Sheet1!A:BはSheet1.A:Bみたいですね。 =VLOOKUP("*" & C1 & "*",Sheet1.A:B,2,0) ただ、"*" & C1 & "*"が有効かどうかは検証できないのでわかりません。

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.1

=VLOOKUP("*" & C1 & "*",Sheet1!A:B,2,FALSE) でいかがですか。

rotoiti
質問者

補足

早速のご返答ありがとうございます。シート名の参照がうまくいかないようで、#Name?が出てしまいます。すごく初歩的で申し訳ないのですが、Sheet1!以外に参照方法はありますでしょうか?それと、当方Libraofficeを使っているのですが、MSと参照方法の記述に違いがあったりするのでしょうか?

関連するQ&A

  • excelで文字列を検索する関数を教えてください。

    いつもお世話になります。 エクセルの関数で、シートAのセルA1に入っている文字列をシートBのC列から探し出し、同じ文字列があればTrueをなければFalseを返す関数を教えてください。 わからないながらも色々調べてみたのですが、検索にはVLOOKUPがよく使われているようですが、シートBのC列は、データの並べ替えができないので、VLOOKUPは、使えないのです。 よろしくお願いします。

  • エクセルで文字列検索の関数

    エクセルのワークシート関数で質問です。 「A1セルに、文字列、A、B、Cの何れかを含み、かつCDを含まない」ことを調べる関数です。 素直に、 =AND(ISNUMBER(FIND("A",A1)),ISNUMBER(FIND("B",A1)),ISNUMBER(FIND("C",A1)),NOT(ISNUMBER(FIND("CD",A1)))) と長ったらしく書けば取得できることはわかるのですが、もっと簡潔なやり方がありそうな気がします。 どうか教えてください。

  • EXCEL 文字列条件抽出

    特定の文字列を検索条件として別シートに抽出する方法を御教授願います。 使用する関数はLEN,MID,LEFT,ISERR,もしくはワイルドカードなどを使用すればいいのかと考えておるのですがいまいちやりたいような数式を組めず悩んでおります。 やりたいことを言葉で表現するならば以下のような感じとなります。 「sheet1のF列に<107>という文字が含まれていた場合」 ・顧客別シートのD列に顧客ごとに分けて抽出 ・含まれていない場合、抽出しない と、単純なことなのです。が、制約がある為にうまくいきません。 制約は以下となります。 ・検索対象の文字列が以下のように決まった形ではない。 (1)A-BB-107○#----- (2)A-BB-107○#----- (3)ABB107○C #----- (4)ュウリABB-107○#----- (5)ュウリABB107○#----- (6)BB-107○C-D9#-----  など、その他にも数種類存在。(○部分には違う数字が入ります) ・上記でも分かるように<107>が始まる文字列の位置が決まっていない。 という具合です。 操作しているブック構成は下記のとおりです。 ・sheet1・・・参照用シート 4行目 /D列・・・顧客No / E列・・・顧客名 / C列・・・製品仕様 (A列,B列,G~AD列まで使用中) 5行目 / 1 / A / A-BB-107○#----- 6行目 / 2 / B / ュウリABB-107○#----- 7行目 / 1 / A / BB-107○C-D9#----- 8行目 / 3 / C / A-BB-107○#----- 9行目 / 3 / C / BB-107○C-D9#-----  10行目 / 4 / D / A-BB-107○#----- (会社のサーバーで管理している情報がそのままエクセルに打ち出されたシート。 情報量として約1000行ほど) ・sheet2,3,4,5(開始行,項目列は同じ位置)・・・特定の顧客別ごとに分け、特定の製品仕様だけを抽出したシート(参照用から引用)。 4行目/ B列・・・顧客No / C列・・・顧客名 / D列・・・製品仕様 5行目 / / A-BB-107○#----- 6行目 / / ュウリABB-107○#----- 7行目 1 / A / BB-1234C-D9#----- 8行目 / / A-BB-1115#----- 9行目 / / BB-107○C-D9#-----  10行目 / / A-BB-3498○#----- 特定の顧客NoをB列(一つのセルになってます。C列も同様一つのセルになってます)に入力すると、製品仕様すべてを抽出するように作成したシート。このシート内のG列から新たに表を作成し<107>の文字列が含む製品仕様を抽出しようと考えております。 出来れば、このような一度段階を踏んでから特定の仕様を抽出するのではなく各シートに対象となる顧客Noを入力すると特定の仕様が一回で抽出できるようなシートを作成したいのですが、関数初心者の為、うまく組めずこのような形となりました。(現在、参照用シートに作業列を作り対応。作業列ばかりが増えて正直困っているのも確かなのです) 【御教授頂きたいこと】 ・<107>の文字列を条件として別表に抽出する関数の数式 です。 また、出来ればでいいのですが、 ・顧客Noを入力すると特定の仕様が一回で別表に抽出できるような方法が御座いましたら、そちらも合わせてお願いしたいと思っております。 長々と書き綴り、大変申し訳御座いませんが、宜しくお願い致します。

  • エクセルの文字列の検索に関して

    以下の画像を参照して欲しいのですが、 簡潔に言うと、 Cの文字が先頭に入っている文字列をA2からA1946までの間で探し出してその文字列の2文字目と3文字目をDのセルに格納したいです。 画像ではDせるにはきちんと入っていますが、これは手作業でしたのでこの作業を関数でできないかなと思いまして。 なにせ漢字は1945文字ありますので… お願いします。 ちなみに例えばC1の文字をA1からA1946と比べて、A67の先頭と一致した場合、A67の2文字目と3文字目をD1に出力といった具合です。

  • 複数セルから特定の文字を検索して、その対象セルを抽出したい

    エクセルで関数、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”と表示(抽出)を行ないたい。 セルには、文字、数字、記号が入ります。 よろしくお願い致します。

  • Excel 2003 関数 教えてください

    使用するのはExcel 2003です。 マクロは使用せず関数で実行したいです。 お詳しい方教えてください。 1シート目に元となる表があります。 B列~D列までにあらかじめクライアント情報が入っており、クライアント情報の数の分、行数があります。 A列には、担当者名の入力欄を設け、入力規則のリストで担当者1~5まで選択できるようにしておきます。    A         B              C             D    担当者名    クライアント企業名   クライアント部署名   備考   1            ○○○          △△△          ***    2            ○○○          ◇◇◇          +++      3            ×××          ■■■          ---    2シート目以降、各シートは担当者1~5別のシートになっています。 2シート目 担当者1 3シート目 担当者2 4シート目 担当者3 5シート目 担当者4 6シート目 担当者5 こちらのシートには、1シート目と同じ項目がA~D列まで並んでいます。 A列にはあらかじめそのシートの担当者名が入っています。 全シート、1行目が項目、2行目から下がデータ欄です。 1シート目のA列で担当者名を選択すると、選択された担当者シートのクライアント情報欄(B~D列)に、1シート目該当行のクライアント情報が、反映されるようにしたいです。 その際、2行目から空白行を作らずに反映していきたいです。 作業用の列やシートを作成しても構いません。 マクロを使用したくない理由は、この表を配布する先の使用者のExcelが2003と2013で混在しているためです。 どなたかお知恵をお貸しいただけると助かります。 どうぞよろしくお願いいたします。

  • Excelでキーを使って関数で列を行への変更

    Excelで下記の事を関数で行うことが出来るでしょうか?方法を知っている方がいましたらお教えください sheet1    A B   1 1 33  2 1 33  3 1 34  4 1 45  5 2 21  6 2 25  7 2 25  sheet2    A  B  C  D  E   1  1  33 33 34 45 2  2  21 25 25 Sheet1の状態のキーをA列とした場合に、 Sheet2でキーをA列に入力後 B1 C1 D1 E1 に 関数を使って列でまとまっているデーターを 行にする方法が分かる方、お教え願います。 (Sheet2の B1 C1 D1 E1に入れる関数の 組み方合わせが分からないと言うことです。 また、マクロはわからないので><) よろしくお願い致します。 実際にはsheet1のデータが1万件近くあるので、手作業は、辛いです。また、sheet1のA列キー以外のデーターが頻繁に変わるので効率よく作業したいの思いがあります。

  • エクセルの関数について

       A B C D 1  あ 5 6 あ 2  い 6 8 なし 3  う 3 9 なし 4  え 1 6 う 5  お 2 7 なし  Dには関数をいれたくて、 C1の数から4を引いた数が<3ければ、C1-4の数より大きい数をB1より上方を検索して最初に引っかかったB?の同じ行のA列の文字を表示させる。もしなければ「なし」と表示する。 同様に C2の数から4を引いた数が<3ければ、C2-4の数より大きい数をB2より上方を検索して最初に引っかかったB?の同じ行のA列の文字を表示させる。もしなければ「なし」と表示する。 以下5列まで同じです。 ちょっと難しいと思いますがよろしくお願いいたします。

  • Excelで任意の文字を含むセルの1つ下のセルを文字カウント

    関数初心者です。 Excelで任意の文字を含むセルの1つ下のセルを文字カウントする、シンプルでスマートな方法はないでしょうか? 具体的には      A列 1行目 @: インデックス1 2行目 この行の文字数をカウント 3行目 <空白行> 4行目 @: インデックス2 5行目 この行の文字数をカウント 上記のようなケースで「@:」を含むセルの1つ下の行(2,5行目の文字数をカウントしたいのです。 現状では、以下のような不細工な方法でやっています: A列の左隣に列を3つ挿入し(オリジナルのA列がD列になります)、C1に「=FIND("@:", D1)」とした上で関数を最終行までコピー→この例では1,3行目に「1」と表示されます 次にB2に「=IF(C1=1,"TRUE","")」と入力し、これを最終行までコピー→この例では2,5行目に「TRUE」と表示されます 最後にB列にオートフィルタをかけ、TRUEの行だけ表示したうえで、A1に「=LEN(A1)」と入力して、これを最終行までコピーしています→これで、2,5行目の文字数がカウントされます こんなヘタクソな方法ではなく、1つの関数で綺麗に同じ結果を得る方法はないでしょうか? もっと勉強すれば、自分でも出来るかもしれませんが、今すぐ必要なのでどうかご教示ください。

  • エクセルで列を複数行にしたいのですが

    注文表を商品ごとに集計したいのですが、商品名・数が列の入っています。これを縦にして集計しようと思っているのですが、列を行する方法を教えてください。 エクセルの表で列A・Bを共通にして列C・Dを次の行に、そして列E・Fを次の行にとしたいのですが、教えてください。 列A 列B   列C  列D 列E 列F 001 ○○会社 商品A 10  商品F 14 001 ○○会社 商品C 11  商品A 20 005 ××会社 商品D 32  商品C 25 これを 列A 列B   列C  列D 列E 列F 001 ○○会社 商品A 10  001 ○○会社 商品F 14  001 ○○会社 商品C 11  001 ○○会社 商品A 20  005 ××会社 商品D 32  005 ××会社 商品C 25 よろしくお願いいたします。

専門家に質問してみよう