Tính giờ chấm công ngày Lễ tết (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

tnfsmith

Thành viên hoạt động
Tham gia
26/3/07
Bài viết
151
Được thích
0
Giới tính
Nam
Em có đính kèm file, kính mong anh chị em xem và hỗ trợ ah.
Em chỉ muốn tính số giờ nghỉ Lễ tết và Ngày nghỉ trên Bảng chấm công
Rất mong được sự hỗ trợ.
 

File đính kèm

Em có đính kèm file, kính mong anh chị em xem và hỗ trợ ah.
Em chỉ muốn tính số giờ nghỉ Lễ tết và Ngày nghỉ trên Bảng chấm công
Rất mong được sự hỗ trợ.
Không nên đăng nhiều bài cho 1 vấn đề, hạn chế viết từ tắt vì vi phạm nội qui của diễn đàn
Mã:
O10 =MIN(SUMPRODUCT(COUNTIFS('CHI TIET'!D11:AH11,"<>",'CHI TIET'!$D$10:$AH$10,'CHI TIET'!$AK$9:$AK$21)),3)
Copy xuống
Makefile:
M10 =MIN(SUMPRODUCT(('CHI TIET'!D11:AH11<>"")*(WEEKDAY('CHI TIET'!$D$10:$AH$10,2)>5)*(COUNTIF('CHI TIET'!$AK$9:$AK$21,'CHI TIET'!$D$10:$AH$10)=0)),3-O10)
Copy xuống
 

File đính kèm

Không nên đăng nhiều bài cho 1 vấn đề, hạn chế viết từ tắt vì vi phạm nội qui của diễn đàn
Mã:
O10 =MIN(SUMPRODUCT(COUNTIFS('CHI TIET'!D11:AH11,"<>",'CHI TIET'!$D$10:$AH$10,'CHI TIET'!$AK$9:$AK$21)),3)
Copy xuống
Makefile:
M10 =MIN(SUMPRODUCT(('CHI TIET'!D11:AH11<>"")*(WEEKDAY('CHI TIET'!$D$10:$AH$10,2)>5)*(COUNTIF('CHI TIET'!$AK$9:$AK$21,'CHI TIET'!$D$10:$AH$10)=0)),3-O10)
Copy xuống
Cám ơn bạn đã hỗ trợ.
Công thức hiện chỉ tính số ngày, mình muốn tính ra số giờ tương ứng với ngày đó (ví dụ:1 ngày thì 8 giờ, 2 ngày thì 16 giờ, 3 ngày thì 24 giờ) bạn có thể hỗ trợ thêm được không vậy?
Xin cám ơn
Bài đã được tự động gộp:

tham khảo file, công thức hơi dài :))
Của bạn hơi khó hiểu nhưng ra chuẩn kết quả.

Cám ơn bạn nhiều lắm
 
Cám ơn bạn đã hỗ trợ.
Công thức hiện chỉ tính số ngày, mình muốn tính ra số giờ tương ứng với ngày đó (ví dụ:1 ngày thì 8 giờ, 2 ngày thì 16 giờ, 3 ngày thì 24 giờ) bạn có thể hỗ trợ thêm được không vậy?
Xin cám ơn
Bài đã được tự động gộp:


Của bạn hơi khó hiểu nhưng ra chuẩn kết quả.

Cám ơn bạn nhiều lắm
Nhân thêm cho 8 giờ/ngày
Mã:
O10 =MIN(SUMPRODUCT(COUNTIFS('CHI TIET'!D11:AH11,"<>",'CHI TIET'!$D$10:$AH$10,'CHI TIET'!$AK$9:$AK$21)),3)*8
M10 =MIN(SUMPRODUCT(('CHI TIET'!D11:AH11<>"")*(WEEKDAY('CHI TIET'!$D$10:$AH$10,2)>5)*(COUNTIF('CHI TIET'!$AK$9:$AK$21,'CHI TIET'!$D$10:$AH$10)=0))*8,24-O10)
 
Nhân thêm cho 8 giờ/ngày
Mã:
O10 =MIN(SUMPRODUCT(COUNTIFS('CHI TIET'!D11:AH11,"<>",'CHI TIET'!$D$10:$AH$10,'CHI TIET'!$AK$9:$AK$21)),3)*8
M10 =MIN(SUMPRODUCT(('CHI TIET'!D11:AH11<>"")*(WEEKDAY('CHI TIET'!$D$10:$AH$10,2)>5)*(COUNTIF('CHI TIET'!$AK$9:$AK$21,'CHI TIET'!$D$10:$AH$10)=0))*8,24-O10)
Mình muốn thay vì để ngày nghỉ thì mình muốn cộng ngày giờ làm thêm theo màu được không nhỉ? ý là ngày lễ mình để màu đỏ, thứ 7, CN để màu xanh... và nó sẽ cộng theo ngày ra cho mình.
 
"help mình" là gì vậy? không nên viết nữa nạc nữa mở, là quy định trong nội quy diễn đàn
Gởi file tô màu lên và nói rỏ cần tính cái gì
Cám ơn bạn đã góp ý. Mình đã đính kèm file. Bạn xem có thể hỗ trợ mình được không nhé.
 

File đính kèm

Tô màu là được rùi bạn

Chị cần tô màu là đủ điều kiện rồi bạn, tô màu bằng tay ấy.
Màu đỏ và màu xanh có nhiều màu, phải tô đúng màu trong file
Mã:
Option Compare Text

Function NgayNghi(MaNV$, Maso As Range, ChamCong As Range, Optional NghiLe& = 0) As Single
  Dim sRow&, sCol&, i&, j&, tmp&
  sRow = ChamCong.Rows.Count: sCol = ChamCong.Columns.Count
  For i = 1 To sRow
    If MaNV = Maso(i, 1).Value Then
      For j = 1 To sCol
        If ChamCong(i, j).Value <> Empty Then
          If NghiLe = 0 And ChamCong(i, j).Font.ColorIndex = 42 Then
            tmp = tmp + 1
          ElseIf NghiLe = 1 And ChamCong(i, j).Font.ColorIndex = 3 Then
            tmp = tmp + 1
          End If
        End If
      Next j
    End If
  Next i
  NgayNghi = tmp * 8
End Function
Xem cách nhập công thức trong file
 

File đính kèm

Màu đỏ và màu xanh có nhiều màu, phải tô đúng màu trong file
Mã:
Option Compare Text

Function NgayNghi(MaNV$, Maso As Range, ChamCong As Range, Optional NghiLe& = 0) As Single
  Dim sRow&, sCol&, i&, j&, tmp&
  sRow = ChamCong.Rows.Count: sCol = ChamCong.Columns.Count
  For i = 1 To sRow
    If MaNV = Maso(i, 1).Value Then
      For j = 1 To sCol
        If ChamCong(i, j).Value <> Empty Then
          If NghiLe = 0 And ChamCong(i, j).Font.ColorIndex = 42 Then
            tmp = tmp + 1
          ElseIf NghiLe = 1 And ChamCong(i, j).Font.ColorIndex = 3 Then
            tmp = tmp + 1
          End If
        End If
      Next j
    End If
  Next i
  NgayNghi = tmp * 8
End Function
Xem cách nhập công thức trong file
Cám ơn bạn rất nhiều.
 
Màu đỏ và màu xanh có nhiều màu, phải tô đúng màu trong file
Mã:
Option Compare Text

Function NgayNghi(MaNV$, Maso As Range, ChamCong As Range, Optional NghiLe& = 0) As Single
  Dim sRow&, sCol&, i&, j&, tmp&
  sRow = ChamCong.Rows.Count: sCol = ChamCong.Columns.Count
  For i = 1 To sRow
    If MaNV = Maso(i, 1).Value Then
      For j = 1 To sCol
        If ChamCong(i, j).Value <> Empty Then
          If NghiLe = 0 And ChamCong(i, j).Font.ColorIndex = 42 Then
            tmp = tmp + 1
          ElseIf NghiLe = 1 And ChamCong(i, j).Font.ColorIndex = 3 Then
            tmp = tmp + 1
          End If
        End If
      Next j
    End If
  Next i
  NgayNghi = tmp * 8
End Function
Xem cách nhập công thức trong file
Mình đã test lại thì còn vấn đề này chưa giải quyết được đó là code chưa chạy đúng nếu tăng tô màu các Ngày Nghĩ cuối tuần càng nhiều thì code cứ tăng lên hơn số tổng là tối đa là 24 giờ/tháng và ưu tiên ngày Nghĩ Lễ trước, sau đó mới đến Ngày Nghĩ cuối tuần.

Bạn @HieuCD có thể xem lại dùm mình được không ah.
Xin cám ơn.
 
Mình đã test lại thì còn vấn đề này chưa giải quyết được đó là code chưa chạy đúng nếu tăng tô màu các Ngày Nghĩ cuối tuần càng nhiều thì code cứ tăng lên hơn số tổng là tối đa là 24 giờ/tháng và ưu tiên ngày Nghĩ Lễ trước, sau đó mới đến Ngày Nghĩ cuối tuần.

