Tìm kiếm  
 
MIS Ứng dụng CSDL Ứng dụng CMS Thương mại điện tử Tính toán kinh tế
Bạn đang ở :  Trang chủ » Kiến thức KD » Ứng dụng CNTT » Ứng dụng CSDL

Tin Tức Kinh Tế - Tài Chính

Saga-Việc Làm

THẾ GIỚI KINH DOANH

CUỘC SỐNG

THUẬT NGỮ

 

SỰ KIỆN - CHUYÊN ĐỀ

BÀI HAY

Ba phần mềm free tuyệt hảo
Tư duy tài chính gia đình
10 lời khuyên hữu ích khi chuyển sang Linux
Gửi file cực nhanh vào Gmail
Bảo vệ CSDL Access trong các ứng dụng web
7 công cụ giúp quản lý tốt hơn các mạng xã hội
Tạo hàm chấm công bằng Excel
Phần mềm Quản Lý Sổ Sách hay mong chia sẻ cho nhiều người!
Bộ phần mềm miễn phí không thể thiếu
Phần mềm nguồn mở
... Xem toàn bộ

BÀI BÌNH CHỌN

  Tạo hàm chấm công bằng Excel  
  Tư duy tài chính gia đình  
  Ba phần mềm free tuyệt hảo  
  Gửi file cực nhanh vào Gmail  
  Bộ phần mềm miễn phí không thể thiếu  
  7 công cụ giúp quản lý tốt hơn các mạng xã hội  
  Phần mềm Quản Lý Sổ Sách hay mong chia sẻ cho nhiều người!  
  Dữ liệu trên mạng của bạn có thật sự an toàn và bảo mật ?  
  Tường lửa - Tất cả trong một  
  Hỗ trợ resume khi Download  
... Xem tất cả
 
ĐĂNG NHẬP
  Tên truy cập:
  Mật khẩu:

Quên mật khẩu

Tại sao Saga?

1 Bài viết vàng / 17 Bài viết bạc

  Liên hệ nóng:
YM: sagarina 
sagavietnam 
     Email: info@saga.vn

 

Người gửi: doluongtruong  --   12/09/2007 04:17 PM    

Tạo hàm chấm công bằng Excel

( Bình chọn: 23   --  Thảo luận: 14 --  Số lần đọc: 14837)

Ở các công ty, doanh nghiệp vừa và nhỏ việc chấm công thông thường được thực hiện trên Excel. Qua tìm hiểu tôi thấy rằng đa số dùng phương pháp chấm công như sau: có đi làm thì sẽ được chấm là X, nghỉ phép là P..., sau đó 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. Thường số ngày làm việc luôn nhiều hơn số ngày nghỉ, nếu chấm công như trên thì bạn phải nhập vào bảng tính Excel nhiều hơn so với chỉ nhập vào những ngày nghỉ của nhân viên. Ngoài ra còn có những trường hợp đặc biệt như nghỉ phép ½ ngày, tăng ca... hoặc tính công nhật (ở một số công ty có cả công nhân thời vụ và công nhân chính thức), tính theo năng suất...
Vâng, vấn đề thật 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 mà chỉ muốn giới thiệu một hàm chấm công có thể giúp cho công việc này 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:
12A_UD_Tao-ham-bang-Excel-0.gif• 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 hệ số nhân 1,5) là: N • Tăng ca ngày nghỉ (tính hệ số nhân 2) là: D
Vậy nếu trong ngày một nhân viên nghỉ phép ½ ngày, tăng ca (ngày thường) 3 tiếng thì chuỗi chấm công như sau: “A0.5;N3”. Ở đây dùng dấu chấm phẩy (“;”) để phân cách, nếu muốn bạn cũng có thể thay đổi thứ tự trên.
Trong hàm chấm công, tôi có sử dụng Class “clsString” của tác giả Lê Đức Hồng. Trong cửa sổ Visual Basic Editor, bạn chọn Insert->Class Module, nhập vào class “clsString” như sau:
 
