Excel活用:VBAで個人の残業管理表から全体のまとめを作るには

PC活用

Excelで作られた個人別の残業管理表をもとに、グループ全体の残業管理表を作る方法を紹介します。

イメージとしてはこんな感じです。

個人別の残業管理表から”時間数”だけを抜き出し、メンバー全員の残業時間をまとめるといった感じですね。

それでは、まず”外枠”から作ってみます。

Option Explicit
Sub 残業時間()

End Sub

つぎに、社員Aの2月1日の残業時間を、”まとめ”のC4セルに表示させます。

Option Explicit
Sub 残業時間()

Worksheets(“まとめ”).Cells(4, 3).Value = Worksheets(“社員A”).Cells(4, 5).Value

End Sub

実行するとこのようになりました。 (画面の都合上、2月3日以降は割愛します)

つぎに、2月の末日までデータが反映されるように、日付の変数を次のように設定します。

  • 社員Aの日付のカウンタ変数・・・i ※社員Aのシートの4行目から31日分
  • まとめの日付のカウンタ変数・・・j ※ループを1回実行したら1ずつ進む

Option Explicit

Sub 残業時間()

Dim i As Long ’日数のカウンタ変数(まとめ)
Dim j As Long ’日数のカウンタ変数(個別)

i = 4 ’日数の始まりは4行目から
For j = 4 To 35 ’まとめの4行目から31日分
Worksheets(“まとめ”).Cells(j, 3).Value = Worksheets(“社員A”).Cells(i, 5).Value
i  = i + 1  ’1行進む
Next

End Sub

実行すると次のようになりました。

今は社員Aのみデータを反映していますが、こんどはシート全員分のデータが反映できるようにします。

まずは”社員A”のシートを検索し、シート名が”社員A”ならば”まとめ”シートの”社員A”の列にデータを反映するようにします。

Option Explicit

Sub 残業時間()

Dim i As Long  ‘日数のカウンタ変数(個別)
Dim j As Long  ’日数のカウンタ変数(まとめ)
Dim k As Long  ‘シートのカウンタ変数

i = 4  ’日数の始まりは4行目から
For j = 4 To 35  ‘まとめの4行目から31日分
  For k = 1 To Worksheets.Count  ‘ワークシートを1つずつ見てみる
    If Sheets(k).Name = “社員A” Then
      Worksheets(“まとめ”).Cells(j, 3).Value = Worksheets(“社員A”).Cells(i, 5).Value
      i = i + 1 ‘1行進む
    End If
  Next
Next

End Sub

実行すると先ほどと同じ結果になります

最後に、他の社員のデータも反映できるように6行目から13行目までをコピペし、社員名と”まとめ”シートへデータを反映させる列を変えてやれば、全員分のデータが反映されるようになります。

Option Explicit

Sub 残業時間()

Dim i As Long  ‘日数のカウンタ変数(個別)
Dim j As Long  ’日数のカウンタ変数(まとめ)
Dim k As Long  ‘シートのカウンタ変数

i = 4  ’日数の始まりは4行目から
For j = 4 To 35  ‘まとめの4行目から31日分
  For k = 1 To Worksheets.Count  ‘ワークシートを1つずつ見てみる
    If Sheets(k).Name = “社員A” Then
      Worksheets(“まとめ”).Cells(j, 3).Value = Worksheets(“社員A”).Cells(i, 5).Value
      i = i + 1 ‘1行進む
    End If
  Next
Next

i = 4  ’日数の始まりは4行目から
For j = 4 To 35  ’まとめの4行目から31日分
  For k = 1 To Worksheets.Count  ’ワークシートを1つずつ見てみる
    If Sheets(k).Name = “社員B” Then
      Worksheets(“まとめ”).Cells(j, 4).Value = Worksheets(“社員B”).Cells(i, 5).Value
      i = i + 1  ’1行進む
    End If
  Next
Next

i = 4  ’日数の始まりは4行目から
For j = 4 To 35  ‘まとめの4行目から31日分
  For k = 1 To Worksheets.Count  ‘ワークシートを1つずつ見てみる
    If Sheets(k).Name = “社員C” Then
      Worksheets(“まとめ”).Cells(j, 5).Value = Worksheets(“社員C”).Cells(i, 5).Value
      i = i + 1 ‘1行進む
    End If
  Next
Next

End Sub

これで全員分のデータが反映されるようになりました

もしメンバーを追加したいときは、6行目から13行目までをコピペし、

  • 社員名
  • ”まとめ”シートへデータを反映させる列

を指定してあげればOKです。

タイトルとURLをコピーしました