• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルのマクロで全シ-ト複数条件検索)

エクセルのマクロで全シート複数条件検索

kagakusukiの回答

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

 以下の様なマクロは如何でしょうか。 Sub QNo9090316_エクセルのマクロで全シート複数条件検索() Const ConditionSheetName As String = "Sheet3", FirstConditionRow As Long = 2, _ ConditionColumn As String = "B", SearchColumn As Long = 2, FirstOutputRow As Long = 1 Dim ConditionSheet As Worksheet, OutputSheet As Worksheet, _ LastConditionRow As Long, NotApplicable As Boolean, _ FindCell As Range, c As Range, i As Long, j As Long, k As Long If IsError(Evaluate("ROW('" & ConditionSheetName & "'!A1)")) Then MsgBox "検索条件が入力されているシートとして設定されている" _ & vbCrLf & vbCrLf & ConditionSheetName & vbCrLf & vbCrLf & _ "というシート名のシートが見つかりません。" & vbCrLf _ & "マクロを終了します。", vbExclamation, "存在しないシート" Exit Sub End If Set ConditionSheet = Sheets(ConditionSheetName) LastConditionRow = ConditionSheet.Range(ConditionColumn & Rows.Count).End(xlUp).Row If LastConditionRow <= FirstConditionRow Then MsgBox ConditionSheetName & "の" & ConditionColumn _ & "列に検索条件が入力されておりません。" & vbCrLf _ & "マクロを終了します。", vbExclamation, "条件未指定" Exit Sub End If With Application .ScreenUpdating = False .Calculation = xlManual End With Sheets.Add After:=Sheets(Sheets.Count) Set OutputSheet = Sheets(Sheets.Count) i = FirstOutputRow For Each c In ConditionSheet.Range(ConditionColumn & FirstConditionRow _ & ":" & ConditionColumn & LastConditionRow) If c.Value <> "" Then For j = 1 To Sheets.Count - 1 If j <> ConditionSheet.Index Then k = 0 With Sheets(j).Cells(Rows.Count, SearchColumn).End(xlUp) Set FindCell = .EntireColumn.Resize(.Row). _ Find(c.Value, , xlValues, xlWhole, xlByColumns, xlNext, False, False, False) End With NotApplicable = FindCell Is Nothing Do Until NotApplicable L = L + 1 k = FindCell.Row If FindCell.Column = SearchColumn Then FindCell.EntireRow.Copy OutputSheet.Cells(i, 1).PasteSpecial _ xlPasteValuesAndNumberFormats, xlNone, False, False i = i + 1 Set FindCell = Sheets(j).Cells.FindNext(After:=FindCell) End If NotApplicable = FindCell.Row <= k Loop End If Next j End If Next c If i = FirstOutputRow Then Application.DisplayAlerts = False OutputSheet.Delete Application.DisplayAlerts = True MsgBox "検索条件を満たしているデータは見つかりませんでした。" _ & vbCrLf & "マクロを終了します。", vbExclamation, "該当データ無し" End If Set c = Cells.Find("", ActiveCell, xlFormulas, _ xlPart, xlByRows, xlNext, False, False, False) With Application .Calculation = xlCalculationAutomatic .ScreenUpdating = True End With End Sub

loockatme
質問者

お礼

回答が遅れ申し訳ありません。 質問内容の動作実現に加え、未記入時のエラーへの分岐など 初心者の私にはとても扱いやすく感謝しています。 ありがとうございました。

