Skip to content

Instantly share code, notes, and snippets.

@htmllifehack
Last active May 5, 2019 12:47
Show Gist options
  • Save htmllifehack/fcf5b28df84ad54f830658eca4790356 to your computer and use it in GitHub Desktop.
Save htmllifehack/fcf5b28df84ad54f830658eca4790356 to your computer and use it in GitHub Desktop.
Sub member()
'sheet("スタッフ")に入力されている人数をカウント
'セルの結合をしているため数値を2倍に増やす
last_column = Worksheets("スタッフ").Cells(4, 2).End(xlDown).row * 2
'日付をカウント
last_row = Worksheets("出勤表").Cells(2, 7).End(xlDown).row
'シートの保護とセルのロックを解除する
Worksheets("出勤表").Unprotect
Cells.locked = False
'シート(スタッフ)のメンバーをシート勤務表に反映させる
Worksheets("スタッフ").Select
member_last_row = Cells(4, 2).End(xlDown).row
Worksheets("出勤表").Select
' horizontalAligment = xlCenterで中央揃え
' borders.LineStyle = xlContinuousで格子罫線
c = 0
For i = 4 To member_last_row
Set member_cell = Range(Cells(2, 9 + c), Cells(2, 9 + c + 1))
member_cell.Merge
member_cell.HorizontalAlignment = xlCenter
'member_cell.Borders.LineStyle = xlContinuous
Cells(2, 9 + c) = Worksheets("スタッフ").Cells(i, 2)
c = c + 2
Next i
'出退勤の文字を表示
c2 = 0
For j = 4 To member_last_row
Set start_cell = Cells(3, 9 + c2)
start_cell.Value = "出勤"
start_cell.HorizontalAlignment = xlCenter
start_cell.Borders.LineStyle = xlContinuous
Set leaving_cell = Cells(3, 10 + c2)
leaving_cell.Value = "退勤"
leaving_cell.HorizontalAlignment = xlCenter
'leaving_cell.Borders.LineStyle = xlContinuous
c2 = c2 + 2
Next j
days_last_row = Cells(3, 7).End(xlDown).row '34
Range(Cells(2, 9), Cells(days_last_row, (member_last_row - 3) * 2 + 8)).Borders.LineStyle = xlContinuous
Worksheets("出勤表").Select
'シートの保護とセルのロックを行う
Cells.locked = True
Range("b4:e6").locked = False
Worksheets("出勤表").Protect
End Sub
Sub start_work()
'シートの保護とセルのロックを解除する
Worksheets("出勤表").Unprotect
Cells.locked = False
'sheet("スタッフ")に入力されている人数をカウント
'セルの結合をしているため数値を2倍に増やす
last_column = Worksheets("スタッフ").Cells(4, 2).End(xlDown).row * 2
'日付をカウント
last_row = Worksheets("出勤表").Cells(2, 7).End(xlDown).row
days = 0
mem = 0
If Range("i2") = "" Then
MsgBox "スタッフが反映されていません。" & Chr(13) & "スタッフ反映ボタンを押してください。"
Else
If Range("b4") = "" Then
MsgBox "スタッフが選択されていません。"
Else
'戻ることができないので初めにバックアップを取っておく
Worksheets("出勤表").Range(Cells(2, 2), Cells(last_row, last_column)).Copy
Worksheets("バックアップ").Range("b2").PasteSpecial
Application.CutCopyMode = True
'B4のスタッフ名と一致する列を検索
For i = 0 To last_column + 1
If Cells(2, i + 9) = Range("b4") Then
mem = i + 9
End If
Next i
'今日の日付と一致する行を検索
For k = 0 To 31
If Cells(4 + k, 7) = Range("a2") Then
days = 4 + k
End If
Next k
'現在の時刻を打刻
Cells(days, mem) = Format(Time, "hh:mm:ss")
End If
End If
'シートの保護とセルのロックを行う
Cells.locked = True
Range("b4:e6").locked = False
Worksheets("出勤表").Protect
End Sub
Sub leaving_work()
'出勤マクロと同様
'シートの保護とセルのロックを解除する
Worksheets("出勤表").Unprotect
Cells.locked = False
'sheet("スタッフ")に入力されている人数をカウント
'セルの結合をしているため数値を2倍に増やす
last_column = Worksheets("スタッフ").Cells(4, 2).End(xlDown).row * 2
'日付をカウント
last_row = Worksheets("出勤表").Cells(2, 7).End(xlDown).row
days = 0
mem = 0
If Range("i2") = "" Then
MsgBox "スタッフが反映されていません。" & Chr(13) & "スタッフ反映ボタンを押してください。"
Else
If Range("b4") = "" Then
MsgBox "スタッフが選択されていません。"
Else
For i = 0 To last_column
If Cells(2, i + 9) = Range("b4") Then
mem = i + 9 + 1
End If
Next i
For k = 0 To 31
If Cells(3 + k, 7) = Range("a2") Then
days = 3 + k
End If
Next k
If Cells(days, mem - 1) = "" Then
MsgBox Range("b4").Value & "さんは出勤していません。"
Else
'戻ることができないので初めにバックアップを取っておく
Worksheets("出勤表").Range(Cells(2, 2), Cells(last_row, last_column)).Copy
Worksheets("バックアップ").Range("b2").PasteSpecial
Application.CutCopyMode = True
Cells(days, mem) = Format(Time, "hh:mm:ss")
End If
End If
End If
'シートの保護とセルのロックを行う
Cells.locked = True
Range("b4:e6").locked = False
Worksheets("出勤表").Protect
End Sub
Sub clear()
msg = MsgBox("クリアしますか?", vbYesNo)
If msg = vbYes Then
'シートの保護とセルのロックを解除する
Worksheets("出勤表").Unprotect
Cells.locked = False
last_column = Worksheets("スタッフ").Cells(4, 2).End(xlDown).row - 3
last_row = Cells(2, 7).End(xlDown).row
Set member_cell = Worksheets("出勤表").Range(Cells(2, 9), Cells(last_row, last_column * 2 + 10))
member_cell.UnMerge
member_cell.Borders.LineStyle = xlLineStyleNone
Worksheets("出勤表").Range(Cells(2, 9), Cells(last_row, last_column * 2 + 10)).ClearContents
Worksheets("バックアップ").Select
Set member_cell_b = Worksheets("バックアップ").Range(Cells(2, 9), Cells(last_row, last_column * 2 + 10))
member_cell_b.UnMerge
member_cell_b.Borders.LineStyle = xlLineStyleNone
Worksheets("バックアップ").Range(Cells(2, 9), Cells(last_row, last_column * 2 + 10)).ClearContents
Worksheets("出勤表").Select
'シートの保護とセルのロックを行う
Cells.locked = True
Range("b4:e6").locked = False
Worksheets("出勤表").Protect
Else
MsgBox "処理はキャンセルされました"
End If
End Sub
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment