Function CountColor(CountRange As Range, Clor As String) As Single
Application.Volatile
tmp = 0
For Each Cll In CountRange
If UCase(Clor) = "RED" Then
If Cll.Font.ColorIndex = 3 Then
If Cll.Value = "+" Then tmp = tmp + 1
If Cll.Value = "-" Then tmp = tmp + 0.5
End If
Else
If Cll.Font.ColorIndex = -4105 Then
If Cll.Value = "+" Then tmp = tmp + 1
If Cll.Value = "-" Then tmp = tmp + 0.5
End If
End If
Next
CountColor = tmp
End Function
Việc viết 1 hàm đáp ứng nhu cầu của bạn thật chẳng có gì đáng nói (sư phụ PTM đã làm rồi), có điều xin góp ý về phần quy định:Mình gặp phải vài khó khăn khi tính bảng lương, rất mong các bạn giúp!
Mình nghĩ chắc phải viết một Add-In mới được. Các bạn xem file đính kèm nhé!
Tức màu đỏ là ĐÊM
+ Một công làm ca đêm
- Nửa công làm ca đêm
+ Một công làm ca ngày
- Nửa công làm ca ngày
D Một công làm ca đêm
d Nửa công làm ca đêm
N Một công làm ca ngày
n Nửa công làm ca ngày
Nếu thay đổi được ký tự như bạn nói thì dễ quá, tôi thay đổi tuốt rồi dùng countif đếm quá dễ, cái này đăng ký rồi không thay đổi được. Thanks bạn góp ý!Việc viết 1 hàm đáp ứng nhu cầu của bạn thật chẳng có gì đáng nói (sư phụ PTM đã làm rồi), có điều xin góp ý về phần quy định:
Tức màu đỏ là ĐÊM
Theo tôi bạn nên thay đổi mấy quy định này, đừng lấy màu sắc làm quy định ---> Thiếu chi cách có thể suy nghĩ đến, ví dụ:
Sở dĩ tôi phải nói thế là vì bạn nên biết rằng: EXCEL KHÔNG XEM VIỆC THAY ĐỔI MÀU SẮC, FONT CHỮ, SIZE CHỮ... LÀ NHỮNG SỰ KIỆN CHANGE ----> Vì thế dù bạn có đổi màu thì hàm cũng chẳng TỰ ĐỘNG CẬP NHẬT đâuNếu thay đổi được ký tự như bạn nói thì dễ quá, tôi thay đổi tuốt rồi dùng countif đếm quá dễ, cái này đăng ký rồi không thay đổi được. Thanks bạn góp ý!
Vậy còn dễ hơn.Có thể viết thành một hàm bao quát hơn không bạn, ví dụ sẽ lấy màu sắc và ký tự từ một ô mẫu, ...
Function CountColor(CountRange As Range, ColorCell As Range) As Single
Application.Volatile
If ColorCell.Count > 1 Then CountColor = [NA()]: Exit Function
tmp = 0
For Each Cll In CountRange
If Cll.Font.ColorIndex = ColorCell.Font.ColorIndex Then
If Cll.Value = "+" Then tmp = tmp + 1
If Cll.Value = "-" Then tmp = tmp + 0.5
End If
Next
CountColor = tmp
End Function
Sao lại phải đăng ký quy ước chấm công nhỉ? Với lại, sao lại chọn cách chấm công màu từ đầu nhỉ? Với lại, chấm công màu chả lẽ khi in ra cũng in màu? Với lại, ...cái này đăng ký rồi không thay đổi được
Cụ thể là không đúng chổ nào (phải nói mới biết chứ)Mình không rõ lắm, mình không làm về kế toán, cái này chị kế toán nhờ nên tìm hiểu, khó khăn quá mới mang lên nhờ mọi người giúp. Mà bạn thử lại lệnh đi, mình cũng thử rồi nhưng đếm không đúng!
Cụ thể là không đúng chổ nào (phải nói mới biết chứ)
Lưu ý rằng cell AH3 và AJ3, trước dấu + có 1 khoảng trắng đó nha ---> Dữ liệu nhập sai, nó đếm ra sai là lỗi của bạn chứ không phải lỗi do code!
Bạn chọn cell AJ4, tô màu font thành Automatic rồi bấm F9 xem thử nhéMình đã xem lại, mình gõ dấu + và kiểm tra không thấy khoảng trắng, kết quả không có gì thay đổi cả. Nhưng mình nhập bằng cách copy dữ liệu từ các ô phía trước vào thì nó đếm đúng. Ban xem file mình gửi kem nên nhe: AL3 thì đúng mà AL4 thì chưa đúng, nếu bạn copy bằng cách kéo từ ô khác vào AJ4 thì kết quả lại đúng. Mình kiểm tra không thấy dấu cách trống trong ô trên mà. Ban xem giúp mình vì dùng để tính lương thật, nếu nhầm lẫn thì rất nguy hiểm!
Em còn phát hiện ra cái này mới thật tức cườiMàu font của ô AJ4 không giống màu các ô khác.
Nguy hiểm vô cùng! Lẩm cẩm hay quên như tôi sẽ báo cáo sai và bị đuổi việc mất.
Co cách nào tự động bỏ ký tự trắng trước hoặc sau ký tự "+", "-" để đếm cho chính xác không bạn?Em còn phát hiện ra cái này mới thật tức cười
- Cell AL3 đang có kết quả = 18.5
- Bôi đen công thức trên thành Formula rồi bấm F9, ta thấy kết quả = 22
Là sao ta?
Co cách nào tự động bỏ ký tự trắng trước hoặc sau ký tự "+", "-" để đếm cho chính xác không bạn?
If Cll.Font.ColorIndex = ColorCell.Font.ColorIndex Then
If Trim(Cll.Value) = "+" Then tmp = tmp + 1
If Trim(Cll.Value) = "-" Then tmp = tmp + 0.5
End If
Vậy là tạm ổn, cảm ơn bạn nhiều!Rất đơn giản: Dùng hàm Trim. Cụ thể là cho Trim vào các dòng sau:
PHP:If Cll.Font.ColorIndex = ColorCell.Font.ColorIndex Then If Trim(Cll.Value) = "+" Then tmp = tmp + 1 If Trim(Cll.Value) = "-" Then tmp = tmp + 0.5 End If