‘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
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
   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
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
   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)
      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
      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 “Insert” module và nhập đoạn mã hàm chấm công sau vào.
 
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
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)
            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 chấm công (ví dụ như: “nghiphep”, “nghibenh”, “tangca” ...), 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 chấm công.

Ví dụ: ngày 22/02 tôi chấm công “nghiphep1”, ngày 23/02 tôi chấm công “nghiphep0.5;tangca3”. 12A_UD_Tao-ham-bang-Excel1.gifTrong ô AM8, tôi sẽ nhập vào công thức:
 
=chamcong(G8:AH8,$AM$7)  (ô AM7 chứa chữ “nghiphep”)
 
Trong ô AN8, tôi nhập công thức sau:
 
=chamcong(G8:AH8,$AN$7)  (ô AN7 chứa chữ “tangca”)
 

Dĩ nhiên sử dụng các chuỗi ký tự như trên thì dễ hiểu, nhưng bảng chấm công sẽ rất lượm thuộm.  Bảng tính minh họa cho ví dụ trên. Hy vọng rằng bài viết trên 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!

Đỗ Lương Trường

 
Bookmark and Share
  File gắn kèm:
 
  File download:
 
Điểm trung bình:           Tổng điểm: 99/ 23 lượt bình chọn
Bình chọn:
 

+ Thêm vào Bài viết ưa thích +   

+ Xóa bỏ việc nhận tin nhắn thông báo khi có thảo luận mới cho bài viết này +   
 
Bổ sung nội dung cho bài viết và tranh luận( 8)
  chimse140 (25/07/2012 11:49 PM) Có ích: 0/0    
 
© SAGA - Thank bạn -  Phần mềm rất hay, bạn có thể gửi cho mình pm được không mail của mình là onlystar123123@yahoo.com thank bạn trước nha.
 
   
     
  lathimai (29/09/2011 11:18 PM) Có ích: 0/0    
 
bạn ơi phần mềm hay thật . bạn gửi mail ho minh fan mem nay với dc ko bạn? mail của mình : lamai.ht@gmail.com
 
   
     
  sandgcntb (30/09/2010 09:04 AM) Có ích: 0/0    
 
© SAGA - Có thể chia sẻ cho mình không? - 

Phần mềm rất thiết thực cho công viêc của mình.\

Share cho mình nhé: quanhai_baitulongbay@yahoo.com

Thanks!

 
   
     
  kidsnap (20/01/2010 11:59 PM) Có ích: 1/1    
 
© SAGA - Share cho mình với -  Phần mềm hay thiệt, mình đang cần phần mềm này. Bạn có thể share được không? Thanks!
 
   
     
  binhca (07/12/2009 10:19 AM) Có ích: 0/0    
 
© SAGA - Bạn gởi cho mình với -  Chấm công hàng tháng của mình rất phức tạp, làm trên bản Word mất rất nhìu thời gian. Bạn có thể gởi cho mình được không? Thank truớc nhé bạn.
Email của mình là: bym1132000@yahoo.com
 
   
     
  goclangme (06/12/2009 11:13 PM) Có ích: 0/0    
 
© SAGA - Phần mềm chấm công -  Dear friends, mình là thành viên mới của Saga. Mình rấthấy phần mềm chấm công này rất bổ ích, có thể share cho mình được không các bạn? Email của mình là taotv@live.com
 
   
     
  Tranpearl (24/11/2009 01:18 PM) Có ích: 0/0    
 
© SAGA - Share -  Dear các bạn, mình là thành viên mới của Saga, mình rất thấy phần mềm chấm công này rất bổ ích, có thể share cho mình được không các bạn? Email của mình là trangbaotran@gmail.com. Cám ơn các bạn rất nhiều.
 
   
     
  bupbecodon (25/08/2009 11:04 AM) Có ích: 0/0    
 
