エクセルの勤務表(マクロ)についての質問です。
エクセルの勤務表から、日付別に出勤者とその出勤者の勤務を抜き出すマクロを作りたいのですが、途中で分からなくなってしまい困っています。
初めまして。私はマクロを初めてまだ、2ヶ月の初心者でございます。
質問内容に、不手際がありましたら、ご容赦ください。
勤務表マスタには勤務表があり、それ以外にsheet1 からsheet30まで、30枚のシートを用意しておき、日付別にsheet1に4月1日の勤務者とその出勤者の勤務を(早番はB3から下に表示し、遅番はB8下に表示するようにします。)抜き出し、同じようにしてsheet2には、4月2日の勤務者とその出勤者の勤務を、同じように、それぞれB3とB8に抜き出し…というように、30日分抜きだしたいのです。休みの人は表示しません(画像写真を参照願います。見にくい写真で恐縮でございます。)
<勤務表マスタ>
名前 4月1日 4月2日 4月3日 4月4日…
坂本 遅番 早番 遅番 休み…
井端 早番 休み 早番 遅番…
長野 遅番 早番 早番 早番…
阿部 遅番 遅番 遅番 早番…
村田 休み 早番 遅番 遅番…
高橋 早番 遅番 休み 遅番…
<sheet1=4月1日>
(B3、C3から下に)
井端 早番
高橋 早番
(B8、C8から下に)
坂本 遅番
長野 遅番
まずは、勤務表から4月1日だけをとりあえず抜き出そうと、マクロを作って、勤務表マスタから、sheet1である、4月1日には、転記できたのですが、同じように、sheet2(4月2日)、 sheet3(4月3日)…と勤務表マスタから、各シートに転記するには、どうすれば良いのか?分からなくなってしまいました。
力技で、このマクロの「Sheet1」の部分を「Sheet2」にするようにしてといった感じで、あと30個書けば、できるような気もしますが、膨大な行数になりますし、何か他の方法をと考えたのですが、まだまだ、初心者で、どうすれば良いのか全く思いつきません。ここまで、インターネットで調べたりして、何とか作ったもので、全く幼稚なマクロかと思いますが、なにとぞ、ご鞭撻のほど、よろしくお願い致します。
Public Sub test()
Dim strSerch1 As String
Dim strSerch2 As String
Dim LastRow As Long
Dim i As Long, j As Long, k As Long
'検索する文字を以下の二つの変数に代入
strSerch1 = "早番"
strSerch2 = "遅番"
'Sheet1に「早番」の人をリスト化するための変数を設定
'最初に入れるのが3行目なのでjに3を代入
j = 3
With Worksheets("勤務表マスタ")
'.Cells(.Rows.Count, 1).End(xlUp).Rowで最後の行がどこなのか調べて
'LastRow変数に代入する。
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 2 To LastRow
'ここで2列目を検索して、「早番」の人がいたら、Sheet1の3行目から、リスト化する。
If .Cells(i, 2).Value = strSerch1 Then
Worksheets("Sheet1").Cells(j, 2).Value = .Cells(i, 1).Value
Worksheets("Sheet1").Cells(j, 3).Value = .Cells(i, 2).Value
j = j + 1
End If
Next i
End With
'Sheet1に「遅番」の人をリスト化するための変数を設定
'最初に入れるのが8行目なのでkに8を代入
k = 8
With Worksheets("勤務表マスタ")
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 2 To LastRow
'ここで2列目を検索して、「遅番」の人がいたら、Sheet1の8行目から、リスト化する。
If .Cells(i, 2).Value = strSerch2 Then
Worksheets("Sheet1").Cells(k, 2).Value = .Cells(i, 1).Value
Worksheets("Sheet1").Cells(k, 3).Value = .Cells(i, 2).Value
k = k + 1
End If
Next i
End With
End Sub
お礼
ありがとうございます。 一度、電話して聞いてみたいと思います。