Bạn @HieuCD có thể xem lại dùm mình được không ah.
Xin cám ơn.
Code chỉ tính theo
Mình muốn thay vì để ngày nghỉ thì mình muốn cộng ngày giờ làm thêm theo màu được không nhỉ? ý là ngày lễ mình để màu đỏ, thứ 7, CN để màu xanh... và nó sẽ cộng theo ngày ra cho mình.
Màu nhập phải chuẩn
 
Màu mình nhập chuẩn rồi bạn. Nếu trong tháng có nhiều Ngày Nghỉ cuối tuần thì nó vẫn bị cộng dồn vào (nghĩa là lớn hơn 24giờ - số tối đa đc làm thêm trong 1 tháng)
Giớ hạn 24 giờ
Mã:
Function NgayNghi(MaNV$, Maso As Range, ChamCong As Range, Optional NghiLe& = 0) As Single
  Dim sRow&, sCol&, i&, j&, tmp&
  sRow = ChamCong.Rows.Count: sCol = ChamCong.Columns.Count
  For i = 1 To sRow
    If MaNV = Maso(i, 1).Value Then
      For j = 1 To sCol
        If ChamCong(i, j).Value <> Empty Then
          If NghiLe = 0 And ChamCong(i, j).Font.ColorIndex = 42 Then
            tmp = tmp + 1
          ElseIf NghiLe = 1 And ChamCong(i, j).Font.ColorIndex = 3 Then
            tmp = tmp + 1
          End If
        End If
      Next j
    End If
  Next i
  If tmp >= 3 Then NgayNghi = 24 Else NgayNghi = tmp * 8
End Function
 
Muốn giới hạn ở mức 24 giờ không cần sửa UDF, dùng hàm min:

=MIN(24, công thức cũ)
 
Giớ hạn 24 giờ
Mã:
Function NgayNghi(MaNV$, Maso As Range, ChamCong As Range, Optional NghiLe& = 0) As Single
  Dim sRow&, sCol&, i&, j&, tmp&
  sRow = ChamCong.Rows.Count: sCol = ChamCong.Columns.Count
  For i = 1 To sRow
    If MaNV = Maso(i, 1).Value Then
      For j = 1 To sCol
        If ChamCong(i, j).Value <> Empty Then
          If NghiLe = 0 And ChamCong(i, j).Font.ColorIndex = 42 Then
            tmp = tmp + 1
          ElseIf NghiLe = 1 And ChamCong(i, j).Font.ColorIndex = 3 Then
            tmp = tmp + 1
          End If
        End If
      Next j
    End If
  Next i
  If tmp >= 3 Then NgayNghi = 24 Else NgayNghi = tmp * 8
End Function
Cám ơn bạn đã hỗ trợ nhưng vấn đề là tổng của Ngày Lễ và ngày Nghỉ cuối tuần chỉ được 24 giờ thôi. Như yêu cầu bên dưới ấy bạn. Code hiện tại giới hạn cho chỉ ngày Lễ hoặc ngày Cuối Tuần là 24h tổng lại của 2 loại ngày nghỉ đó hơn 24h/tháng.
Tổng thời gian chấm công trong tháng của các ngày thứ bảy, chủ nhật và ngày lễ tối đa là 3 ngày tương đương 24 giờ (ưu tiên giờ chấm công cho ngày lễ, tết xong mới chuyển qua tính cho ngày thứ bảy, chủ nhật
 
Cám ơn bạn đã hỗ trợ nhưng vấn đề là tổng của Ngày Lễ và ngày Nghỉ cuối tuần chỉ được 24 giờ thôi. Như yêu cầu bên dưới ấy bạn. Code hiện tại giới hạn cho chỉ ngày Lễ hoặc ngày Cuối Tuần là 24h tổng lại của 2 loại ngày nghỉ đó hơn 24h/tháng.
Chỉnh tiếp
Mã:
Function NgayNghi(MaNV$, Maso As Range, ChamCong As Range, Optional NghiLe& = 0) As Single
  Dim sRow&, sCol&, i&, j&, Le&, CN&
  sRow = ChamCong.Rows.Count: sCol = ChamCong.Columns.Count
  For i = 1 To sRow
    If MaNV = Maso(i, 1).Value Then
      For j = 1 To sCol
        If ChamCong(i, j).Value <> Empty Then
          If ChamCong(i, j).Font.ColorIndex = 42 Then
            CN = CN + 1
          ElseIf ChamCong(i, j).Font.ColorIndex = 3 Then
            Le = Le + 1
          End If
        End If
      Next j
    End If
  Next i
 
  If Le >= 3 Then NgayNghi = 24 Else NgayNghi = Le * 8
  If NghiLe = 0 Then
    If CN * 8 >= 24 - NgayNghi Then
      NgayNghi = 24 - NgayNghi
    Else
      NgayNghi = CN * 8
    End If
  End If
End Function
 
Chỉnh tiếp
Mã:
Function NgayNghi(MaNV$, Maso As Range, ChamCong As Range, Optional NghiLe& = 0) As Single
  Dim sRow&, sCol&, i&, j&, Le&, CN&
  sRow = ChamCong.Rows.Count: sCol = ChamCong.Columns.Count
  For i = 1 To sRow
    If MaNV = Maso(i, 1).Value Then
      For j = 1 To sCol
        If ChamCong(i, j).Value <> Empty Then
          If ChamCong(i, j).Font.ColorIndex = 42 Then
            CN = CN + 1
          ElseIf ChamCong(i, j).Font.ColorIndex = 3 Then
            Le = Le + 1
          End If
        End If
      Next j
    End If
  Next i

  If Le >= 3 Then NgayNghi = 24 Else NgayNghi = Le * 8
  If NghiLe = 0 Then
    If CN * 8 >= 24 - NgayNghi Then
      NgayNghi = 24 - NgayNghi
    Else
      NgayNghi = CN * 8
    End If
  End If
End Function
Cám ơn bạn nhiều. Code chạy chuẩn rồi bạn. Chỉ có cái là khi mình đổi màu vào ô tương ứng để đánh dấu ngày nghỉ thì công thức nó không tự động tính toán lại số giờ, phải F2 tại ô đó hoặc kéo lại công thức thì mới tính toán lại. Trong thiết lập Formulas của Excel mình đã để Automatic rồi mà vẫn không hiệu quả.

Xin hỏi bạn @HieuCD là có cách nào để sau khi mình đổi màu đánh dấu ngày nghỉ thì công thức nó tự chạy mà không cần phải F2 hay kéo công thức cả cột để cập nhật lại số giờ.

Xin cám ơn bạn nhiều lắm
 
Cám ơn bạn nhiều. Code chạy chuẩn rồi bạn. Chỉ có cái là khi mình đổi màu vào ô tương ứng để đánh dấu ngày nghỉ thì công thức nó không tự động tính toán lại số giờ, phải F2 tại ô đó hoặc kéo lại công thức thì mới tính toán lại. Trong thiết lập Formulas của Excel mình đã để Automatic rồi mà vẫn không hiệu quả.

Xin hỏi bạn @HieuCD là có cách nào để sau khi mình đổi màu đánh dấu ngày nghỉ thì công thức nó tự chạy mà không cần phải F2 hay kéo công thức cả cột để cập nhật lại số giờ.

Xin cám ơn bạn nhiều lắm
Đổi màu Function không tự cập nhật được, bắt sự kiện mở sheet
Chép code dán vào sheet Tonghop
Mã:
Private Sub Worksheet_Activate()
  Sheet2.Calculate
End Sub
 
Mình còn thêm 1 sheet để hoàn thành công việc mong bạn @HieuCD xem và hỗ trợ dùm mình cho xong luôn ah.
Yêu cầu chi tiết mình có đính kèm theo file Excel. (chủ yếu lấy ngày được đánh dấu chấm công để lên sheet Cham Cong)

Mình rất cám ơn bạn đã nhiệt tình giúp đỡ.
 

File đính kèm

Mình còn thêm 1 sheet để hoàn thành công việc mong bạn @HieuCD xem và hỗ trợ dùm mình cho xong luôn ah.
Yêu cầu chi tiết mình có đính kèm theo file Excel. (chủ yếu lấy ngày được đánh dấu chấm công để lên sheet Cham Cong)

Mình rất cám ơn bạn đã nhiệt tình giúp đỡ.
Không biết có giới hạn số giờ công không?
 

File đính kèm

Làm thêm 5 ngày vậy bỏ ngày nào không liệt kê? cho ví dụ nha
Cũng tối đa là 3 ngày ah bạn mỗi ngày 8 giờ, ưu tiên thì cũng ngày Lễ sau đó đến ngày Cuối tuần. Ngày lễ thì theo bảng ngày Nghỉ lễ trong năm.

Cám ơn bạn nhiều lắm
 
Cũng tối đa là 3 ngày ah bạn mỗi ngày 8 giờ, ưu tiên thì cũng ngày Lễ sau đó đến ngày Cuối tuần. Ngày lễ thì theo bảng ngày Nghỉ lễ trong năm.

Cám ơn bạn nhiều lắm
Ý mình là trình bày kết quả như thế nào?
Nhập tay kết quả
 

File đính kèm

Bài viết mới nhất

Back
Top Bottom