Giúp tính số giờ, phút khi biết thời gian bắt đầu và kết thúc

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

sieuviet02

Thành viên mới
Tham gia
9/12/20
Bài viết
2
Được thích
3
Em chào các bác ạ,

Em có bảng excel cần xử lý tuy nhiên đang bị vướng nhờ các bác cứu giúp em với. Chả là em cần:
Tính số giờ, số phút không bao gồm thời gian chiều thứ 7, ngày chủ nhật, ngày lễ, giờ nghỉ trưa, thời gian qua đêm (sau 17h30 hôm trước tới trước 8h00 ngày hôm sau) theo file dưới ạ
1696835879708.png
Các cứu em với. Em cám ơn các bác nhiều nhiều.
 

File đính kèm

  • Tính số giờ, số phút.xlsx
    11.1 KB · Đọc: 7
Bài toán có vẻ không thưc tế ...
Ngày Chủ Nhật , nghỉ lễ không tính thì quét vân tay hay bấm thẻ làm gì ?
Đã không đi làm thì làm gì có trong máy chấm công...

Chưa hiểu hết ý chủ thớt...
Thử làm bằng Query ... chưa trừ giờ nghỉ trưa
Chờ cấu trúc file thực tế ...
 

File đính kèm

  • Tính số giờ, số phút 222.xlsx
    20.7 KB · Đọc: 8
Lần chỉnh sửa cuối:
Bài toán có vẻ không thưc tế ...
Ngày Chủ Nhật , nghỉ lễ không tính thì quét vân tay hay bấm thẻ làm gì ?
Đã không đi làm thì làm gì có trong máy chấm công...
...
Chờ cấu trúc file thực tế ...
Hình như người ta dùng kiểu cứ vào thì quét, cứ ra thì quét. Những chỗ cần loại ra là do máy quét cứ đến giờ đó nó tự động "quét nhưng không ghi".
Ví dụ bạn vào ngày thứ bảy lúc 10 giờ, máy quét ghi. Bạn ra lúc 14 giờ, có quét nhưng máy quét không ghi. Thứ hai bạn vào lúc 7 giờ, máy không ghi, chiều bạn ra lúc 18 giờ, máy ghi. Thế là bạn được tính giờ từ 10 giờ sáng thứ bảy đến 18 giờ chều thứ hai, trừ đi chiều thứ bảy và cả ngày chủ nhật, trừ giờ ăn trưa ngày thứ hai và thứ bảy. Giờ thì tính như vậy, có đúng luật lao động hay không là chuyện họ phi bòng với công đoàn. Trước mắt là thực tế quá sức.
 
Nếu bạn làm trong nhân sự thì sẽ thấy, đều có thể xảy ra hết.
Vd: qui định bắt buộc ra vô đều phải bấm vân tay ( vân tay mở cửa phòng làm việc), còn việc có tính công hay không là chuyện khác. Ngày nghỉ, lễ có việc chạy vô văn phòng mở máy, lấy tài liệu v.v.. phải ghi lại thông tin ai vào ra, không cần biết có chấm công hay không...
Và nói chung vụ chấm công này chắc chắn sẽ có sự can thiệp thủ công vào dữ liệu để nó chuẩn cho việc tính toán chứ không thể dựa không vào code, công thức tính mà chính xác được. Code có thể hỗ trợ tìm ra những ngày có sự không đúng về dữ liệu và nhân sự sẽ gửi thông tin không đúng đó cho nhân viên để xác nhận lại trước khi tính công.
 
Lần chỉnh sửa cuối:
-- Nhầm đối tượng -- xin lỗi.
 
Lần chỉnh sửa cuối:
Em chào các bác ạ,

Em có bảng excel cần xử lý tuy nhiên đang bị vướng nhờ các bác cứu giúp em với. Chả là em cần:
Tính số giờ, số phút không bao gồm thời gian chiều thứ 7, ngày chủ nhật, ngày lễ, giờ nghỉ trưa, thời gian qua đêm (sau 17h30 hôm trước tới trước 8h00 ngày hôm sau) theo file dưới ạ
View attachment 295540
Các cứu em với. Em cám ơn các bác nhiều nhiều.
Dùng hàm tự tạo bằng VBA
Mã:
Function ThoiGianLV(ByVal fTime#, ByVal eTime#, ByVal inAM#, ByVal outAM#, ByVal inPM#, ByVal outPM#, ByVal holiDay As Range, Optional h$ = "g")
  Dim fDay&, i, hol$, t#, tmp#
 
  If fTime = 0 Or eTime = 0 Then
    ThoiGianLV = ""
    Exit Function
  End If
 
  For Each i In holiDay
    hol = hol & "," & CLng(i)
  Next i
  hol = hol & ","
 
  t = fTime
  Do While t <= eTime
    fDay = Int(t)
    If InStr(1, hol, "," & fDay & ",") = 0  And Weekday(fDay) <> 1 Then
      If t <= fDay + outAM Then
        If t < fDay + inAM Then t = fDay + inAM
        If eTime >= fDay + outAM Then
          tmp = tmp + fDay + outAM - t
        Else
          If eTime > t Then tmp = tmp + eTime - t
          Exit Do
        End If
        t = fDay + inPM
      Else
        If t <= fDay + outPM Then
          If Weekday(fDay) <> 7 Then
            If t < fDay + inPM Then t = fDay + inPM
            If eTime >= fDay + outPM Then
              tmp = tmp + fDay + outPM - t
            Else
              If eTime > t Then tmp = tmp + eTime - t
              Exit Do
            End If
           End If
        End If
        t = fDay + 1 + inAM
      End If
    Else
      t = fDay + 1 + inAM
    End If
  Loop
  tmp = tmp * 24
  ThoiGianLV = Int(tmp)
  If UCase(h) <> "G" Then ThoiGianLV = Round((tmp - ThoiGianLV) * 60, 0)
End Function
Xem cách dùng trong file
 

File đính kèm

  • Tính số giờ, số phút.xlsb
    18.3 KB · Đọc: 20
Lần chỉnh sửa cuối:
Dùng hàm tự tạo bằng VBA
Mã:
Function ThoiGianLV(ByVal fTime#, ByVal eTime#, ByVal inAM#, ByVal outAM#, ByVal inPM#, ByVal outPM#, ByVal holiDay As Range, Optional h$ = "g")
  Dim fDay&, i, hol$, t#, tmp#
 
  If fTime = 0 Or eTime = 0 Then
    ThoiGianLV = ""
    Exit Function
  End If
 
  For Each i In holiDay
    hol = hol & "," & CLng(i)
  Next i
  hol = hol & ","
 
  t = fTime
  Do While t <= eTime
    fDay = Int(t)
    If InStr(1, hol, "," & fDay & ",") = 0  And Weekday(fDay) <> 1 Then
      If t <= fDay + outAM Then
        If t < fDay + inAM Then t = fDay + inAM
        If eTime >= fDay + outAM Then
          tmp = tmp + fDay + outAM - t
        Else
          If eTime > t Then tmp = tmp + eTime - t
          Exit Do
        End If
        t = fDay + inPM
      Else
        If t <= fDay + outPM Then
          If Weekday(fDay) <> 7 Then
            If t < fDay + inPM Then t = fDay + inPM
            If eTime >= fDay + outPM Then
              tmp = tmp + fDay + outPM - t
            Else
              If eTime > t Then tmp = tmp + eTime - t
              Exit Do
            End If
           End If
        End If
        t = fDay + 1 + inAM
      End If
    Else
      t = fDay + 1 + inAM
    End If
  Loop
  tmp = tmp * 24
  ThoiGianLV = Int(tmp)
  If UCase(h) <> "G" Then ThoiGianLV = Round((tmp - ThoiGianLV) * 60, 0)
End Function
Xem cách dùng trong file
Bác Hiếu ơi kết quả bác gửi em thấy đúng kết quả e cần lắm bác ạ. Em cám ơn bác nhiều nhiều lắm ạ. Không lệch tẹo nào.
Nhưng mà cái VBA này em tệ nên em không biết viết sao để khi viết xong giải thích cho người khác hiểu cái mình làm bác ạ :(
Có cách dùng hàm công thức nào để lấy ra được không bác nhỉ
Bài đã được tự động gộp:

Bài toán có vẻ không thưc tế ...
Ngày Chủ Nhật , nghỉ lễ không tính thì quét vân tay hay bấm thẻ làm gì ?
Đã không đi làm thì làm gì có trong máy chấm công...

Chưa hiểu hết ý chủ thớt...
Thử làm bằng Query ... chưa trừ giờ nghỉ trưa
Chờ cấu trúc file thực tế ...
Dữ liệu này không phải dữ liệu chấm chấm công đâu Bác và nó cũng là dữ liệu thực tế của bên em đó Bác. Tuy nhiên nếu là giữ liệu chấm công và nếu ngày đi làm thêm OT cũng cần lấy phải tính nữa mà
Em đã làm theo hàm NETWORKDAYS.INTL nhưng vào ngày thứ 7 thì lại không chính xác được
 
Lần chỉnh sửa cuối:
... đã làm theo hàm NETWORKDAYS.INTL...

Mình chỉ biết mấy hàm cơ bản , nên không thể giúp bạn trường hợp này rồi...
Bạn chờ câc thành viên khác nha !
 
Bác Hiếu ơi kết quả bác gửi em thấy đúng kết quả e cần lắm bác ạ. Em cám ơn bác nhiều nhiều lắm ạ. Không lệch tẹo nào.
Nhưng mà cái VBA này em tệ nên em không biết viết sao để khi viết xong giải thích cho người khác hiểu cái mình làm bác ạ :(
Có cách dùng hàm công thức nào để lấy ra được không bác nhỉ
Bài đã được tự động gộp:


Dữ liệu này không phải dữ liệu chấm chấm công đâu Bác và nó cũng là dữ liệu thực tế của bên em đó Bác. Tuy nhiên nếu là giữ liệu chấm công và nếu ngày đi làm thêm OT cũng cần lấy phải tính nữa mà
Em đã làm theo hàm NETWORKDAYS.INTL nhưng vào ngày thứ 7 thì lại không chính xác được
Cách tính của bạn quá phức tạp dùng hàm bình thường rất khó, trên diễn đàn hình như chỉ có 2 người có khả năng làm được là @Phan Thế Hiệp@excel_lv1.5.
Nhờ các bạn dùng Excel365 xử lý, hy vọng thành công
 
Web KT
Back
Top Bottom