エクセルで特定の行を抽出させる方法

このQ&Aのポイント
  • エクセルで特定の行を抽出する方法について質問があります。
  • 表から別のシートに特定の行を抽出する方法を知りたいです。
  • INDEXやMATCH・LOOKUPを試してもうまくいかないので、どのようにすれば良いでしょうか?
回答を見る
  • ベストアンサー

エクセルで特定の行を抽出させる方法について。

エクセルでの関数についての質問ですが、      A     B    C     D    1  名前   日付  場所   時間  2  Aさん  10/7  工場1   8.0  3  Bさん  10/7  工場1   8.0  4  Cさん  10/7  工場2   4.0  5  Cさん  10/7  工場1   8.0  6  Aさん  10/8  事務所   8.0  7  Cさん  10/8  工場2   8.0  8  Aさん  10/9  事務所   4.0 以上の表から別のシート2にAさんだけの行を抽出するには、どのようにすれば良いのでしょうか? INDEXやMATCH・LOOKUPを使っていろいろ試したのですがイマイチうまく行かないもので・・・。 因みに、シート2のイメージは       A     B     C    1   名前  :  Aさん   2  3   日付   場所   時間  4   10/7   工場1    8.0  5   10/8   事務所    8.0  6   10/9   事務所   4.0 このような感じです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.6

こんにちは! 極端にデータ量が多い場合はおススメできませんが・・・ 一気に表示する方法です。 ↓の画像で右側がSheet2とします。 Excel2007以降のバージョンをお使いだとして・・・ Sheet2のA4セルに =IF($B$1="","",IFERROR(INDEX(Sheet1!B$1:B$1000,SMALL(IF(Sheet1!$A$1:$A$1000=$B$1,ROW(A$1:A$1000)),ROW(A1))),"")) これは配列数式になってしまいますので、Shift+Ctrl+Enterで確定! この画面から数式をコピー&ペーストする場合は 上記数式をドラッグ&コピー → Sheet2のA4セルを選択 → 数式バー内に貼り付け → そのまま(編集可能なまま)Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 これをC4セルまでコピー! A4セルの表示形式は「日付」にし、A4~C4セルを範囲指定 → C4セルのフィルハンドルで下へコピー! これで画像のような感じになります。m(_ _)m꜊

metabo-papa
質問者

お礼

 お礼が遅くなり、申し訳ありません。  思っていた通りの作業ができました。 本当にありがとうございます。

