:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

ตัวอย่าง VBA code สร้างตารางการทำงานแบบกะเวียน

ฟอรัมสำหรับแจกจ่ายแบ่งปันไฟล์ รวมทั้งแหล่งความรู้ต่าง ๆ เกี่ยวกับ Excel
User avatar
snasui
Site Admin
Site Admin
Posts: 30801
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

ตัวอย่าง VBA code สร้างตารางการทำงานแบบกะเวียน

#1

Post by snasui »

:D คำอธิบาย
  1. โค้ดนี้เริ่มต้นด้วยการกำหนดชื่อตารางงานและพนักงาน
  2. กำหนดจำนวนวันในเดือน June
  3. สร้าง pattern การทำงาน 4 วัน และหยุด 2 วัน
  4. สร้างตารางการทำงานโดยการวนลูปตามพนักงานและวันในเดือน
  5. เขียนตารางการทำงานลงในชีทที่กำหนด
โปรดแก้ไขชื่อชีทและจำนวนพนักงานตามที่ต้องการ และทำการเรียกใช้งานฟังก์ชันนี้ใน Excel VBA Editor (Alt + F11) และรันโค้ดนี้เพื่อสร้างตารางกะเวียนพนักงานตามที่ต้องการ

Code: Select all

Sub CreateShiftSchedule()
    Dim ws As Worksheet
    Dim employees As Variant
    Dim daysInMonth As Integer
    Dim dayIndex As Integer
    Dim employeeIndex As Integer
    Dim shiftPattern As Variant
    Dim employeeShifts() As String
    Dim totalEmployees As Integer
    Dim countPattern As Integer

    ' กำหนดชื่อตารางงาน
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' กำหนดพนักงาน
    employees = Array("Emp1", "Emp2", "Emp3", "Emp4", "Emp5", "Emp6", "Emp7", "Emp8")
    daysInMonth = 30 ' จำนวนวันในเดือน June
    totalEmployees = UBound(employees) + 1

    ' สร้าง pattern การทำงาน 4 วัน หยุด 2 วัน
    shiftPattern = Array("D", "D", "N", "N", "O", "O") ' D = Day shift, N = Night shift, O = Off
    countPattern = UBound(shiftPattern) + 1
    
    ' สร้างตารางการทำงาน
    ReDim employeeShifts(totalEmployees - 1, daysInMonth - 1)
    
    For employeeIndex = 0 To totalEmployees - 1
        For dayIndex = 0 To daysInMonth - 1
            employeeShifts(employeeIndex, dayIndex) = shiftPattern((dayIndex + (employeeIndex Mod countPattern)) Mod countPattern)
        Next dayIndex
    Next employeeIndex
    
    ' เขียนตารางการทำงานลงในชีท
    For employeeIndex = 0 To totalEmployees - 1
        ws.Cells(employeeIndex + 2, 1).Value = employees(employeeIndex)
        For dayIndex = 0 To daysInMonth - 1
            ws.Cells(1, dayIndex + 2).Value = dayIndex + 1
            ws.Cells(employeeIndex + 2, dayIndex + 2).Value = employeeShifts(employeeIndex, dayIndex)
        Next dayIndex
    Next employeeIndex
End Sub