1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Tạo hàm chấm công docx

12 368 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tài liệu Tạo hàm chấm công docx
Định dạng
Số trang 12
Dung lượng 296,97 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Sau đó sẽ sử dụng một số hàm trong Excel để tính số ngày công trong một tháng của nhân viên.. Tôi nghĩ rằng thông thường số ngày làm việc sẽ nhiều hơn số ngày nghĩ, nếu chấm công như trê

Trang 1

Tạo hàm chấm công

Ở một số công ty, nhà máy nhỏ việc chấm công thông thường được thực hiện trên Excel Qua trao đổi tôi thấy rằng đa số khi nhân viên có đi làm thì sẽ được chấm

là X , nghĩ phép là P , vv Sau đó sẽ sử dụng một số hàm trong Excel để tính số ngày công trong một tháng của nhân viên Tôi nghĩ rằng thông thường số ngày làm việc sẽ nhiều hơn số ngày nghĩ, nếu chấm công như trên nghĩa là bạn phải nhập vào bảng tính Excel nhiều hơn nếu bạn chỉ nhập vào những ngày nghĩ của nhân viên

ấy Giả sử rằng tro

Hoặc có những ngày thì tính công nhật (công thời gian), có những ngày tính theo năng suất thì bạn phải làm như thế nào Tôi nghĩ ở một số công ty việc chấm công sẽ rắc rối hơn như trên vì hiện nay ở một số công ty có cả công nhân thời vụ và công nhân chính thức, !

Vâng, vấn đề chắc chắn là rắc rối Ở đây tôi không có tham vọng giải quyết tất cả các vấn đề trên Tôi chỉ muốn đưa ra hàm chấm công để cho công việc chấm công dễ dàng hơn

Cấu trúc của hàm chấm công như sau:

Public Function Chamcong(ByVal Khoang As Range, ByVal Chucnang As String) As Single

_ Khoang: là khoảng (Thông thường là một hàng từ cột đến cột ) tương ứng với hàng hay

khoảng mà bạn chấm công cho một nhân viên

_ Chucnang: là chuổi hay ký tự đại diện cho một chức năng chấm công của bạn

Giả sử ở đây tôi quy định:

ü Nghĩ phép là: A

ü Nghĩ bệnh là: S

ü Nghĩ ma chay là: C

ü Nghĩ không lương là: U

ü Tăng ca ngày thường (tính nhân cho 1.5) là: N

Trang 2

ü Tăng ca ngày nghĩ (tính nhân cho 2) là: D

Vậy nếu trong một ngày nhân viên đó nghĩ phép ½ ngày, tăng ca (ngày thường) 3 tiếng thì tôi sẽ chấm như sau: (Giả sử tên nhân viên là Triệu Nhất Đông, ngày áp dụng là 27/02/2002)

Ở đây việc chấm công cho nghĩ phép và tăng ca sẽ được cách nhau bởi “ ; “ (dấu chấm phẩy,

nếu bạn muốn bạn cũng có thể thay đổi ký tự trên khi bạn khai báo để xử lý trong hàm chấm công)

Trong hàm chấm công của tôi, tôi có sử dụng một Class tên clsString của Thấy Lê Đức Hồng

(HTTP: www.vovisoft.com) Bạn chỉ việc copy đoạn mã sau và đưa vào class module trong cửa

sổ VBE của bạn

Trang 3

'Author: Le Duc Hong http://www.vovisoft.com

Option Explicit

Private SText As String

Private SDelimiter As String

Private IPos As Integer

Private ILen As Integer

Public MaxToken As Integer

Private Tokens() As String

Public Property Get Text() As Variant

Text = SText

Trang 4

End Property

Public Property Let Text(ByVal vNewValue As Variant)

SText = vNewValue

ILen = Len(SText): IPos = 1

End Property

Public Property Get Delimiter() As Variant

Delimiter = SDelimiter

End Property

Public Function TokenAt(TNum) As String

If (TNum > 0) And (TNum <= MaxToken) Then

TokenAt = Tokens(TNum)

Else

TokenAt = ""

End If

End Function

Public Property Let Delimiter(ByVal vNewValue As Variant)

SDelimiter = vNewValue

Tokenise

End Property

Private Sub Tokenise()

Dim i

i = 0: IPos = 1

Trang 5

Do Until IPos > ILen

i = i + 1

ReDim Preserve Tokens(i)

Tokens(i) = GetToken

Loop

MaxToken = i

IPos = 1

End Sub

Public Sub ReplaceToken(TNum, NewToken)

If (TNum > 0) And (TNum <= MaxToken) Then Tokens(TNum) = NewToken

ReconstructText

End If

End Sub

Private Sub ReconstructText()

Dim i

SText = ""

For i = 1 To MaxToken

SText = SText & Tokens(i)

If i < MaxToken Then SText = SText & SDelimiter Next

End Sub

Trang 6

Public Function KeepLeftPart(NumChar) As String

If ILen >= NumChar Then

SText = Left(SText, NumChar): ILen = Len(SText)

End If

KeepLeftPart = SText

End Function

Public Function KeepRightPart(NumChar) As String

If ILen >= NumChar Then

SText = Right(SText, NumChar): ILen = Len(SText)

End If

KeepRightPart = SText

End Function

Public Function KeepMidPart(SPos, NumChar) As String

If ILen >= SPos Then

