• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルで特定の行を抽出させる方法について。)

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

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

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

  • ベストアンサー
  • 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