別案を示します。
Sub test2()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim lastRow1&, lastRow2&
Dim rng As Range
Dim person As String
Dim d As Long ' Longにするのがキモ
Dim m
Dim k&, j&
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
lastRow1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row
lastRow2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row
Set rng = ws2.Range("A1", ws2.Cells(lastRow2, "A"))
For j = 2 To 4
For k = 2 To lastRow1
person = ws1.Cells(k, "A")
d = ws1.Cells(k, j).Value 'Value2とすると更に明確になるかも
m = Application.Match(d, rng, 0)
If Not IsError(m) Then
If IsEmpty(ws2.Cells(m, j)) Then
ws2.Cells(m, j) = person
Else
ws2.Cells(m, j) = ws2.Cells(m, j) & "," & person
End If
End If
Next
Next
End Sub
(なお、test,test2とも書き込み先の初期化を端折っていますが、そちらで補充してください。)
【参考】
日付の検索は、振る舞いがわかりにくいテーマのひとつだと思います。
もしFindを使う場合は、
http://officetanaka.net/excel/vba/tips/tips131.htm
から始まるいくつかのページを参照してください。
田中氏をして
> 日付の検索を一言で表すと「いろいろあって難しい」ってことですね。
> そのことだけ、忘れないようにしましょう。
と言わしめたテーマのようです。
# 出勤は休日出勤の意味でしたか。月曜、火曜が休みなんですか?
# 追加説明とか、なんらかのコミュニケーションをする意図はないのですか。