• ベストアンサー

複数シートの色付きセルがある行を別シートに抽出

複数シートの各E列に色付きセルがある行のみ、1つの別シートに 抽出したいと考えています。 セルの色は条件付書式で付けています。 なお、複数シートの項目はすべて同一で、1行目は項目名が入っています。 特に複数シートが対象になっているために過去ログから中々近いものが見当たりません。 どなたかヒントだけでも頂ければ幸いです。

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

  • ベストアンサー
  • kuma3f
  • ベストアンサー率63% (28/44)
回答No.2

ANo.1のkuma3fです。 繰り返し使用される場合は、抽出シートのクリアは必要ですね。 項目行を1行のみとする場合は、次のようにされたらよいと思います。 Dim シート As Worksheet Dim シート名 As String Dim 行番号 As Long Dim 抽出行番号 As Long Dim 最大行 As Long Dim スイッチ As Integer Sheets("抽出シート").Cells.ClearContents Application.ScreenUpdating = False 抽出行番号 = 1 スイッチ = 0 For Each シート In ThisWorkbook.Sheets シート.Activate シート名 = ActiveWorkbook.ActiveSheet.Name 最大行 = Application.WorksheetFunction.CountA(Worksheets(シート名).Range("E1:E65536")) If シート名 <> "抽出シート" Then If スイッチ = 0 Then '最初のシートのみ項目行を抽出 Sheets(シート名).Rows(1).Select Selection.Copy Sheets("抽出シート").Select Sheets("抽出シート").Rows(抽出行番号).Select ActiveSheet.Paste Application.CutCopyMode = False 抽出行番号 = 抽出行番号 + 1 スイッチ = 1 End If 行番号 = 2 '2行目から抽出対象 Do Sheets(シート名).Select Sheets(シート名).Cells(行番号, 5).Select '***** 条件で抽出 ***** If Sheets(シート名).Cells(行番号, 5) > 100 Then Sheets(シート名).Rows(行番号).Select Selection.Copy Sheets("抽出シート").Select Sheets("抽出シート").Rows(抽出行番号).Select ActiveSheet.Paste Application.CutCopyMode = False 抽出行番号 = 抽出行番号 + 1 End If '********************** 行番号 = 行番号 + 1 Loop Until 行番号 > 最大行 End If Next シート Sheets("抽出シート").Select Sheets("抽出シート").Range("A1").Select Application.ScreenUpdating = True MsgBox "抽出しました。" 例は、スイッチで最初のシートの項目行のみ抽出させています。 条件での抽出は2行目からにしています。

bill98
質問者

お礼

kuma3f様 またまたありがとうございました。 まさに希望通りの結果を得ることができました。 これは色々と発展もできそうですね。 本当にありがとうございました。

その他の回答 (1)

  • kuma3f
  • ベストアンサー率63% (28/44)
回答No.1

条件付き書式で色がついているセルを関数やマクロで判断するのは難しいようです。 条件付き書式の条件で抽出されてはいかがでしょうか。 参考までに 例えば「E列のセルの値が100より大きい」で色をつけている場合は、次のようにします。 メニューバーの「挿入」→「ワークシート」で新たなシートを作成してシート名を"抽出シート"にする  ↓ メニューバーの「ツール」→「マクロ」→「マクロ」をクリック  ↓ マクロのダイアログが表示されたらマクロ名に自由に名前を入力してください。(例:抽出)  ↓ 名前を入力しましたら、「作成」をクリック  ↓ Microsoft Visual Basicの画面が開きますのでSub 抽出()の下に次のコードをコピーして貼り付けてください。 Dim シート As Worksheet Dim シート名 As String Dim 行番号 As Long Dim 抽出行番号 As Long Dim 最大行 As Long Application.ScreenUpdating = False 抽出行番号 = 1 For Each シート In ThisWorkbook.Sheets シート.Activate シート名 = ActiveWorkbook.ActiveSheet.Name 最大行 = Application.WorksheetFunction.CountA(Worksheets(シート名).Range("E1:E65536")) 行番号 = 1 If シート名 <> "抽出シート" Then Do Sheets(シート名).Select Sheets(シート名).Cells(行番号, 5).Select '***** 条件で抽出 ***** If Sheets(シート名).Cells(行番号, 5) > 100 Then'100より大きいなら抽出 Sheets(シート名).Rows(行番号).Select Selection.Copy Sheets("抽出シート").Select Sheets("抽出シート").Rows(抽出行番号).Select ActiveSheet.Paste Application.CutCopyMode = False 抽出行番号 = 抽出行番号 + 1 End If '********************** 行番号 = 行番号 + 1 Loop Until 行番号 > 最大行 End If Next シート Sheets("抽出シート").Select Sheets("抽出シート").Range("A1").Select Application.ScreenUpdating = True MsgBox "抽出しました。" '****コピー貼り付けはここまで **** Microsoft Visual Basicの画面を×で閉じます  ↓ Excel画面のメニューバーの「ツール」→「マクロ」→「マクロ」をクリック  ↓ 先ほど名前を付けたマクロを選択して「実行」をクリック  ↓ "抽出シート"のA列に抽出されます。 例は、どのシートもE列の条件付き書式の条件が同じでデータの最終行までに空白行(抜けた行)が無いことが前提です。

bill98
質問者

補足

kuma3f様 大変丁寧にご説明いただきましてありがとうございます。 海外出張によりネットがつなげない環境だったため ご返信が遅くなり申し訳ありませんでした。 早速試してみました。 これは今後、検索対象のシートが増えてもそのまま使えるのですね。 すごく便利です。 私は、検索対象シートごとにCase 1、Case 2 と書いていくしかないのかと考えていました。 For i=1 to n '検索シート数   Select Case i Case 1 : Case 2 : ・・・・・   End Select '共通処理  Next 従って検索対象のシートが増えるたびにコードを 追加する必要があると思っていました。 なお、抽出の際に前の結果をクリアするために 宣言文のあとに下記を加えてみました。 Sheets("抽出シート").Cells.ClearContents ところで、各検索対象シートの1行目は共通の項目名が 入っていますが、抽出結果はすべてのシートから 各々1行目の項目を引っ張ってきてしまいます。 項目行は1行目の1行のみ、とはできませんでしょうか? ご教示頂ければ幸いです。

関連するQ&A

  • 同じ様式の表の複数シートから行ごと抽出

    A2:K12の範囲に表がある全く同じ様式のシートが複数あります。 特定の条件が満たされた行を全て別シートに抽出したいです。 1列目と2列目とX列目(これは集計のA1セルに入った値を参照)が空白でない行を全て抽出したいです。1列目と2列目は1行目から順番に埋まっているのですが、X列目は空白になっているものと空白でないものが混在しています。 たとえば、Xが10列目のときは、Aさん、Bさん、Cさん、Dさん、Eさんの行が抽出されるようにしたいです。 VBAのコードを自力で書けないので、よろしくお願いします。

  • 複数シートからのセルの抽出

    複数シートからのデータの抽出をしたいのですが、教えてください。 [処理] あるEecelBookに含まれる全てのsheetに対して、シートの1行目とA列のあるセルの値が1995または1996である場合はその当該行をコピーし、新しく作ったsheetに集計する。 説明が下手で住みませんが、よろしくお願いします。

  • エクセルで複数の条件範囲に合う行を別シートに抽出

    エクセルの関数で複数の条件範囲に合う行だけをを別シートに抽出したいのですが、 どうしても方法が分かりません。 誰か教えて頂けないでしょうか? 検索は範囲です。 宿泊日○○○○○○○○~○○○○○○○○(例20111110~20240204) 人数 ○人~○人 (○の中に数字が入ります) 西暦日付と人数が両方一致している行を別シートに抽出したいです。 バージョンは2007.2010両方とも問題ないです。 Sheet1    A     BCDEFGHIJKLMN   O 1 宿泊日                 人数 2 20100223               20 3 20110103               5 4 20111118               9 5 20120505               13 6 20121010               7 8 20120224               32 9 20121121               28 Sheet2    A      B    C   D    E   FGHIGKLMN    O 1 検索 2 宿泊日 20110101 ~ 20121111 3 人数     8    ~   30     人 4 5 宿泊日                                  人数 6 20111118                                   9 7 20120505                                  13 Sheet1、A列の宿泊日とO列の人数の範囲が一致するものを、 Sheet2の検索から、行ごと抽出(複数)し、Sheet2に反映する関数を教えて頂けないですか? いろいろ検索して探しましたが、複数抽出する方法がわかりませんでした。 よろしくお願いいたします。

  • 指定したセルの値によって同じ行の別のセルを塗り潰し

    エクセル2010を使用しています。 ある条件下のもと、特定のセルを色付けしたいのですが、例えばM列が0か1で入力されていて、1の時に同じ行のEのセルを緑色にしたい場合、どのように設定すればよろしいでしょうか? 「条件付き書式」という項目をクリックしてセルの強調表示ルール->指定の値に等しい など選択して試してみましたが、E列のセルの色ではなく、M列の色が変わってしまいます。 お分かりの方いましたら、よろしくお願いいたします。

  • 条件に合う行を別シートに抽出

    エクセルで条件に合う行を別シートに抽出したいです。  出荷確認シートとします。     A    B   C    D    E    K    M   N   O     P   抽出列  No.  件名  工事店  出荷  確認  担2  担3  名称   作業列・・・・OKで番号 30行 OK 101-1 ふじ  あああ        OK     松田  みかん    1            以降     101-2 ふじ  あああ              松田  りんご                OK 102-1 ビル  いいい       OK     伊藤  いちご      2            OK 103-1 神社  ううう         OK     神田  アイス     3               103-2 神社  えええ               神田  レモン                    ・  ・    ・       ・      ・    ・     ・         ・  ・    ・       ・      ・    ・     ・        OK   ・  ・    ・             OK    ・     ・       4 上記がSheet1に入力されています。 条件1  ・Sheet1K列 確認でOKを入力された行をSheet2に抽出したいのです。       B   C     D    E    M    N    O            No.  件名  工事店  出荷   担2   担3  名称          101-1 ふじ  あああ            松田   みかん        102-1 ビル  いいい           伊藤   いちご              103-1 神社  ううう             神田   アイス  条件2  ・Sheet1K列 随時OKを入力された行をSheet2に追加           101-1 ふじ  あああ         松田   みかん        101-2 ふじ  あああ         松田   りんご       102-1 ビル  いいい        伊藤   いちご             103-1 神社  ううう         神田  アイス       103-2 神社  えええ          神田  レモン             条件3  ・出荷を確認後はその行を削除しますので、残りのOK分をSheet2に抽出後したもの       101-1 ふじ  あああ         松田  みかん         101-2 ふじ  あああ         松田  りんご       103-1 神社  ううう          神田  アイス とSheet2に表示させたいです。 A抽出列には=IF(B30="","",TEXT(B30,"OK"))を入力し、Sheet1P作業列がK列に OKを入力されるたびに番号が記入され、順序を行頭から若番として、A抽出列とP作業列を参照等 しながらと頭の中ではイメージしていますが・・・。 過去の分を検索したら、似たようなので逆のパターンがありました。 エクセルは2000です。文字位置が上手く合ってないですが 皆様のお知恵をお願いいたします。

  • エクセルで複数の条件範囲に合う行を別シートに抽出

    エクセルの関数で複数の条件範囲に合う行だけをを別シートに抽出したいのですが、 どうしても方法が分かりません。 誰か教えて頂けないでしょうか? 検索は範囲です。 宿泊日○○○○○○○○~○○○○○○○○(例20111110~20240204) 人数 ○人~○人 (○の中に数字が入ります) 西暦日付と人数が両方一致している行を別シートに抽出したいです。 バージョンは2007.2010両方とも問題ないです。 Sheet1    A     BCDEFGHIJKLMN   O 1 宿泊日                 人数 2 20100223               20 3 20110103               5 4 20111118               9 5 20120505               13 6 20121010               7 8 20120224               32 9 20121121               28 Sheet2    A      B    C   D    E   FGHIGKLMN    O 1 検索 2 宿泊日 20110101 ~ 20121111 3 人数     8    ~   30     人 4 5 宿泊日                                  人数 6 20111118                                   9 7 20120505                                  13 Sheet1、A列の宿泊日とO列の人数の範囲が一致するものを、 Sheet2の検索から、行ごと抽出(複数)し、Sheet2に反映する関数を教えて頂けないですか? ちなみにSheet1は常に更新され、入力をする事が出来ませんので、 Sheet1に手を加えることのなく、Sheet2のみに関数を入れて処理出来る関数でお願いします。 いろいろ検索して探しましたが、複数抽出する方法がわかりませんでした。 よろしくお願いいたします。

  • 複数シートからの行 抽出改良バージョン

    https://okwave.jp/qa/q9586463.html ↑この質問の回答を頂いた者ですが、改良したいと思っています。 もしよろしければ、ご回答お願いいたします。(前回は操作ミスでベストアンサーにできず、申し訳ありませんでした。) この質問では、「各シートの表が上から順番に埋まっていること」を前提に「1列目と2列目が空白でない行を全て抽出する」ことになっています。つまり空白行が出た時点で次のシートへ抽出対象が移ります。 改良バージョンが「各シートの1列目と2列目とX列目(A1セルの値を代入)が空白でない行を全て抽出」です。問題がX列目は空白の行と空白になっていない行が混在していることで、X列目が空白でもそのシートの2列目にデータが入っている最後の行(2列目は途中に空白はない)まで調べて抽出する必要があります。 新しく添付した画像の例では、Xが10列目のときは、橋本、浜崎、根本、末吉、恩田の行が抽出されるようにしたいです。 コードを改良していただけませんか?

  • Advanced filter を使って空欄セルを含む複数条件の抽出をしたい

    VBA初心者です。 Advanced filterを使用して、複数条件の抽出をし、別シートにデータをコピーしようとしています。 抽出条件4項目のうち、1項目は空欄セルです。 マクロの自動記録で、フィルターオプションを設定してみたのですが、 上手くいかず、他3項目で抽出した条件すべてのレコードを引っ張ってしまいます。 又は、別の列で「*****」と表示されたレコードでも良いのですが、 やはり、こちらも必要ないレコードまで出てきてしまいました。 sheet1:元データ(A1:R3000) Sheet2:条件(A1:F6) Sheet3:抽出データ 条件セル A      B     C    D      商品コード 入金方法 入金月 過去注文数           このD列が空欄のものを抽出したい 詳しい方がいらっしゃったら、ご教授下さい。 よろしくお願いします。

  • EXCELの複数シート間で重複をなくしたい

    こんにちは。 番号を入力していく際、複数シート間で番号の重複を判定していく方法はないものでしょうか?A列に番号を入力していますが、以下のような今のやり方では同一シート上でしか重複を判定できません。何とかして複数シート間での重複を避けたいのですが・・・。 シート自体の書式はどのシートも同じで、A列に番号が振ってあります。 A列を選択して条件付書式を設定しました。 =countif(A:A,A4)>1を条件として セルが赤く塗りつぶされるような書式にしました。 よろしくお願いします。

  • 複数のExcelブックから特定シートのセル範囲抽出

    同一フォルダ内にある複数のExcelブックから特定シートの特定セル範囲を抽出して一覧表にまとめるExcel マクロ(VBA)を教えてください。 このサイトで殆どよく似た回答を読んだのですがうまくいきません。VBA初心者です。 よろしくお願いします。 【前提】 ・実行する端末のOSはWindows 10 ExcelはOffice365 ProPlus ・対象フォルダはネットワーク接続フォルダ  この中に、複数のExcelブック(xlsx、xlsm)があります。 ・抽出したい対象は、各ブック内の「台帳」シートの「A3:Cの最終行」で  複数のブックの中には「台帳」シートが含まれていないブックも混在しています。 【抽出一覧作成イメージ】 ・「集約.xlsm」ブックの「集計」シートの2行目から抽出した結果を一覧表示する。 ・「集約.xlsm」ブックにマクロは登録する ・表示はA列に抽出元ブック名(=ファイル名)、B列からD列に抽出元「A3:Cの最終行」セルの値。 ・「A3:Cの最終行」セルの値を「集約.xlsm」ブックの「集計」に貼り付ける際には「値で貼り付ける」が望ましい。

専門家に質問してみよう