EXCEL:複数シートから特定行を一覧化したい

このQ&Aのポイント
  • EXCELで複数のシートから特定の言葉が記入された行を新規ワークシートに自動的に抽出し、一覧化する方法について教えてください。
  • 現在、エクセル初心者であり、ピボットテーブルやマクロの組み立て方には慣れていません。できるだけ簡単な方法を教えていただけると助かります。
  • 仕事で使用するデータにおいて、特定の行を一覧化できると非常に役立ちます。参照するデータシートは8枚あり、それぞれのシートには60行程度の文字データがあります。
回答を見る
  • ベストアンサー

EXCEL:複数シートから特定行を一覧化したい

【 EXCELで悩んでいます 】 複数のシートから特定の言葉の記入がある行だけ、 新規ワークシートへ自動で書き出したいのですが難儀しています。 当方エクセル初心者でして、 ピボットテーブルもマクロも組んだことがありません。 工程数がかかってもいいので、できるだけ優しい方法を教えて下さい。 仕事で使うデータで、これがあると非常に助かります。 【 準備しているデータ 】 ・参照したいデータシートは8枚 ・それぞれ、同じフォーマットで内容が異なる60行弱の文字データ (画像参照ください。このようなデータシートが8枚あります) 【 やりたいこと 】 8枚にも渡るシートの内容のなかから、 特定の文字が入っているもの(画像でいうと、G列「進捗」の「作業中」になっている行)だけを自動的に抽出して 一枚の新規シートにまとめて一覧化したい 【 環境 】 EXCEL 2003 Windows 面倒かとは思いますが、 お優しいエクセルマスター様がいらっしゃると信じております。 どうかよろしくお願い申し上げます。

noname#191670
noname#191670

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

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

>なお、MackyNo1様がお考えの記録マクロの利用する方法もよろしければお知らせいただきたいのですがよろしいでしょうか? 以下のようなキー操作でマクロを記録してください。 まず、準備として、1行目に項目名を記載した集計シートを作成しておきます。 「ツール」「マクロ」「新しいマクロの記録」から、以下の操作をします。 集計シートのA2セルからデータ挿入範囲を大きめに選択し、Deleteキーで以前のデータを削除します(最初は何も入力されていませんが)。 次に1枚目のシートの項目行を選択し、データの入力されているA2セルからデータ範囲を大きめに選択し(予定最大データ数分まで選択します)、「データ」「フィルタ」「オートフィルタ」で必要なデータを表抽出し、Ctrl+Cでコピーして、集計シートのA2セルでCtrl+Vで貼り付けます。 2枚目のシートからは以下の操作を行います。 同様に、2枚目のシートのA2セルから、データ範囲を大きめに選択してからフィルタで抽出したデータをコピーし、集計シートのA1セルを選択して、Ctrl+↓のショートカット操作を行い、マクロの記録ツールバーの「記録終了」右にある「相対参照」のアイコンをクリックし、↓キーを押してから、相対参照ボタンをもう一度押して捜査隊参照を解除してCtrl+Vで貼り付けます。 この操作を8枚目のシートまで行い、最後にすべてのシートのフィルタモードを、「データ」「フィルタ」「オートフィルタ」で解除すれば完成です。 最終セルの選択にCtrl+↓のショートカット操作を利用すること、相対参照の記録ボタンをA列の一番下のデータの1つ下のセルを選択すること、各シートのデータ範囲を最初に選択しておいてからフィルタ操作するところが記録マクロ操作のポイントです。

noname#191670
質問者

お礼

私にもできました!! PhotoShopでいうところの「アクションの記録」のような機能なんですね。 本当に助かりました。 これで仕事がはかどりそうです。 お答えいただいた方全員をベストアンサーとさせていただきたいところですが 二度もご丁寧にお教えいただいたこと、 ならびに初心者の私でも実現できたことを踏まえ、 こちらをベストアンサーとさせていただきます。 本当にありがとうございました。

その他の回答 (5)

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

>ピボットテーブルもマクロも組んだことがありません。 今回のように、シートが分離されているようなケースで簡便な操作を行うにはマクロを利用する必要があります。 エクセルには「マクロの記録」という機能が用意されていますので、これを利用してご希望の操作を行うことも可能ですが、エクセルの基本的操作を熟知している必要があります。 また、マクロを利用する場合はご自分でコードの修正ができる程度の最低限の知識は必要になります(例えばクロで実行したものは通常の入力と違い「元に戻す」という操作ができないので、重大なミスにつながる可能性があります)。 また、ピボットテーブルの機能はエクセルの基本機能の一つですが、この程度はご自分でできるレベルになるようにされたほうが、今後のためにも良いと思います。 >工程数がかかってもいいので、できるだけ優しい方法を教えて下さい。 個人的には記録マクロを利用した方法が最も簡便と思われますが(記録マクロに挑戦する気持ちがあるのなら具体的な操作方法を提示します)、初心者でもわかりやすいという方法なら、リンク貼り付けとオートフィルタの機能を併用することをお勧めします。 作業用のシートを追加し、1行目に項目名を入力し、1枚目のシートのデータ範囲+α(60行目まで)をコピーし、作業用シートのA2セルで右クリック「形式を選択して貼り付け」で「リンク貼り付け」します。 同様に2枚目のシートのデータ範囲+αを選択して、作業用シートのA61セルにリンク貼り付けします。 すべてのシートのデータ範囲を1枚のシートにリンク貼り付けしたら、準備完了です。 必要なデータを抽出したい場合は「データ」「フィルタ」で抽出対象を絞り込みます。 この絞り込んだデータシートを新規シートにコピー貼り付けすれば完成です。 #Officeソフトはバージョンによって使用できる機能や操作方法が大きく異なりますので、質問の際には必ずバージョンを明記するようにしましょう。

noname#191670
質問者

お礼

恥ずかしながら「リンク貼り付け」というコピペ方法を知りませんでした! これなら、元データを修正してもちゃんと更新されますし、 なにより簡単でしたので、私でもできました。 本当にありがとうございました。 また、バージョンについても、ご指摘いただきましてありがとうございました。 しかもEXCEL2003と書いてしまっていましたが 実際は2000でして(大汗)。 Excel 2000 9.0.6926 SP-3 でした。 大変失礼致しました。 なお、MackyNo1様がお考えの 記録マクロの利用する方法も よろしければお知らせいただきたいのですがよろしいでしょうか? 何卒よろしくお願い申し上げます。

noname#204879
noname#204879
回答No.4

「マクロも組んだことが」ない私や関数が苦手な人向けの方法を紹介します。 少々工数がかかるけど「優しい方法」だと思います。 少々見づらい添付図を判読しながら下記の手順をお読みください。 1.8枚(簡単のために、此処では Sheet1~Sheet3 の3枚)のシート(添付図では内容を簡略化)のデータ部分をそっくり別シート Sheet9 にコピーして、最上行に[オートフィルタ]を設定。その結果を Fig-1 に示す。 2.[進捗]の列において、[オートフィルタ]で“作業中”“と等しくない”の条件でデータを抽出した後、抽出されたレコードの全ての行全体を選択。その結果を Fig-2 に示す。 3.その選択範囲内でマウスの右クリックから[行の削除]を選択する。 4.[オートフィルタ]を解除する。その結果を Fig-3 に示す。 なお、添付図の中でどれかの拡大図を欲しければその旨をお知らせください。

noname#191670
質問者

お礼

ご丁寧に画像まで作成いただきまして、 本当に本当にありがとうございます! ただ、この方法ですと、sheetの元データの内容が修正された際には 反映されないような気がしました。 お手間をいただいたのに、恐縮です。 ありがとうございました。

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

こんにちは! 一番簡単で操作しやすいのは、No.1さんが仰っているように各Sheetでオートフィルタをかけ、 表示されているものを新規Sheetにコピー&ペーストしていく方法だと思います。 関数でやろうと思えば可能だとは思いますが、下準備とかなり長い数式が必要かと思います。 そこでお望みの方法ではないと思いますがVBAの一例を載せておきます。 騙されたと思って参考程度で試してみてください。 ※ 新規SheetはSheet見出しにある最後(9番目)のSheetとして、Sheet1~Sheet8で G列が「作業中」だけのものをSheet9に表示するようにしてみました。 尚、すべてのSheetのフォーマットは同一としてタイトル行が2行まで、データは3行目からとします。 Sheet9のH列セルの表示形式は「日付」にしておきます。 Alt+F11キー → VBE画面が出ますので、画面左下にある「This Workbook」をダブルクリック! → ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です。) Sub 一覧表示() 'この行から Dim i, j, k As Long i = Worksheets(9).Cells(Rows.Count, 1).End(xlUp).Row If i > 2 Then Range(Worksheets(9).Cells(3, 1), Worksheets(9).Cells(i, 8)).ClearContents End If Application.ScreenUpdating = False For k = 1 To 8 'Sheet1~Sheet8まで For i = 3 To Worksheets(k).Cells(Rows.Count, 1).End(xlUp).Row '3行目~最終行まで For j = 1 To 8 'A列~H列まで If Worksheets(k).Cells(i, 7) = "作業中" Then Worksheets(9).Cells(Rows.Count, j).End(xlUp).Offset(1) = _ Worksheets(k).Cells(i, j) End If Next j Next i Next k Application.ScreenUpdating = True End Sub 'この行まで ※ Sheet1~Sheet8のデータ変更があった場合、最終作業としてマクロを実行します。 以上、参考になれば良いのですが・・・m(__)m

