• 締切済み

条件に合致する文字列を別シートに抽出するには

こんにちは。 エクセルで特定の条件にマッチするセルの隣のセルの文字列を別シートに抽出したいのですが、 どの関数を使えば良いか分かりません…。 ご存知の方がいらっしゃいましたら、ご回答頂ければ助かります。 ※シート1に以下の様に入力されているとして、B列が「0」の隣のセル(A列)の文字列をシート2に抽出したいと思っています。 【シート1】    A   B 1 [鈴木] [0] 2 [佐藤] [5] 3 [高橋] [0]    ↓ 【シート2】    A 1 [鈴木] 2 [高橋] ※佐藤は「5」なので抽出しない。 よろしくお願い致します。

みんなの回答

回答No.5

なぜ関数を使わなければならないですか。 B列に対して、フィルタをかけて出た結果をシートにコピーすればいいじゃないですか。

noname#204879
noname#204879
回答No.4

Sheet1!D1: =IF(AND(B1<>"",B1=0),ROW(),"") Sheet2!A1: =IF(ROW()>COUNT(Sheet1!D:D),"",INDEX(Sheet1!A:A,SMALL(Sheet1!D:D,ROW())))

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

1つの式で表示するなら、以下の式を入力して下方向にオートフィルコピーしてください。 =INDEX(Sheet1!A:A,SMALL(INDEX((Sheet1!$B$1:$B$100>0)*1000+ROW($1:$100),),ROW(1:1)))&"" ちなみに、Sheet1のデータ範囲が1行目から100行目のセル範囲にない場合は、$B$1:$B$100と$1:$100の数字だけを変更してください(数式が重くなるので必要以上に範囲を広げないこと)。

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

1つの関数で目的の処理が出来るものはありませんので、幾つかの関数を組み合わせて1つの数式を構成します。 Sheet2の1行目から下へ抽出するときは次の数式で良いと思います。 =IFERROR(INDEX(Sheet1!A$1:A$3,SMALL(INDEX((Sheet1!B$1:B$3=0)*ROW(B$1:B$3),0),COUNTIF(Sheet1!B$1:B$3,">0")+ROW())),"") Excel 2007以降のバージョンで再現できるはずです。 処理対象は元データがA1からB3までになっていますのでデータの行数に合わせて数式の行番号を変更してください。 尚、入れ子構造のINDEX関数で内側はSMALL関数に与える配列値を加工するためのものであり、他の方法でも処理可能です。 基本的には次の数式になります。 =IFERROR(INDEX(Sheet1!A$1:A$3,SMALL((Sheet1!B$1:B$3=0)*ROW(B$1:B$3),COUNTIF(Sheet1!B$1:B$3,">0")+ROW())),"") この数式は計算過程で関数に与える値が配列値を扱うため数式バーへ入力後、Ctrl+Shift+Enterで確定しなければなりません。 確定後に数式バーの表示が数式全体を{}で括られた状態になります。 貼付画像はExcel 2013で検証した結果です。 D列がSheet2と等価の状態にしてありますので試してください。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

非常にしばしば寄せられるご相談の一種ですが、エクセルには「条件に合致する一連の結果を列記してくれる関数」は有りません。(他のソフト、たとえばGoogle SpreadSheetなど、にはそういう便利な関数が用意されているものもあります) とは言え今はエクセルのお話なので。 方法1:簡単な方法 添付図参照 B列に名前 C列に数字、ただし簡単のためゼロじゃなく「1」を記入したデータを抽出する A1には =IF(C1=1,COUNTIF(C$1:C1,C1),"") 以下コピー シート2のA1: =IF(ROW(A1)>MAX(Sheet1!A:A),"",VLOOKUP(ROW(A1),Sheet1!A:B,2)) またはエクセル2007以降をご利用の場合は =IFERROR(VLOOKUP(ROW(A1),Sheet1!A:B,2,FALSE),"") 以下コピー 方法2:イミフメイな方法 A列に名前 B列に数字、ただし簡単のためゼロじゃなく「1」を記入したデータを抽出する シート2のA1: =INDEX(Sheet1!A:A,SMALL(IF(Sheet1!B$1:B$99=1,ROW(Sheet1!B$1:B$99),9999),ROW(A1)))&"" と記入、必ずコントロールキーとシフトキーを押しながらEnterで入力、以下コピー。

関連するQ&A

  • 同じ文字列を抽出して新規シート作成

    A列~E列までデータが入力されています。 E列は所々、空白セルがあります。 1行目は見出しです。 元データのA列の中で同じ文字列を探して 見出しと該当するA~E列の行を新規シートとして作成。 その際、シート名はA列の文字列。 A列の文字列が2つ以上見つからなくても A列の文字列を新規シートにする。 最終行は常に変動します。 元データ (B列~E列は割愛) A-1 名前 A-2 鈴木 A-3 佐藤 A-4 鈴木 A-5 山田 A-6 佐藤 新規シート名 「鈴木」 A-1 名前 A-2 鈴木 A-3鈴木 新規シート名 「佐藤」 A-1 名前 A-2 佐藤 A-3 佐藤 新規シート名 「山田」 A-1 名前 A-2 山田 上記の事をマクロで実行させたいです。 ご指南の程、宜しくお願い致します。 エクセル2013

  • エクセル 特定の文字列を抽出・挿入

    例えば A列にあるセルの中から特定の文字列を検索・抽出して、その特定の文字列だけB列に挿入していく関数はありますか? またはA列にあるセルの中から特定の文字列に挟まれた文字列を検索・抽出してその特定の文字列だけB列に挿入していく関数はありますか? マクロを組まないと難しいのでしょうか?

  • エクセル(2003・2007)でデータ抽出し、別シートを作成するための

    エクセル(2003・2007)でデータ抽出し、別シートを作成するための関数を教えて下さい ●シート名:サンプルA                ●シート名:サンプルB   A  B    C   D  E・・        A  B     C   名前 日付1  日付2  備考      名前 日付1   備考 1 山田 2010/10/15 2010/10/10 ああ    1 鈴木 2010/10/18 うう 2 佐藤             いい       2 太田 2010/10/21 かか  3 鈴木 2010/10/18 うう     → 4 井上 2010/11/20 ええ 5 石田 2010/8/7 2010/10/7 おお 6 太田 2010/10/21 かか 具体的に上記のデータから【B列が本日から10日間以内かつC列がスペース】のデータのA・B・D行を別シートに作成する関数を教えて下さい よろしくお願いします ※なぜか文字がずれてしまってて、すいません・・・

  • 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を入力すると特定の仕様が一回で別表に抽出できるような方法が御座いましたら、そちらも合わせてお願いしたいと思っております。 長々と書き綴り、大変申し訳御座いませんが、宜しくお願い致します。

  • 別シートの条件に合うセルを抽出したい

    例えば、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に佐藤、鈴木と自動的に表示されるようにしたいのですがどうしたらよいのでしょうか?

  • 【EXCEL関数】違うシートに抽出結果を出したい

    一覧表から「○」の条件が付いたデータのみを別シートに関数で抽出したいです。 フィルタではなく関数を使用したいのは、抽出したデータから名前の定義を使用して リスト表示をさせたいためです。ご教示のほど、宜しくお願いします。 シート1は一覧表となっており、A列に「○」のついたデータのみをシート2に表示 シート1(一覧表)   A  B 1  ○  山田太郎 2  ×  佐藤次郎 3  ○  高橋三郎 4  ×  鈴木四郎 5  ×  中村五郎 シート2(抽出結果を表示させる)   A  B 1  ○  山田太郎 2  ○  高橋三郎 3  4  5 フィルタオプション、当方の考え得る限りの配列関数等、色々試しましたが、 不勉強のために上手く結果が表示されませんでした。 ご教示のほど、宜しくお願い致します。

  • 質問:特定文字列から空白行までの抽出

    質問:特定文字列から空白行までの抽出 お世話になります、ネットで公開されているVBAを修正して何とかなっているVBA初級者です。 毎月excelで出力されたファイルを元に関数で整形したと思っていますが、”北棟2”の開始 するセル位置は解っているのでそれを基準に利用するのは簡単ですが、7777村上まで(空 白があるまで)を抜き出して"sheet_work"もしくは"北棟2"とういうsheetのB8セルに貼り 付けたいと考えています。 北棟2だけではなく、空白に挟まれた行は毎月変動するために関数でのセル指定が役に立ちま せん。この場合、北棟2、南棟1、西棟2、東棟1、東棟3といた文字列の次の行のA,B,C列 から空白が発生する行までを整形しやすいsheetか文字列通りのsheet名のB8セルに貼り付ける 方法が御座いましたらご教授お願いいたします。関数だけで力業で可能でしたらそちらもお教 えお願いします。 以下が出力されますが、空白から空白までは一定では無く、増減します。 小計の行は不要です。      A   B  C 5   xxxxxx名   日付  6   7       北棟2 8   1111 鈴木  5 9   2222 武田  5 10   11200 山田  5 11   4444 高橋  4 12   5555 佐藤  5 13   6666 小林  4 14   7777 村上  0 15    16       小計  28 17   18       南棟1 19   1001 中村  4 20   1002 伊藤  5 21   1003 吉田  4 22   20110 佐々木  5 23   1005 木村  3 24   1006 渡辺  0 25   1007 田中  4 26   27       小計  25 28   29       西棟2 30   10020 森  2 31   2010 岡田  1 32   2033 池田  0 33   2058 井上  5 34   35       小計  8 36   37       東棟1 38   7854 石田  4 45       東棟3 46   4471 石岡  2

  • 指定した文字列が抽出できる関数

    Excelで、指定した文字列だけを抽出表示する場合、「文字列を先頭(左)から抽出する」などの関数は「LEFT関数」や「RIGHT関数」がありますが、位置の指定ではなく、文字列の中にある、特定の文字だけを指定して抽出してできる関数は何でしょうか? たとえば「ラーメン」「うどん」「そば」いずれかを「含む」文字列が入っているセルの中から、「うどん」のセルだけを抽出して表示するという場合です。

  • 別シートの文字列があったら現シートのセルの色変える

    こんにちは。 エクセル2010を使用しています。質問させて下さい。 BシートのA列に下記のような文字列があります。 ------以下文字列------- 秋山 清原 デストラーデ 渡辺 ------以上文字列------- この時、AシートのセルにBシートに現れる文字列があった場合に色づけがしたいです。 例えば、Aシートに”清原”というセルがあったら、Bシートを参照して色づけされる。 この様なことをどうすれば実現できますでしょうか? ご教示願います。

  • エクセル2000で文字列から数値を抽出したい。

    エクセル2000で文字列から数値を抽出したい。 ワークシートのA列に下記の文字列が入力されています。 A1セル="123456 日本男子 54,321 7,654,321 12,345" A2セル="234567 東京都子 1,234 2,345 5,321" A3セル="345678 大阪太郎 99 689 9,876" データ間はスペースで区切られています。 後方2番目の数値をB列に取出す方法を教えて下さい。 B1セル=7,654,321 B2セル=2,345 B3セル=689 よろしくお願い致します。

専門家に質問してみよう