その他の回答 (5)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 レイアウトを変える事無く、作業列も使用せずに、関数のみで抽出する方法です。  但し、計算処理に要するパソコンの負荷が大きいため、元データの行数が数千行以上にもなりますと、処理に時間が掛かり過ぎるという難点があります。(パソコンの処理速度にもよりますが2000行程度までなら、まあまあ我慢して待つ事も出来る程度かも知れません)  まず、Sheet2のA4セルに次の関数を入力して下さい。 =IF(ROWS($4:4)>COUNTIF(Sheet1!$A:$A,$B$1),"",INDEX(Sheet1!$B:$D,SUMPRODUCT(ISNUMBER(ROW(Sheet1!$A$1:INDEX(Sheet1!$A:$A,MATCH("*?",Sheet1!$A:$A,-1))))*(COUNTIF(OFFSET(Sheet1!$A$1,,,ROW(Sheet1!$A$1:INDEX(Sheet1!$A:$A,MATCH("*?",Sheet1!$A:$A,-1)))-ROW(Sheet1!$A$1)+1),$B$1)<ROWS($4:4)))+ROW(Sheet1!$A$1),COLUMNS($A:A)))  次に、Sheet2のA4セルをコピーして、Sheet2のB4~C4の範囲に貼り付けて下さい。  次に、Sheet1のC2~E2の範囲をコピーして、Sheet2のA4~C4の範囲に書式のみを貼り付けて下さい。  次に、Sheet2のA4~C4の範囲をコピーして、同じ列の5行目以下に貼り付けて下さい。  これで準備は完了で、後はSheet2のB1セルに名前を入力しますと、Sheet2のA列~C列にその方のデータが自動的に表示されます。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 ちょっと表のレイアウトを変更して、Sheet1の元データの表を次の様にします。      A     B    C     D     E  1   No.   名前   日付  場所   時間  2    1   Aさん  10/7  工場1   8.0  3    2   Bさん  10/7  工場1   8.0  4    3   Cさん  10/7  工場2   4.0  5    4   Cさん  10/7  工場1   8.0  6    5   Aさん  10/8  事務所   8.0  7    6   Cさん  10/8  工場2   8.0  8    7   Aさん  10/9  事務所   4.0  一方、Sheet2の表も次の様にするものとします。       A     B      C     D    1   名前  :  Aさん   2  3    No.     日付   場所    時間  4    1     10/7   工場1    8.0  5    5     10/8   事務所    8.0  6    7     10/9   事務所   4.0  まず、Sheet2のA3セルに次の関数を入力して下さい。 =Sheet1!$A$1  次に、Sheet2のB3セルに次の関数を入力して下さい。 =Sheet1!C$1  次に、Sheet2のA4セルに次の関数を入力して下さい。 =IF($B$1="","",IF(ROWS($A$4:$A4)>COUNTIF(Sheet1!$B:$B,$B$1),"",INDEX(Sheet1!$A:$A,MATCH($B$1,INDEX(Sheet1!$B:$B,MATCH(A3,Sheet1!$A:$A,0)+1):INDEX(Sheet1!$B:$B,MATCH("*?",Sheet1!$B:$B,-1)),0)+MATCH(A3,Sheet1!$A:$A,0))))  次に、Sheet2のB4セルに次の関数を入力して下さい。 =IF($A4="","",VLOOKUP($A4,Sheet1!$A:$E,MATCH(B$3,Sheet1!$A$1:$E$1,0),FALSE))  次に、Sheet2のB3~B4の範囲をコピーして、Sheet2のC3~D4の範囲に貼り付けて下さい。  次に、Sheet1のC2~E2の範囲をコピーして、Sheet2のB4~D4の範囲に書式のみを貼り付けて下さい。  次に、Sheet2のA4~D4の範囲をコピーして、同じ列の5行目以下に貼り付けて下さい。  これで準備は完了で、後はSheet2のB1セルに名前を入力しますと、Sheet2のA列~C列にその方のデータが自動的に表示されます。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 回答No.2です。  因みに、Sheet1の適当な列に、通し番号等の各行毎に異なるデータが入力されている列がある場合には、作業列を使用せずに、関数のみで処理する方法を使う事が出来るのですが、表のレイアウトを変更して、A列に通し番号等を入れる事などは可能でしょうか?

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 今仮に、御質問文中の上の表が存在しているシートのシート名がSheet1であり、下の表を表示させるシートのシート名がSheet2であるものとします。  又、Sheet3のA列を作業列として使用するものとします。  まず、Sheet3のA2セルに次の関数を入力して下さい。 =IF(INDEX(Sheet1!$A:$A,ROW())="","",INDEX(Sheet1!$A:$A,ROW())&"◆"&COUNTIF(Sheet1!$A$1:INDEX(Sheet1!$A:$A,ROW()),INDEX(Sheet1!$A:$A,ROW())))  次に、Sheet3のA2セルをコピーして、Sheet3のA3以下に貼り付けて下さい。  次に、Sheet2のA4セルに次の関数を入力して下さい。 =IF($B$1="","",IF(COUNTIF(Sheet3!$A:$A,$B$1&"◆"&ROWS($4:4)),INDEX(Sheet66!$B:$D,MATCH($B$1&"◆"&ROWS($4:4),Sheet3!$A:$A,0),COLUMNS($A:A)),""))  次に、Sheet2のA4セルをコピーして、Sheet2のB4~C4の範囲に貼り付けて下さい。  次に、Sheet1のB2~D2の範囲をコピーして、Sheet2のA4~C4の範囲に書式のみを貼り付けて下さい。  次に、Sheet2のA4~C4の範囲をコピーして、同じ列の5行目以下に貼り付けて下さい。  これで準備は完了で、後はSheet2のB1セルに名前を入力しますと、Sheet2のA列~C列にその方のデータが自動的に表示されます。

noname#231779
noname#231779
回答No.1

名前の列を選択して、並べ替えて、Aさんのところだけ、コピー(カット)&ペーストじゃだめですか?

