Hỏi về file tính tương (1 người xem)

Liên hệ QC

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

Chủ nhật anh chị em nào rảnh vào giúp em nhé. Làm công thức kiểu này cứ quay quay đến khổ :((
 
Nếu em có chỗ nào chưa nói rõ ràng thì anh chị góp ý cho em nhé :)
 
Mọi người ơi xem cho em với :((
 
Hôm nay là ngày cuối cùng để em gửi form cho kế toán rồi các anh chị xem giúp em với. Em xin chân thành cảm ơn!
 
Em mới phát hiện ra một sự cố đó là nếu Ca2 giả sử làm từ 14h và tăng ca đến 2h sáng thì công thức tính không còn đúng nữa. Mọi người xem giúp em nhé.
 
File đây bạn nhé (#01). Ngoài ra mình có nói thêm về cách tính giờ công giờ làm thêm. Mọi người xem có thể viết hàm kiểu khác nhẹ nhàng hơn không hoặc VBA được thì càng tốt
Hôm nay mới xem lại file mới của bạn & xin gốp vài í như sau:

(1) Với 4171 nhân viên để tính công (31 ngày/tháng) thì quên đi chuyện xài công thức là cái chắc!

(2) Dù có xài công thức hay VBA cho bằng í người thì ngay kí hiệu bạn xài để thể hiện ca kíp của nhân viên cũng đã chưa cẩn trọng:
Ca ngày: CAN
Ca đêm: CAD
Hanh chinh: CAH
K1: CA1
K2: CA2
K3: CA3
Bạn thấy trong mọi dòng đều có chữ 'A' không? Đó là thừa & chưa nghiêm túc suy xét công việc của mình!
Theo mình thì chỉ 2 kí tự cho mỗi dòng mà thôi; Như CN, CD, HC, C1, C2, C3
Chỉ mỗi động tác này, chúng ta đã tiết kiệm được 1/4 thời gian truy xuất ca cho bảng chấm công.

Nói thêm: Ta có thể chỉ xài 1 kí tự cho các loại ca này (bằng cách bỏ đi kí tự 'C'); Tuy nhiên không nên xài kí số (1, 2, 3) mà các ca C1, C2, C3 fải xài kí tự khác, như X, Y, Z, N, D, H

Với mình, thiết kế trang dữ liệu ban đầu là vô cùng quan trọng!
 
Vâng, cảm ơn những lời góp ý quý giá của anh. Điều đó giúp em hiểu được tầm quan trọng trong việc thiết kế trang dữ liệu từ những điều đơn giản nhất mà không phải nhiều bạn như em biết. Em sẽ thiết kế lại và úp lại file trong bài #1 vào lúc 9h sáng nay. Anh dậy sớm quá!

Chúc anh một ngày mới vui vẻ!
 
Lần chỉnh sửa cuối:
Chủ để này của em chắc chuyển sang mục VBA hợp lý hơn, cần thiết thì admin chuyển bài cho em nhé.
 
Vâng, cảm ơn những lời góp ý của anh.

Chúng ta thử bắt đầu với VBA nha:

Macro chỉ mới làm cho 2 cột dữ liệu [O:P]; Với máy cà tèng của mình cần 0.08"

Hi vọng giúp được bạn ít nhiều trong tham khảo
 

File đính kèm

Chúng ta thử bắt đầu với VBA nha:

Macro chỉ mới làm cho 2 cột dữ liệu [O:P]; Với máy cà tèng của mình cần 0.08"

Hi vọng giúp được bạn ít nhiều trong tham khảo


Anh ơi cột giờ đặc biệt em cho thêm vào vì nhiều trường hợp CNV phải đến sớm. Cho nên sẽ tính riêng ở cột này. Anh xem ở dòng 14 em bôi vàng anh nhé.

P/s: Mỗi lần được anh giúp sức em cảm thấy như được đặt chân vào vùng đất huyền bí, hồi hộp, tò mò và lôi cuốn.
 
Lần chỉnh sửa cuối:
(1) Còn đây là các câu lệnh tính toán cho cột [Q]
PHP:
    If dArr(J, 2) > dArr(J, 1) Then
        dArr(J, 3) = Format(GQC(Sht, False) - GQC(Sht), "hh:MM")
    Else
        dArr(J, 3) = Format(1 + GQC(Sht) - GQC(Sht, False), "hh:MM")
    End If
Chúng đứng sau câu này:
Mã:
dArr(J, 2) = Format(GQC(Sht, False), "hh:MM")

(Xài các câu này mất thêm 1/100 gy để có số liệu của 1 cột.)

(2) Lại nói về thiết kế trang tính:
Bạn xài 3 cột [R..T] cho số liệu ăn uống 1; Theo mình như thế là dư 2 cột & không tiết kiệm
Sao ta không xài mỗi cột [T] thôi; & lúc đó nhập trực tiếp là 1 cho những người có dùng bữa giữa ca?
Chuyện này sẽ làm CSDL của bạn sẽ khó gì không trong hoạt động?

(2.1) Cũng như vậy với 3 cột liền kề bên fải . . . .
 
(1) Còn đây là các câu lệnh tính toán cho cột [Q]
PHP:
    If dArr(J, 2) > dArr(J, 1) Then
        dArr(J, 3) = Format(GQC(Sht, False) - GQC(Sht), "hh:MM")
    Else
        dArr(J, 3) = Format(1 + GQC(Sht) - GQC(Sht, False), "hh:MM")
    End If
Chúng đứng sau câu này:
Mã:
dArr(J, 2) = Format(GQC(Sht, False), "hh:MM")

(Xài các câu này mất thêm 1/100 gy để có số liệu của 1 cột.)

(2) Lại nói về thiết kế trang tính:
Bạn xài 3 cột [R..T] cho số liệu ăn uống 1; Theo mình như thế là dư 2 cột & không tiết kiệm
Sao ta không xài mỗi cột [T] thôi; & lúc đó nhập trực tiếp là 1 cho những người có dùng bữa giữa ca?
Chuyện này sẽ làm CSDL của bạn sẽ khó gì không trong hoạt động?

(2.1) Cũng như vậy với 3 cột liền kề bên fải . . . .

Dạ vâng anh ơi bởi là vì các ông sếp em còn muốn theo dõi xem giờ ăn các bộ phận sẽ như thế nào, nó chẳng có một quy tắc gì và cái này bộ phận họ sẽ tự chấm theo ca của họ. Anh chịu khó xem cả công thức cho em nhé, cách trừ giờ ăn cũng có nguyên tắc. nói ra thì dài dòng nhưng nhìn vô công thức sẽ thấy ngay. À em thêm code ở trên của anh thì báo lỗi Run time erro 9 (Subscript out of range). Em để ý thấy hh:MM không có hai số 00. Em thử thêm vào cũng không chạy anh ạ.
 
Lần chỉnh sửa cuối:
Tối anh anh thức cùng em anh ChanhTQ@ nhé **~**
 
Thiết nghĩ, để tính thời gian làm thêm của 1 người làm bất cứ ca nào, thì ta chỉ căn cứ vô giờ vô & giờ ra khỏi CQ của người í so với thời gian qui định (vô & ra) là được.

CQ bạn còn trừ giờ cho những người có ăn trưa nữa sao?
Vậy CQ lại có những người không ăn trưa? Vậy họ ra ngoài CQ ăn hay sao?

Về vấn đề này mình xin lấy ví dụ cụ thể người đấu tiên trong danh sách (làm ca H), như sau

Thời gian vô: 7:45. So với qui định, người này vô sớm 12f
Thời gian ra 17:25: Người này về trễ 25f
Tựu chung người này làm thêm giờ ca ngày 37f (12 + 25); Fải vậy không?
 
Thiết nghĩ, để tính thời gian làm thêm của 1 người làm bất cứ ca nào, thì ta chỉ căn cứ vô giờ vô & giờ ra khỏi CQ của người í so với thời gian qui định (vô & ra) là được....

Anh ơi không phải đâu ạ. Em ví dụ như này: Ca hành chính đến 7h30 về 17:25: Nếu họ đến sớm không phải vì yêu cầu công việc thì kế toán họ chỉ chấm từ 8h đến 17h. Lúc này sẽ căn cứ vào ô cột giờ đặc biệt. Còn không thì mặc định như công thức của em về ca nào áp khung giờ ấy anh ạ. Công nhân nhiều người ở xa họ đi xe tự thuê nên có khi đến rất sớm (ví dụ ca 1 quy định 6h nhưng 5h30 một số người đã có mặt rồi anh ạ.

Em nói thêm là giờ về so với giờ quy định họ về nếu ở lại làm thêm thì dữ liệu quẹt thẻ ít nhất 30p mới được tính (ví dụ về là 17h nhưng ở lại 17h40 thì giờ được tính là 17h30. Qua mốc 30 này thì cứ 15 phút là được tính rồi ví dụ 17h46 được tính là 17h45, 17h55 cũng chỉ được tính là 17h45). Giả như họ về giờ nào tính giờ ây thì có phải nhàn hơn bao nhiêu.

Vì vậy giờ của dữ liệu không có cách nào chấm tự động. Nếu nó về trễ 30p mà bộ phận không chấm thì em cũng sẽ không chấm. Còn nếu được chấm thì bộ phận sẽ chấm vào cột giờ đặc biệt.
 
Lần chỉnh sửa cuối:
Không phải đâu ạ. Ví dụ: (Ca H) đến 7h30 về 17:25:
Nếu họ đến sớm không phải vì yêu cầu công việc thì kế toán họ chỉ chấm từ 8h đến 17h. Lúc này sẽ căn cứ vào ô cột giờ đặc biệt. Còn không thì mặc định như công thức của em về ca nào áp khung giờ ấy anh ạ.
CN có người ở xa nên có khi đến sớm.
Vì vậy giờ của dữ liệu không có cách nào chấm tự động.

Nếu nó về trễ 30p mà bộ phận không chấm thì em cũng sẽ không chấm. Còn nếu được chấm thì bộ phận sẽ chấm vào cột giờ đặc biệt.
Vậy thì 2 cột số liệu của [Giờ của dữ liệu QT] là để ngó chơi à?
Mà để ngó chơi thì cần chi fải có 2 cột đó trong CSDL kia chứ?

Em nói thêm là giờ về so với giờ quy định họ về nếu ở lại làm thêm thì dữ liệu quẹt thẻ ít nhất 30p mới được tính (ví dụ về là 17h nhưng ở lại 17h40 thì giờ được tính là 17h30. Qua mốc 30 này thì cứ 15 phút là được tính rồi ví dụ 17h46 được tính là 17h45, 17h55 cũng chỉ được tính là 17h45). Giả như họ về giờ nào tính giờ ây thì có phải nhàn hơn bao nhiêu.
Cái này VBA có thể làm được rạch ròi cho bạn; nhưng lí ra bạn fải trình bày trước các mục trong qui chế chấm công này của đơn vị bạn mới fải!

Hiện cách làm của đơn vị bạn có thể sẽ bị ai đó lợi dụng làm sai lệch con số của công nhân nào đó do chủ quan & cảm tình.
 
Vậy thì 2 cột số liệu của [Giờ của dữ liệu QT] là để ngó chơi à?
Mà để ngó chơi thì cần chi fải có 2 cột đó trong CSDL kia chứ?


Cái này VBA có thể làm được rạch ròi cho bạn; nhưng lí ra bạn fải trình bày trước các mục trong qui chế chấm công này của đơn vị bạn mới fải!

Hiện cách làm của đơn vị bạn có thể sẽ bị ai đó lợi dụng làm sai lệch con số của công nhân nào đó do chủ quan & cảm tình.


Sau khi có dữ liệu chấm giờ em sẽ đối chiếu bằng cách trừ giờ bộ phận chấm với giờ dữ liệu quẹt thẻ xem có chênh nhiều không. Nếu một vài phút thì em bỏ qua nếu 5p trở lên thì em phản ánh bộ phận. Có trường hợp còn không có dữ liệu quẹt thẻ lúc ấy bộ phận họ có chấm vào ô đặc biệt thì cột ghi chú họ sẽ phải ghi vào (Ví dụ theo dữ liệu giấy xác nhận giờ làm).

Trường hợp như anh nói ở trên về chủ quan cảm tính: Nếu dữ liệu lệch quá nhiều em sẽ phải hỏi bộ phận (Ví dụ tại sao họ về 17h30 mà anh chỉ chấm cho họ 17h... Em biết có quá nhiều kẽ hở, nên làm nó nhanh khâu nào thì hay khâu ấy. Còn thì giờ ra vào được chấm cũng phụ thuộc nhiều vào bộ phận (Qua giấy xác nhận và cái này em phải check thủ công anh ạ).

Kiểu gì thì kiểu dữ liệu chấm công không thể căn cứ hết vào dữ liệu quẹt thẻ cho nên bỏ qua cái đó anh hoàn thiện giúp em code quy ra công, giờ làm thêm anh nhé.


Vấn đề của anh nêu cho em có dịp em sẽ nêu ý kiến với trưởng phòng bên em, cảm ơn anh nhé!
 
Lần chỉnh sửa cuối:
Có nghĩa là giờ sẽ fải bắt đầu với cột nào đây? Chắc là cột [X], fải không?

Anh để ý công thức cột
O: =+IF(L9<>"",L9,INDEX({0.25;0.5834;0.91667;0.3334;0.3334;0.8334},MATCH(F9,{"X";"Y";"Z";"H";"N";"D"},0)))
và P: =+IF(M9<>"",M9,INDEX({0.5834;0.91667;0.25;0.7084;0.8334;0.3334},MATCH(F9,{"X";"Y";"Z";"H";"N";"D"},0))) (File em gửi chỗ số đỏ là em nhầm 0.7084, đúng của nó là 0.8334)

Như vậy giờ sẽ tính theo cột O và P anh nhé. Tất cả dữ liệu sau cột O và P đều dựa theo hai cột này để tính anh ạ.
 
Như vậy giờ sẽ tính theo cột O và P anh nhé. Tất cả dữ liệu sau cột O và P đều dựa theo hai cột này để tính anh ạ.

Hai cột này mình tính từ lâu cho bạn rồi mà!
Sau đó còn tính thêm cho cột [Q] nữa

Bạn xem trong file mình đưa lên tại ô [o4] sẽ có số gy mà macro cần tiêu tốn để hoàn tất việc tính toán nữa kia!

Xem file này & so sánh với trang 'Luu' đi nha.
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom