アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になっております。

支店別の人別で日々、時間外を管理しているのですが
45H以上の人だけを別表に抽出したいのです。

Book1のエクセルに支店別に複数シートを作成しています。(現在、15シートありますが今後増える可能性あり)
その中に添付画像のように人別で同じフォーマットで時間外が入力されています。
今回別表に抽出したい項目は下記4つです。

①シート名(支店名)
②氏名コード(例:A3の数字)
③氏名(例:A4)
④月間合計(I列:ここが45H以上の場合)

関数の数式orマクロどちらでも結構ですので
アドバイスいただけますと幸いです。

「複数シートで条件に該当する人を別表に抽出」の質問画像

質問者からの補足コメント

  • 抽出先のフォーマット画像を添付いたします。

    「複数シートで条件に該当する人を別表に抽出」の補足画像1
      補足日時:2020/04/05 14:30

A 回答 (1件)

こんにちは!



一例です。
「抽出先」シートはシート見出しの一番左側にあり、参照先シートはシート見出しの2番目以降にあるとします。
「抽出先」シートのD列表示形式はあらかじめ [h]:mm にしておいてください。

標準モジュールです。

Sub Sample1()
 Dim i As Long, k As Long, lastRow As Long
 Dim wS As Worksheet

  With Worksheets(1)
   lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
    If lastRow > 1 Then
     Range(.Cells(2, "A"), .Cells(lastRow, "D")).ClearContents
    End If
    For k = 2 To Worksheets.Count
     Set wS = Worksheets(k)
      For i = 4 To wS.Cells(Rows.Count, "A").End(xlUp).Row Step 3
       If wS.Cells(i, "I") >= TimeSerial(45, 0, 0) Then
        With .Cells(Rows.Count, "A").End(xlUp).Offset(1)
         .Value = wS.Name
         .Offset(, 1) = wS.Cells(i - 1, "A")
         .Offset(, 2) = wS.Cells(i, "A")
         .Offset(, 3) = wS.Cells(i, "I")
        End With
       End If
      Next i
    Next k
  End With
End Sub

こんな感じではどうでしょうか?

※ 気になる点が・・・
お示しの画像だとI列が合計列になっていますが、1か月分となるとI列ではないですよね?
なので、コード内の「I」の部分は実際の配置に合わせてください。m(_ _)m
    • good
    • 1
この回答へのお礼

ありがとう

いつもご教授頂きましてありがとうございます。

気になる点でご提示頂いた内容ですが、一か月、1ブックで管理しているため、それで大丈夫です。

明日、早速試してみます。

ありがとありがとうございます!

お礼日時:2020/04/05 21:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!