関連するQ&A

  • エクセルマクロ 表のタイトルを削除するには?

      A    B       C       D 1  氏名   スコア     氏名    スコア 2  山田さん  100    三谷さん   95 3 加藤さん   50     後藤さん  100   4 佐々木さん  25     鈴木さん   49  このようなデータがあり、これを   A    B       C       D 1  氏名   スコア     氏名    スコア 2  山田さん  100    三谷さん   95 3 加藤さん   50     後藤さん  100   4 佐々木さん  25     鈴木さん   49                    山田さん  100                        加藤さん   50                         佐々木さん  25 のように、隣の表のしたに付け足したいです。その時、「氏名、スコア」のタイトルの行を削除したいです。 どのような手順が一番シンプルなマクロとして記述できるでしょうか。 なお、下に付け足した元の表はそのまま残しておきたいです。 よろしくお願いいたします。  

  • エクセルの同じ名前をカウントする方法

    エクセルの同じ名前をカウントする方法 初歩的な質問ですみません。 山田太郎 田中一郎 鈴木三郎 高橋次郎 鈴木三郎 高橋次郎 鈴木三郎 A1のセルにこういった状態で名前が入力されていた場合に 山田太郎 1 田中一郎 1 鈴木三郎 3 高橋次郎 2 となるように同じ名前がいくつあるかをカウントさせ上記のように表示させたいのですが、 どうしたらいいのでしょうか? (同じシートでも、別のシートでもどちらでも構いません) 至急お答えいただけるとありがたいです。 よろしくお願いします。 

  • エクセル・マクロで書式変更したい!

    エクセルのシートに以下のようなデータがあります。 VBAで、B列が「男」ならば、A列セルの山田・佐藤・加藤を C列が「書」ならば、A列セルの佐藤・吉田を 各々網掛け表示にする方法を教えてください。   A   B   C  D  E  F 1 山田 男 音 ・ ・ ・ 2 鈴木 女 美 ・ ・ ・ 3 佐藤 男 書 ・ ・ ・ 4 吉田 女 書 ・ ・ ・ 5 加藤 男 美 ・ ・ ・ 宜しくお願い申し上げます。≦(._.)≧

  • エクセル:このような「予定表」を作りたいのです。

    よろしくお願いします。 ◆シート1に5分単位で次のような入力を行います。 職員氏名 顧客氏名 訪問予定時間 終了時間 備考 ------------------------ 山田太郎 鈴木一郎  7:05     8:35   ×× 海川三郎 ○○    ○:○○    ○:○○ 山田太郎 佐藤次郎  9:00    10:15   ▲▲ 川波五郎 ○○    ○:○○    ○:○○  山田太郎 田中六郎 13:00    14:25   □□  ◆シート2に関数でつぎのような表示を出したいのです       7:00 7:30 8:00 8:30 9:00 9:30 ・・・ ------------------------ 山田太郎  7:05~8:35    9:00~10:15・・・         鈴木一郎    佐藤次郎 ・・・         ××       ▲▲  ・・・ ------------------------ ◆シート2の時間もセルの列を5分単位で区切ってセル幅を短くし、該当時間に条件付書式で色をつけるイメージです。 ◆職員数数十名、顧客数数百名で曜日別に作成するため、重くなるのは仕方ありませんが、シート2の作成するための「ヒント」がほしいのです。関数を主体に作成いたしたく、四苦八苦したのですが、どうもうまくできません。ご指導をよろしくお願いいたします。

  • エクセルでの顧客数のカウント

    エクセルで下記のような表を作っています。 A   B       C 日付 顧客名   売上 10/1 山田太郎  1000 10/5 中村次郎  2000 10/10 鈴木三郎  1000 10/22 中村次郎  2000 10/31 山田太郎  1000 この時に、10月1か月の顧客数をカウントしたいのです。 上記であれば、山田太郎、中村次郎、鈴木三郎の3人ということになるはずです。 どのようにすればできますでしょうか。

  • 条件にあった複数データを組合わせて別のセルに表示するには?

    例えば、以下のデータがセルに入っていたとして A列には姓 B列には名 A1:鈴木  B1:一郎 A2:鈴木  B2:次郎 A3:鈴木  B3:三郎 A4:佐藤  B3:あきら A5:佐藤  B3:けんた 同じ姓にあてはまるデータの名を、組合わせて別のセルに表示したいのです。 結果イメージ C1:鈴木  D1:一郎 次郎 三郎 C2:佐藤  D2:あきら けんた このようなことAccessかExcelで出来ますか?

  • 【エクセル】リストの照合について教えてください!!

    sheet1に、下記の様に600件の氏名が書いてあります。 A      B 1     山田太郎  2     鈴木花子 ・・・ 600   佐藤次郎 sheet2に、地域と氏名がずらっと書いてあります。 A      B      C     D    E 東京都   神奈川県   埼玉県   千葉県  茨城県 山田太郎 鈴木太郎 山田花子 佐藤次郎 ・・・ このsheet2の地域を、sheet1のC列に下記の様に入れたいのですが、 どの様に行ったら良いでしょうか? みなさんのお知恵をください!!宜しくお願い致します。 A      B      C 1     山田太郎   東京都 2     鈴木花子   神奈川県 ・・・ 600   佐藤次郎   埼玉県

  • Excel上でのセルの並び替えについて

    Excel2007にて下記作業は可能でしょうか? (シート1) A1   B1   C1   D1 田中  ○   鈴木  △ A2   B2   C1   D2 浜田  ×        A3   B3   C1   D3 後藤  ○   加藤  × ↓ (シート2) A1   B1   C1 田中  ○ A2   B2   C2 鈴木  △ A3   B3   C3 浜田  ×    A4   B4   C4 後藤  ○ A5   B5   C5 加藤  × 上記のとおり別シートに自動で並び変える数式はあるのでしょうか? データの量が多いのと、Excelの操作ができない人用に自動化したいのですが。

  • Excelでのセルの検索

    セルの検索方法について、質問します。 現在の表       A    B      C     D --+-------+-------+-------+-------+------+-------+------- 1   鈴木   加藤   斎藤    --+-------+-------+-------+-------+------+-------+------- 2   佐藤   清水         --+-------+-------+-------+-------+------+-------+------- --+-------+-------+-------+-------+------+-------+------- 3   山田              --+-------+-------+-------+-------+------+-------+------- 理想形       A    B      C     D --+-------+-------+-------+-------+------+-------+------- 1   鈴木   加藤   斎藤   斎藤 --+-------+-------+-------+-------+------+-------+------- 2   佐藤   清水         清水 --+-------+-------+-------+-------+------+-------+------- --+-------+-------+-------+-------+------+-------+------- 3   山田              山田 --+-------+-------+-------+-------+------+-------+------- 上記のような表(現在の表)で、D列に空白セル以外の一番右のセルを探して表示できるような関数を探しているのですが?。 仕事で進捗表の作成を行っており、困っていますのでよろしくお願い致します。

  • エクセルVBA 複数の条件を含む対象を抜き出す。

    エクセルVBAについて質問です。 エクセルのバージョンは2003と2007を主に使用しています。 下記の様なデータがあるときに、部活が「野球」でかつクラブは「囲碁」に入っている生徒の学籍番号を別のシート(Sheet2)のB3から下に順にリスト化するマクロがどうしても出来なくて困っています。 find next等を使うのでは無いかと色々してみましたが上手く出来ない現状です。 <sheet1>    A      B      C       D    E 1 学籍番号 学年    名前     部活   クラブ 2 2222222   1    山田 太郎   野球   囲碁 3 9854923    2   吉田 次郎   剣道   絵画   4 1111111    3   佐藤 三郎   野球   囲碁 5 8888883    1   米山 権蔵   卓球   囲碁