関連するQ&A

  • Excelで特定も文字を含む行全てを、別のシートに抽出する方法を教えて

    Excelで特定も文字を含む行全てを、別のシートに抽出する方法を教えてください。 Excel2007で名簿を作成しています。 それぞれに、ある条件で「A」「B」「C」と3つに分類しています。 それぞれの分類ごとに、別シートに一括して抽出する方法をご教示ください。 例 Sheet1には (所属名)(コード)(氏名)(コード)(資格)(コード)(年数)(ランク)など14項目あります ※コードの一部には入力規則を使用したブルダウンで選択したり、lookup関数で、数字を入力すると所属名が表示されるようになっています 抽出条件となるランクは、年数のセルが●●以上であれば「A」、●●以下であれば「B」という関数を使用しています。 名簿に入力するごとに、「A」「B」「C」と別のシートに抽出させたいのです。 こちらのサイトでいろいろ検索し参考に試してみましたが、抽出できませんでした。 関数でもマクロでもいいので、抽出する方法を教えてくださると大変嬉しいです。 宜しくお願い致します。

  • エクセル関数

    二つの条件から抽出する関数INDEXとMATCHをつかって作ってみたのですが行と列からの抽出ではなく二つの列からの抽出を行いたいと思います。 シート1 (データが既に入っております。)    A   B   C 1 \100 a123 tana 2 \200 h456 taka 3 \120 k789 yogi 4 \250 b456 ume シート2    A   B   C 1  k789 yogi シート2のC列に¥120と抽出する関数をご教授ください。 宜しくお願いいたします。

  • Excel INDEX関数ズレて抽出される

    INDEX関数で行列番号取得にMATCH関数を使用したときにズレてしまう。 定例のミーティングの参加表を作成しようとしています。 シートの構成は添付画像の通りです。 Sheet1 定例のミーティングの参加表 巡回Aは月ごとに担当者が変わる。 Sheet2 巡回Aの月別の担当表 巡回Aの担当表を用意して、COUNTIF関数で参加表の氏名が巡回Aのリストに含まれていない場合(カウント0)は空欄にし、0以外の場合、INDEX関数で列番号のところにMATCH関数をネスト、MONTH(TODAY())+1とし、ex. 8月なら翌月の9月に該当する列番号を抽出して巡回Aの出席を月が変わると連動するようにしたいです。 =IF(COUNTIF($B$22:$B$29,$B3)=1,IF(INDEX($C$22:$N$29,MATCH($B3,$B$22:$B$29,0),MATCH(MONTH(TODAY())+1,$C$20:$N$20,0))=0,"",INDEX($C$22:$N$29,MATCH($B3,$B$22:$B$29,0),MATCH(MONTH(TODAY())+1,$C$20:$N$20,0))),"") 職場のExcel2016では列がズレてしまい、抽出ができないです。 Excel365では問題なく抽出ができました。 2016でズレるのは何故でしょうか。 詳しい方居ましたらご教授下さい。 よろしくお願い致します。

  • 複数シートから検索し、その行から15列下までを抽出したい。

    使用しているのはWINDOWS XP EXCEL2000です。 マクロ、VBはあまりよくわかっていません。 ひとつのファイルに6sheetあります。 シートY1~Y6があり、シートY1のB1に入力されたデータと同じものをシートY1~Y6全てから検索し、 その行から15列したまでを抽出するということをしたいのです。 現状は1シートのみからの検索で、A3からA17までMATCH関数とINDEX関数が入っていて抽出しています。 (下記のように関数が入っています。)  YIシート A3 → =MATCH(B1,T1_A1!D:D,0) B3 → =INDEX(T1_FMRA!E:E,A3,1)  YIシート A4 → =A2+1 B4 → =INDEX(T1_FMRA!E:E,A4,1) ↓ ↓  YIシート A17 → =A16+1         B17 → =INDEX(T1_FMRA!E:E,A17,1) これをA1に入力されたデータを全シートから(Y1~Y6)検索、抽出する方法が知りたいのですが・・・ 説明がわかりづらくすみません。 よろしくお願いいたします。     

  • EXCELでの行の抽出

    sheet1に   A    B    C    D 1 日付 金額  備考  コード 2 01  1000 あいう    1 3 10  2000 えおか    3 4 20  3000 きくけ    4 5 30  4000 こさし    1 . . . という感じで元データ(100行ほど)が入っています。 これを元にしてsheet2に   A    B    C    D 1  1 2 日付 金額  備考  コード 3 01  1000 あいう    1 4 30  4000 こさし    1 . . . というふうに表示したいのです。 sheet2のセルA1に入っているコードと一致するコードが入っているsheet1の行を抽出してsheet2に行の隙間なく表示させたいのです。 こんなことはできるのでしょうか? メニューからコマンドを選択して・・・という方法ではなく、計算式かマクロで実現したいのです。 エクセル2000、Win98です。よろしくお願いします。

  • エクセル 抽出方 教えて下さい

    sheet1に    A    B      C       D        E        F 1 名前  住所  2011/4/22  2012/4/22  2016/4/22  2021/4/22 と(C1は入力日付D1~F1には関数でN年後の日付が入力)縦に 500件程あります。D~Fのデータの中で指定したたとえば2016年5月が含まれるA~Fまでの表を抽出がしたいのですがどうしたらできるのでしょうか?できれば別シートに抽出結果を表示したいです。 オートフィルタでも関数でも構いません。ご教示お願い致します。 OS WindowsXP pro Office Excel 2003 です。

  • エクセル(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行を別シートに作成する関数を教えて下さい よろしくお願いします ※なぜか文字がずれてしまってて、すいません・・・

  • 「エクセルでデータのある行だけを他のシートに抽出する」を参考にしたのですが・・・

    下記過去の質問・回答を見つけ私も参考にさせて頂きましたが手詰まって困っています。 http://okwave.jp/qa943364.html なおこの質問の数式・例は全て過去質問の回答者:imogasiの回答を参考にさせて頂きました。 やりたい事→データを抽出する場所(A1をA3/B1をB3)を変更したいのです。 現状は(例データ)Sheet2のA1:B9(C列は関数式を入れた結果) A  B C 210 伊藤 1 211 山田 2 212 0 2 214 2 216 近藤 3 217 鈴木 4 219 0 4 220 4 221 大田 5 Sheets2の C1に=IF(A1="","",COUNTA($B$1:B1)-COUNTIF($B$1:B1,0))がはいり下にコピーしてます。 抽出するSheets3の A1に=IF(ROW()>MAX(Sheet2!C:C),"",OFFSET(Sheet2!$A$1,MATCH(ROW(),Sheet2!$C$1:$C$30,0)-1,0)) B1に=IF(ROW()>MAX(Sheet2!C:C),"",OFFSET(Sheet2!$A$1,MATCH(ROW(),Sheet2!$C$1:$C$30,0)-1,1)) 上記でうまくデータを抽出できるのですが、抽出する場所をA1及びB1を変更するとうまく抽出できません。 抽出場所をA3及びB3にする為にはどのような工夫が必要になるのでしょうか?

  • エクセルで項目を抽出したい

    皆様のお知恵をお貸しください。 日々作業者が行っている日報の項目を一覧表より抽出したいのです。 シート1には受付日(A列) 品番(B列) 数量(C列) 納期(D列)・・・ などが記入されています。日々増えていき月あたり100件程度です シート2には作業者の日報に書かれている品番(A列)、作業時間(B列)、作業者名(C列)作業日時(D列)を手入力していきます。 月当たり1000ほどの入力になります。 複数の作業者が同じ仕事をすること、日をまたぐこともあり重複しています。 求めたいことはシート3のA列にシート2で書かれた品名をシート1の品名の中から抽出し自動で書き出したいのです。 今はピボットを使いシート2のデータを表にして、そこの項目をLOOKUP関数を用いて導きだしていますが、その都度ピボットを更新させないといけないので煩わしいと思い、できれば関数で抽出をしたいのです。欲を言えば品番の若い順に自動で抽出できればいいのですが、まずはシート2に書かれた順でもかまいません。 記入例 シート1には A列    B列    C列    D列 10/1   10001    30    10/12 10/2   10002    1     10/5 10/2 10003 3 11/5 ・       ・        ・ シート2には  A列    B列     C列    D列 10001    2.5     ○○   10/2  9058    4      ○○   10/2 10003 1 ○○   10/3 10001 1 ××   10/3  10003 6 ××   10/3 10002 2 △△   10/5 シート3には(希望としては)  A列     9058 10001 10002 10003 . . . よろしくお願いします。     

  • エクセル 検索値と一致する行の検索

    Sheet1に以下のようなデータ(3,000件程度)があり、Sheet2を「検索用シート」として、検査値と一致する(Sheet1の)検査範囲の行データ(各対応範囲)を検索・抽出したいと考えています。 なお、検査値及び検査範囲は20桁の数字であるため、文字列で表示しています。 LOOKUP関数を使用して試みたのですが、検査値を入力したところ、異なる対応範囲のデータが抽出されてしまうケースが発生しました。 原因が分かりません。検査値及び検査範囲に問題があるのでしょうか? 参考になるか分かりませんが、この検査値及び検査範囲の上2桁は「11...」、「12...」、「13...」と1から始る数字となっております。 LOOKUP関数では不可能なのでしょうか? 可能であれば、関数を使用して正しいデータを検索・抽出できる方法を教えてください。 Sheet1    A(日付)  B(氏名)   D(20桁の数字)        1  2/1      ○●    11223344556677889911        2  2/3       △▲    12341234123412341234       3  2/5       □■    11112222333344445555         ↑       ↑        ↑      対応範囲1  対応範囲2   検査範囲 Sheet2(例)     A(検査値)          B(対応範囲1)       C(対応範囲2)      1  12341234123412341234      2/3             △▲                               ↑              ↑       A(検査値)に入力した値と、これに一致するSheet1の各対応範囲を検索・抽出したい。  

専門家に質問してみよう