© SAGA - Xin chỉ giúp -  Tôi làm theo hướng dẫn, nhưng khi nhập đoạn mã vào Class Module không thể đổi tên thành "clsString"; ai biết cách không chỉ giúp tôi với?
 
   
     
 
Thảo luận (6) Thành viên ưa thích (27)
Trang trước   -  1/1  -   Trang sau
 
  minhtruc09 (24/04/2009 11:31 AM)  
 
Hi, Bạn ơi phần này thật là hay. Cty của mình cũng đang rất cần phần chấm công như vậy. Bạn có thể chỉ cho mình cách download về được không? Rất cảm ơn bạn.
 
   
     
  nguyetceen (10/02/2009 04:45 PM)  
 
Tôi đã làm theo hướng dẫn trên, nhưng khi sử dụng hàm chấm công thì chương trình báo lỗi tại khai báo Dim BChuoi As clsString.

Nhờ mọi người tư vấn giúp. Xin cảm ơn nhiều lắm.
 
   
     
  cu_tit (28/10/2008 12:57 AM)  
 
Làm thế nào để download được những phần mềm này vậy? Mọi người có thể giúp mình không? Mình cảm ơn nhiều lắm!
 
   
     
  o0Jy0o (25/10/2008 02:51 PM)  
 
Có thể share cho mình file này được không bạn? Email là: luulinh_mylove@yahoo.com. Thanks bạn nhiều!
 
   
     
  hocon007 (20/06/2008 11:34 AM)  
 

Bác Ducminh1080 ơi làm sao để download được phần mền chứ chỉ cho em với.

 
   
     
  ducminh1080 (23/05/2008 01:35 PM)  
 
Xin chào. Phần mềm này rất thiết thực đối với tôi. Bạn hãy thử sử dụng nhé.
 
   
     
 
     Gửi thảo luận (Vui lòng gõ Tiếng Việt có dấu. Nếu bạn chưa có bộ gõ Tiếng Việt, nhấn vào đây  
     
Tiêu đề 
   
 
( Tối đa1MB)
 
    (Để tham gia thảo luận, bạn cần đăng nhập)  
 
 
 
:: CÁC BÀI LIÊN QUAN
 
 
:: CÁC BÀI MỚI TRONG NGÀY
 
 
:: CÁC BÀI TIẾP THEO
Tại sao các doanh nghiệp Việt Nam không ứng dụng các phần mềm nguồn mở?
Hướng dẫn viên du lịch cho máy tính bỏ túi Pocket-Infomap 1.0
Dữ liệu trên mạng của bạn có thật sự an toàn và bảo mật ?
Bộ phần mềm nguồn mở dành cho người lập trình
Tường lửa - Tất cả trong một
Công cụ quản lý CSDL phổ biến
 
 
 
 

Đăng ký:216481 (Vàng: 21 - Bạc:11)

Thảo luận:42710

Thuật ngữ tài chính-kinhdoanh:4963

Hỏi đáp kinh tế-kinh doanh:1494

Counter:
hit counter

Chăm sóc kỹ thuật bởi  NVS

TRANG CHỦ  |  GIỚI THIỆU  |  SITEMAP |  ĐỐI TÁC  |  ĐIỀU KHOẢN  |  Ý KIẾN  |  LIÊN HỆ/QUẢNG CÁO
Liên hệ quảng cáo:
CÔNG TY CỔ PHẦN CÔNG NGHỆ TRỰC TUYẾN IP (IP MEDIA JSC)
Email: info@saga.vn
 
Hà Nội: Tầng 26 Xuân Thủy Tower, 173 Xuân Thủy, Q Cầu Giấy – ĐT: (04) 39446509
TP HCM: Lầu 5, 293 Điện Biên Phủ, P. 15, Q. Bình Thạnh - ĐT:(08) 54042168
Giấy phép số 362/GP-BC do Cục Báo chí, Bộ Văn hoá-Thông tin cấp ngày 05/12/2006.
® Ghi rõ nguồn "saga.vn" khi bạn phát hành lại thông tin từ website này.