noname#191670
質問者

お礼

ご丁寧に、マクロ内容の詳細まで記入いただきまして 誠にありがとうございました。 がんばってマクロに挑戦してみましたが、 撃沈しました。 エラーが出たり、そもそもまったく反応しなかったりで・・・。 素人のため、どこが悪いのかも分からずただ時間だけが過ぎていく感じでしたのであきらめました。 ご丁寧にご回答いただいたにもかかわらず 大変申し訳ありませんでした。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

ちょっと初めの作業は面倒ですが次のようにしてはどうでしょう。 8枚のシートではないですが仮に3枚のシートの場合について取り上げます。 それぞれのシート名がこだわりませんがここではシート1からシート3までのデータがあり別のシートにお求めの表を作成するための方法を示します。 シート1のJ列は作業列としてJ3セルには次の式を入力して下方にオートフィルドラッグします。 =IF(G3="","",G3&COUNTIF(G$3:G3,G3)) シート2のJ列は作業列としてJ3セルには次の式を入力して下方にオートフィルドラッグします。 =IF(G3="","",G3&COUNTIF(G$3:G3,G3)+COUNTIF(Sheet1!G:G,G3)) シート3のJ列には次の式を入力して下方にオートフィルドラッグします。 =IF(G3="","",G3&COUNTIF(G$3:G3,G3)+COUNTIF(Sheet1!G:G,G3)+COUNTIF(Sheet2!G:G,G3)) そこでまとめのシートですがA1セルには抽出ワードとかの文字列を入力しA2せるには仮に作業中を表示させたい場合には作業中と入力します。 3行目、4行目はシート1などと同じに項目名を並べます。 A5セルには次の式を入力してH5セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(COUNTIF(Sheet1!$J:$J,$A$2&ROW(A1)),INDEX(Sheet1!$A:$H,MATCH($A$2&ROW(A1),Sheet1!$J:$J,0),COLUMN(A1)),"")&IF(COUNTIF(Sheet2!$J:$J,$A$2&ROW(A1)),INDEX(Sheet2!$A:$H,MATCH($A$2&ROW(A1),Sheet2!$J:$J,0),COLUMN(A1)),"")&IF(COUNTIF(Sheet3!$J:$J,$A$2&ROW(A1)),INDEX(Sheet3!$A:$H,MATCH($A$2&ROW(A1),Sheet3!$J:$J,0),COLUMN(A1)),"") これでお望みの表を得ることができます。 シートの数が8ですから式は長くなってきますがここで示した例を参考にして挑戦してみてください。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

ツールバーの、データのフィルタのオートフィルターの(オプション)で、進捗と作業中をORで抽出し、それをコピーして新規シートに貼り付けて、8枚のデータシートをまとめてはいかがでしょう。

noname#191670
質問者

お礼

確かに…一番簡単ですね。 やっぱりこれがいいのでしょうかねえ・・・。

関連するQ&A

  • 複数シートから文字が入力されてる行を一覧化したい

    複数のシートから指定したセルで日付及び文字が記入されてる場所の行だけを 作成済みの集計用シートへ自動で書き出し、文字・セルを縮小したいのですが中々できず難儀しています。 マクロも試してみましたが枚数が多すぎ、日によって入力されてる行が違うため断念しました。 可能であればVBAでお願いできればと思います。 仕事で使うデータで、これがあると非常に助かります。 【 準備しているデータ 】 ・参照したいデータシートは約31枚(月ごとで枚数が異なります。) ・それぞれ、同じフォーマットで内容が異なる16行弱の文字データ (画像参照ください。このようなデータシートが約31枚あります) ・シート名はyyyy-mm-ddですべて分かれています。例:2014-06-31 【 やりたいこと 】 ・日付の抽出・コピー(画像で言うとA1) ・約31枚にも渡るシートの内容のなかから、  文字が入っている行(画像でいうと、A58~CJ88までの行)だけをコマンドボタンを押したら自動で  抽出・コピーして集計用のシートに日付ごとにまとめて一覧化し、文字・セルを縮小したい。 (可能であればA3用紙に収まるサイズ) ・集計用シートは作成済み。 ※画像では一部ボカシをいれてます。 【 環境 】 会社はExcel 2003・2010 当方はExcel 2007 面倒かとは思いますが、 お優しいエクセルマスター様がいらっしゃると信じております。 どうかよろしくお願い申し上げます。

  • エクセル複数シートをアクセスで1つのテーブルに。

    エクセルのシートで1000行程度のものが5シートあります。それぞれは数字列に文字が入っている行もあってエクセルでの必要データ抽出に手間がかかってしまいます。「エクセル5シートをアクセスでリンクさせクエリで特定文字行を削除し、テーブル構造が整ったところでテーブル作成を行う」までをアクセスで自動化したいと思っています。アクセス側でエクセル5シートを一括して合体させる事は出来ないものでしょうか?宜しくお願い致します。

  • VBA Excel 特定の記号を含んだ行

    Excel VBAにて、質問します。お手数ですが宜しくお願いします。 画像の様に、E列に特定の記号"●"や"▲"含んだ行以外、抽出し 印刷のシート名に貼り付けしたいと思います。 ですが、条件がありまして、その条件とは、InputBoxを使って 抽出したい日付を入力し、入力した日付、時刻までの記号"●"や"▲"以外 を抽出できる様にしたいです。 例えば実行時の日付が8/21日ならば InputBoxに、8/28 20:00と入力したら、入力した日付、時刻までの 記号"●"や"▲"以外を抽出となります。 画像の様に、1行目の見出し名も貼り付けできる様に、VBAを使って できませんでしょうか? ※ 画像ではSheet1のみ載せましたが、 Sheet2とSheet3とSheet4とSheet5とSheet6まで似た内容のデータがあるので シート名を指定して動作できると良いです。 Array("Sheet1","Sheet2","Sheet3","Sheet4","Sheet5","Sheet6")見たいな 感じでできますでしょうか? 御面倒お掛けしますが宜しくお願いします。

  • 【EXCEL2003】特定の条件を満たすセルを含む行を指定したシートに移動したい

    EXCELのデータ集計で質問です。 データを集計・グラフ化したいのですが、特定の条件を満たすセルを含む行を指定するシートに移動したいと考えているのですが、可能でしょうか。 可能ならば方法を伝授していただきたいと思っています。 データには、列Bに「A」「B」「C」「空白」と4種類を含んでいます。 これらのデータで、セル「A」を含む行のデータのコピーをsheet"Aランクデータ"に自動的に移動するようにしたいのです。 オートフィルタで抽出して、コピー・ペーストを実施しているのですが、これしかないのでしょうか・・・? よろしくお願いします。

  • VBA Excel 特定の記号を含む行で

    Excel VBAにて、質問します。お手数ですが宜しくお願いします。 画像の様に、E列に特定の記号"●"や"▲"含んだ行以外、抽出し 印刷のシート名に貼り付けしたいと思います。 ですが、条件がありまして、その条件とは、InputBoxを使って 抽出したい日付を入力し、入力した日付、時刻までの記号"●"や"▲"以外 を抽出できる様にしたいです。 例えば実行時の日付が8/21日ならば InputBoxに、8/28 20:00と入力したら、入力した日付、時刻までの 記号"●"や"▲"以外を抽出となります。 画像の様に、1行目の見出し名も貼り付けできる様に、VBAを使って できませんでしょうか? ※ 画像ではSheet1のみ載せましたが、 Sheet2とSheet3とSheet4とSheet5とSheet6まで似た内容のデータがあるので シート名を指定して動作できると良いです。 Array("Sheet1","Sheet2","Sheet3","Sheet4","Sheet5","Sheet6")見たいな 感じでできますでしょうか? どの様なコードを書けば良いでしょうか? 御面倒お掛けしますが宜しくお願いします。

  • EXCEL-複数列から特定内容の行のみ抽出

    EXCEL2010です。 添付画像のように、「好物1~3」に入力されている内容で特定の文字(メロン)を含む行のみを抽出するにはどのようにしたらよいでしょうか。

  • EXCEL:複数シートから特定行を一覧化したい

    会計簿を作成中です。 4月から12ケ月分の12枚のシートがあります。すべて同じ書式です。 この12枚のシートの「費目」の中から、例えば、「外灯費」だけを自動的に抽出して、一枚の新規シートに一覧表としてまとめたいのです。 これと同じ質問は、すでに、g00ta1a さんが、2011-09-28に投稿されています。これに対する回答の中から、KURUMITOさんの方法を試みました。 内容は理解できていないのですが、見よう見まねで。    http://okwave.jp/qa/q7038820.html  参照 その結果、下の画像のように、一覧表を作ることができました。 しかし、困ったことに、4月分だけを抽出した時は、特に問題なかったのですが、これに5月分を加えたところ、どうもすべてのセルが文字化されているようで、日付とか、数字が思うように書式変換できなくて困っています。 どうかよろしくお願いします。 状況説明:  1.環境:     ・win7 Excel 2010  2.セルへの入力式:     1)4月分だけを抽出してみる:        ・「日付」の下のセルに次式を入力。 以下、横、下方向にドラッグ。          =IF(COUNTIF(会計4月!$W:$W,$B$4&ROW(A1)),INDEX(会計4月!$J:$Q,MATCH($B$4&ROW(A1),会計4月!$W:$W,0),COLUMN(A1)),"")        ・この場合は、日付も数字も、あらかじめ設定した書式通りになりました。     2)4月分に、5月分を追加してみる:        ・同じく、「日付」の下のセルに次式を入力。 以下、横、下方向にドラッグ。             =IF(COUNTIF(会計4月!$W:$W,$B$4&ROW(A1)),INDEX(会計4月!$J:$Q,MATCH($B$4&ROW(A1),会計4月!$W:$W,0),COLUMN(A1)),"")&IF(COUNTIF(会計5月!$W:$W,$B$4&ROW(A1)),INDEX(会計5月!$J:$Q,MATCH($B$4&ROW(A1),会計5月!$W:$W,0),COLUMN(A1)),"")        ・この場合、日付欄は数字のままで、書式も日付になっているにも関わらず日付にならない。        ・また、数字も、書式は数値なのに、文字化している。 3.今まで試みた対処法:     1)セルを右クリック。「書式設定」の「表示形式」から」、「日付」、または「数値」にするが応答なし。     2)リボン「データ」-「区切りの位置」から、次、次、と進み、「G/標準」で完了させるが、応答なし。     以上、エクセル初心者の私には手が負えなくなりました。

  • ワークブック内の特定の複数シートの行を纏めるマクロ

    1つのワークブック内に複数のシートがあり その中で特定の2シートのみ別シートにまとめたいです どのシートも1行目は見出しとなるため 2行目以降のデータのみ必要となります またデータを結合させた別シートでは最後にA列を基準として並べ替えも行いたいです このような場合はどのようにすればいいのでしょうか? 全てのシートを1つにまとめるというようなマクロは見つかったのですが・・・

  • エクセルのあるシートの内容を条件毎に行単位で複数のシートに振り分けるには?

    エクセルのあるシートにある元データのA列を参照して同じものだけを行単位で抜き出し、別にある50個のシートに振り分けたいのですが、手作業でコピーする以外に何か良い方法はないかと思い、質問させていただきました。 下の例で行くと行1と2は列Aが同じ「たろう」なので、同じシート2へ、行3と4は「はなこ」なので、同じシート3へといった具合です。 元データ(シート1、毎月更新)   A   B C D E 1たろう  1 2 3 4→シート2へ  2たろう  4 5 6 3→シート2へ 3はなこ  7 8 9 2→シート3へ  4はなこ  1 2 2 1→シート3へ 5じろー  3 4 4 3→シート4へ 6さぶろー 5 4 3 1→シート5へ シート2:たろうのデータ2行のみ表示 シート3:はなこのデータ1行のみ表示 シート4:じろーのデータ1行のみ表示 シート5:さぶろーのデータ1行のみ表示 問題は、元データは別のソフトからエクスポートされたもので、毎月更新するたびに行数が増えたり減ったりして内容が変わってしまうところです。例えばたろうが今月は2行あったけど、来月は1行になってしまうといった具合です。各シートも元データの更新内容に従って、毎月更新する必要があります。 関数は使ったことがありますが、これは関数で実現できるのでしょうか?何となく出来ないような気がしています。やはり高度な技が必要なのでしょうか。その場合は私には難しいかもしれませんが、とにかく何かお知恵をいただきたくよろしくお願いいたします。

  • エクセル 複数行を別のシートに摘出

    いつもお世話になっております。 内容は添付画像にてご確認ください。 例え B1に”○”等の特定の文字が入力されたら、その○印の行すべてを下記に摘出。 また可能であれば、同じように別のシートに摘出したいです。 摘出は最大で20件ぐらいです。 エクセルは人類を救うと思っている方、よろしくお願い致します。 ※いろいろアイデアはでるのですが、勉強不足で・・・・・・ 2007Verですー

専門家に質問してみよう