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