Excel-VBAで業務改善35 

目次

入力の簡単なシフト表

プロシジャー

  • Call CellSheetON  出勤日を入力する
  • Call CellSheetOFF  休暇日を入力する
  • Call ShiftLidt001  その月の日付を作る
  • Call addBoarders  罫線を作成する
  • Call AddCustomContextMenu  コンテキストメニューを追加する

出勤日を入力する

Sub CellSheetON()
    Dim selectedRange As Range
    Dim cell As Range
    
    ' 選択範囲を取得
    Set selectedRange = Selection
    
    ' 選択された各セルに"*"を追加
    For Each cell In selectedRange
        cell.Value = "出"
        cell.HorizontalAlignment = xlCenter
        cell.Interior.Color = RGB(0, 0, 255)
        cell.Font.Color = RGB(255, 255, 255)
    Next cell
    
    Set selectedRange = Nothing
End Sub

休暇日を入力する

Sub CellSheetOFF()
    Dim selectedRange As Range
    Dim cell As Range
    
    ' 選択範囲を取得
    Set selectedRange = Selection
    
    ' 選択された各セルに"*"を追加
    For Each cell In selectedRange
        cell.Value = "休"
        cell.HorizontalAlignment = xlCenter
        cell.Interior.Color = RGB(255, 0, 0)
        cell.Font.Color = RGB(255, 255, 255)
    Next cell
    
    Set selectedRange = Nothing
End Sub

その月の日付を作る

Sub ShiftLidt001()
  Dim cdy As Date
  Dim lastDayOfMonth As Integer
  Dim i As Integer
  Dim ws As Worksheet
    
  ' 今日の日付を取得
  cdy = #5/1/2024#
  Set ws = Worksheets("Sheet3")
    
  ' 今月の最後の日を取得
  lastDayOfMonth = Day(DateSerial(Year(cdy), Month(cdy) + 1, 0))
  
  ws.Cells(3, 2) = cdy
  ws.Cells(3, 2).NumberFormat = "yyyy/mm"
  
  ws.Cells(6, 1) = "No"
  ws.Cells(6, 2) = "名前"
  
  Columns("A:B").ColumnWidth = 15
  Columns("C:AC").ColumnWidth = 3
  
  For i = 1 To lastDayOfMonth
    curDate = DateSerial(Year(cdy), Month(cdy), i)
    With ws.Cells(5, 2 + i) '日付
       .NumberFormat = "dd"
       .HorizontalAlignment = xlCenter
       .Value = curDate
    End With
    
    With ws.Cells(6, 2 + i) '曜日
       wd = weekdayName(Weekday(curDate, vbSunday), True, vbUseSystemDayOfWeek)
       .Value = wd
       .HorizontalAlignment = xlCenter
    End With
  Next i

End Sub

罫線を作成する

Sub addBoarders()
  Dim ws As Worksheet
  Set ws = Worksheets("sheet3")
  
  With ws.Range("A5:AG15").Borders
         .LineStyle = xlContinuous   ' 罫線のスタイルを設定
         .Weight = xlThin            ' 罫線の太さを設定
         .ColorIndex = xlAutomatic   ' 罫線の色を自動で設定
  End With

End Sub

コンテキストメニューを追加する

' コンテキストメニューにカスタムコマンドを追加
Sub AddCustomContextMenu()
    Dim cbar As CommandBar
    Dim cbarBtn As CommandBarButton
    Dim cbarCtrl As CommandBarControl
    
    ' コンテキストメニューを取得
    Set cbar = Application.CommandBars("Cell")
    
    ' 既存のコマンドを削除
    On Error Resume Next
    cbar.Controls("CellSheetOFF").Delete
    cbar.Controls("CellSheetON").Delete
    On Error GoTo 0
    
    ' コマンドを追加
    Set cbarBtn = cbar.Controls.Add(Type:=msoControlButton, Temporary:=True)
    With cbarBtn
        .Caption = "休"
        .OnAction = "CellSheetOFF"
    End With
     ' コマンドを追加
    Set cbarBtn = cbar.Controls.Add(Type:=msoControlButton, Temporary:=True)
    With cbarBtn
        .Caption = "出"
        .OnAction = "CellSheetON"
    End With
End Sub
よかったらシェアしてね!
目次