SText = Mid(SText, SPos): ILen = Len(SText)

End If

If ILen >= NumChar Then

SText = Right(SText, NumChar)

End If

KeepMidPart = SText

End Function

Public Property Get CurrentPos() As Variant

Trang 7

CurrentPos = IPos

End Property

Public Property Let CurrentPos(ByVal vNewValue As Variant)

IPos = vNewValue

End Property

Public Function GetToken() As String

Dim Pos

GetToken = ""

If SDelimiter = " " Then

Do While Mid(SText, IPos, 1) = " "

IPos = IPos + 1

If IPos > ILen Then

Exit Function

End If

Loop

End If

Pos = InStr(IPos, SText, SDelimiter)

If Pos > 0 Then

GetToken = Mid(SText, IPos, Pos - IPos)

IPos = Pos + Len(SDelimiter)

Else

GetToken = Mid(SText, IPos, ILen - IPos + 1)

Trang 8

IPos = ILen + 1

End If

End Function

Public Sub Substitude(Param, ParamValue)

Dim Pos, PLen

PLen = Len(Param)

Pos = InStr(SText, Param)

Do While Pos > 0

SText = Left(SText, Pos - 1) & ParamValue & Mid(SText, Pos + PLen) Pos = InStr(SText, Param)

Loop

ILen = Len(SText)

End Sub

Public Function GetLastToken() As String

Dim Pos, Tlen

Tlen = Len(SDelimiter)

GetLastToken = ""

If ILen = 0 Then

Exit Function

End If

Pos = ILen - Tlen + 1

Do While Pos > 0

Trang 9

If Mid(SText, Pos, Tlen) = SDelimiter Then

GetLastToken = Mid(SText, Pos + Tlen)

End If

Pos = Pos - 1

Loop

End Function

Public Property Get Length() As Integer

Length = ILen

End Property

Public Property Get TokenCount() As Variant

TokenCount = MaxToken

End Property

Sau đó bạn bạn copy đoạn mã hàm chấm công sau vào trong module của bạn

Public Function Chamcong(ByVal Khoang As Range, ByVal Chucnang As String) As Single

Dim Socot As Integer, Sohang As Integer

Dim i As Integer, j As Integer, k As Integer

Dim Btotal As Single

Dim Bgiatriso As Single

Dim Bchucnang As String

Dim SoLoai As Byte ' Bien nay nham xac dinh so loai ngay nghi, tang ca trong mot

chuoi

Dim BChuoi As clsString

Trang 10

Dim BGiatri

On error resume next

'Xac dinh so cot trong bien Khoang

Socot = Khoang.Columns.Count

'Xac dinh so hang trong bien Khoang

Sohang = Khoang.Rows.Count

' Nham bao dam so sanh dung ta dung ham UCase Chucnang = UCase(Chucnang)

'Duyet qua cac cell trong bien Khoang

For i = 1 To Sohang

For j = 1 To Socot

BGiatri = Khoang.Cells(i, j).Value

BGiatri = Trim(BGiatri)

' Bat dau xu ly bgiatri qua Class clsString

Set BChuoi = New clsString

BChuoi.Text = BGiatri

'Ky tu de phan cach cac Chuc nang

BChuoi.Delimiter = ";"

'Xac dinh so Chuc nang trong 1 cell

SoLoai = BChuoi.TokenCount

For k = 1 To SoLoai

'Chuoi cua tung chuc nang

BGiatri = BChuoi.TokenAt(k)

Trang 11

Bchucnang = UCase(Left(BGiatri, Len(Chucnang)))

Bgiatriso = Val(Right(BGiatri, Len(BGiatri) - len(Chucnang)))

Select Case Bchucnang

Case Chucnang

Btotal = Btotal + Bgiatriso

End Select

Next k

Next j

Next i

Chamcong = Btotal

End Function

Với hàm chấm công như trên, bạn có thể dùng các chuổi ký tự dài hơn để thể hiện chức năng mà

bạn cần (Ví dụ như: nghiphep, nghibenh, tangca, vv), hay trong công thức bạn có thể tham

chiếu đến một cell nào đó để đại diện cho chức năng bạn muốn

Trong ví dụ này, ngày 22/02 tôi chấm công nghiphep1, ngày 23/02 tôi chấm công

nghiphep0.5;tangca3 Công thức trong ô AM8, tôi sẽ nhập vào

=chamcong(G8:AH8,AM7) (ô AM7 chứa chữ Nghiphep)

Công thức trong ô AN8, tôi nhập công thức sau:

=chamcong(G8:AH8,AN7) (ô AN7 chứa chữ Tangca)

Vâng, dĩ nhiên là bạn có thể sử dụng các chuổi ký tự như trên sẽ dễ hiểu, nhưng bảng chấm công của bạn sẽ rất lượm thuộm

Hình vẽ sau minh họa ví dụ trên của tôi

Trang 12

Tôi hy vọng rằng bài viết trên sẽ giúp ích các bạn phần nào trong công việc chấm công nhàm chán (nhưng không được sai) hàng ngày của bạn

 

Ngày đăng: 25/01/2014, 13:20

HÌNH ẢNH LIÊN QUAN

Hình vẽ sau minh họa ví dụ trên của tôi. - Tài liệu Tạo hàm chấm công docx
Hình v ẽ sau minh họa ví dụ trên của tôi (Trang 11)

TỪ KHÓA LIÊN QUAN

w