File theo dõi tình hình nghỉ của CBNV

hoangluong

Thành viên mới
Tham gia ngày
2 Tháng mười 2007
Bài viết
18
Được thích
94
Điểm
0
Xin chào ACE!
Mình làm file theo dõi tình hình nghỉ của CBNV bao gồm các loại: Nghỉ phép, nghỉ có lương, nghỉ không lương, nghỉ ốm, nghỉ chế độ...Tuy nhiên, công thức mình làm thì file rất nặng, chờ đợi để rất lâu.
ACE giúp mình xem có công thức nào nhẹ hơn không?
 

File đính kèm

HYen17

Thành viên cằn cỗi.
Tham gia ngày
27 Tháng năm 2007
Bài viết
4,481
Được thích
6,174
Điểm
100
Tuổi
20
Mình làm file theo dõi tình hình nghỉ của CBNV bao gồm các loại: Nghỉ phép, nghỉ có lương, nghỉ không lương, nghỉ ốm, nghỉ chế độ...Tuy nhiên, công thức mình làm thì file rất nặng, chờ đợi để rất lâu. ACE giúp mình xem có công thức nào nhẹ hơn không?
Nếu công thức nặng thì có thể chuyển sang hàm tự tạo;

Cũng muốn thử lập cho bạn 1 hàm xem sao. nhưng bạn quá tiết kiệm khi đưa dữ liệu lên, nó chưa tiêu biểu ở chổ:

(*) bạn chỉ đưa lên ngày phép năm, sao không thêm 1 dòng cho loại công khác nữa (chí ít) có hơn không!

(*) Danh sách Cơ quan bạn chắc nhiều (Mới gây lặc lè khi chạy công thúc); Vậy mà bạn đưa lên được chỉ có hai người, không có lấy thêm 1 mống thứ ba, thứ tư, . . . nữa là làm sao?

(+) Thường xưa những loại công này cùng theo dõi với các loại công khác trong bảng chấm công hàng ngày; Cuối mỗi tháng người thống kê tổng hợp 1 lần để ra lương. Đây bạn tách ra; Vậy hãy cho biết luôn, trong bảng chấm công tháng của bạn có nội dung rặng?

Rất chờ tin bạn!
 

tulaphl

Thành viên chính thức
Tham gia ngày
27 Tháng ba 2008
Bài viết
67
Được thích
66
Điểm
0
Tuổi
34
Mình có file theo dõi công nghỉ của CNV chạy rất chậm. mong các bạn trên diễn đàn sửa giúp. Xin chân thành cám ơn!
 

File đính kèm

minhtri0827

Thành viên chính thức
Tham gia ngày
13 Tháng ba 2008
Bài viết
78
Được thích
106
Điểm
0
Tuổi
52
Mình có file theo dõi công nghỉ của CNV chạy rất chậm. mong các bạn trên diễn đàn sửa giúp. Xin chân thành cám ơn!
Theo tôi hình như tất cả các công thức, các name của bạn đều cho tính trên cả cột nên khi tính toán máy sẽ chạy chậm - Bạn thử sửa lại công thức vừa đủ xem sao.
Thân
 

tulaphl

Thành viên chính thức
Tham gia ngày
27 Tháng ba 2008
Bài viết
67
Được thích
66
Điểm
0
Tuổi
34
Cám ơn minhtri0827. mình đã theo góp ý của diễn đàn cho tính các name động nhưng vẫn chậm. Mong được sự giúp đỡ bằng VBA.
 

hoangluong

Thành viên mới
Tham gia ngày
2 Tháng mười 2007
Bài viết
18
Được thích
94
Điểm
0
Nếu công thức nặng thì có thể chuyển sang hàm tự tạo;

Cũng muốn thử lập cho bạn 1 hàm xem sao. nhưng bạn quá tiết kiệm khi đưa dữ liệu lên, nó chưa tiêu biểu ở chổ:

(*) bạn chỉ đưa lên ngày phép năm, sao không thêm 1 dòng cho loại công khác nữa (chí ít) có hơn không!

(*) Danh sách Cơ quan bạn chắc nhiều (Mới gây lặc lè khi chạy công thúc); Vậy mà bạn đưa lên được chỉ có hai người, không có lấy thêm 1 mống thứ ba, thứ tư, . . . nữa là làm sao?

(+) Thường xưa những loại công này cùng theo dõi với các loại công khác trong bảng chấm công hàng ngày; Cuối mỗi tháng người thống kê tổng hợp 1 lần để ra lương. Đây bạn tách ra; Vậy hãy cho biết luôn, trong bảng chấm công tháng của bạn có nội dung rặng?

Rất chờ tin bạn!
Chào bạn!

+ trong phần file theo dõi, ngoài nghỉ phép mình có đưa thêm nghỉ ốm, nghỉ con ốm, nghỉ có lương, nghỉ không lương...Bạn xem tại sheet 2
+ CBNV bên mình khoảng gần 400, nên khi chạy công thức đó rất nặng nên nhờ ACE xem có công thức thay thế để nhẹ hơn không?
+ Trong file theo dõi của mình có tất cả 3 sheet:
* sheet1: là bảng gốc để lấy mã của CBNV, tổng hợp ngày nghỉ phép, nghỉ ốm...của cả năm (Để CB có thể theo dõi CB nghỉ bao nhiêu ngày rồi, đã hết ngày nghỉ phép chưa....)
* Sheet 2: là phần nhập dữ liệu: khi CBNV nghỉ thì sẽ có phiếu xin nghỉ, CB chấm công sẽ có trách nhiệm nhập dữ liệu hàng ngày vào
* Sheet 3: Đây là phần tự động xuất số liệu ra từng tháng để lấy dữ liệu làm bảng lương.

ACE đóp góp ý kiến nhé
 

ChanhTQ@

0901452không62
Tham gia ngày
5 Tháng chín 2008
Bài viết
4,261
Được thích
4,938
Điểm
100
Như mình, muốn chuyển hoàn toàn sang VBA thì:

Mình có file theo dõi công nghỉ của CNV chạy rất chậm. mong các bạn trên diễn đàn sửa giúp. Xin chân thành cám ơn!
(1) Bỏ toàn bộ 726 * 31 công thức đồ sộ bên "Cham Cong";

(2) Bỏ hoàn toàn 200 * 4 công thức vĩ đại bên "Cong Nghi"
Thay vô đó bằng macro sẽ giúp bạn trong nháy mắt tìm & gán đúng tên khi bạn đã biết & nhập mã nhân viên vố các cột có MOD(Column,4) = 2 ("B,"F",. . . )

(2.1) Có thể sửa lại cấu trúc trang tính này chỉ còn 5 trường mà thôi; 4 trường đầu & thêm trường [loaiCong]; Trường cuối sẽ chứa các ký tự loại công mà đơn vị bạn quy ước;

Xin hỏi thêm: Bạn xài Font gì mà mình không thể chuyển đổi được sang Unicode được vậy?

Nêu bạn đồng ý, chúng ta sẽ bắt tay vào việc; Mình hứa chắc sẽ viết các macro cho bạn đạt kết quả như hiện tại yêu cầu chỉ không quá 1 phút; Chắc đó nghe!
 

tulaphl

Thành viên chính thức
Tham gia ngày
27 Tháng ba 2008
Bài viết
67
Được thích
66
Điểm
0
Tuổi
34
Cám ơn bạn chanhTQ@. Thực sự mình rất bí về đoạn này, rất mong bạn giúp đỡ. Xin cám ơn nhiều
 

HYen17

Thành viên cằn cỗi.
Tham gia ngày
27 Tháng năm 2007
Bài viết
4,481
Được thích
6,174
Điểm
100
Tuổi
20
Cải tổ toàn bộ kế`t cấu luôn; Nếu ưng í ta tiếp tục

Cám ơn bạn chanhTQ@. Thực sự mình rất bí về đoạn này, rất mong bạn giúp đỡ. Xin cám ơn nhiều
Chú í khi sử dụng:

(*) Mình đã đổi tên các trang tính; Cũ của bạn rườm rà hơn đó;

(*) Thay đổi mã đơn vị tại 'DonVi'[D2] để xem macro đưa ra kết quả. (Nhưng chỉ chưa nhiều các đơn vị có công phép; Bạn thử nhập tiếp vô 'CongNghi' để chiêm nghiệm);
(Hiện tại mới có vài đơn vị có người có công nghỉ)

(*) Có thể chạy riêng macro 'CopyToChamCong' bằng tổ hợp fím nóng cài sẵn
PHP:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [D2]) Is Nothing Then
   Dim Sh As Worksheet, Rng As Range, sRng As Range
   Dim MyAdd As String
   
   Application.ScreenUpdating = False:       CopyToChamCong
   Sheets("DonVi").Select
   Set Sh = Sheets("ChamCong"):          Range("B5:AI138").ClearContents
   Set Rng = Sh.Range(Sh.[d3], Sh.[d65500].End(xlUp))
   Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole)
   If Not sRng Is Nothing Then
      MyAdd = sRng.Address
      Do
         [B138].End(xlUp).Offset(1).Resize(, 34).Value = _
            sRng.Offset(, -2).Resize(, 34).Value
         Set sRng = Rng.FindNext(sRng)
      Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
   End If
   
 End If
End Sub
(*) . . . . Chúc vui!
 

File đính kèm

HYen17

Thành viên cằn cỗi.
Tham gia ngày
27 Tháng năm 2007
Bài viết
4,481
Được thích
6,174
Điểm
100
Tuổi
20
Ừ hử, còn chưa chỉnh & nó phải là vầy:

Xin chân thành cảm ơn bạn HYen17. Tôi đã nhận được file theo dõi công nghỉ bạn đã sửa chữa cho. Song trong quá trình thao tác thì số ngày copy sang bảng chấm công không thể hiện được ngày bắt đầu, VD ngày bắt đầu là ngày 12/9 thì sang ngày 13/9 mới thể hiện trong bảng chấm công. Mong bạn sửa giúp. Xin cám ơn nhiều. ĐChỉ của mình: tulaphl@yahoo.com
PHP:
Option Explicit
Sub CopyToChamCong()
0 Dim Sh As Worksheet, Rng As Range, sRng As Range
 Dim Clls As Range, Rng0 As Range
 Dim SoNgay As Byte, NgayBD As Integer, Jj As Byte
 
 Set Sh = Sheets("CongNghi"):       Sheets("ChamCong").Select
 [e4].Resize([A65500].End(xlUp).Row, 31).ClearContents
 
 Set Rng = Range([C3], [C65500].End(xlUp))
 Set Rng0 = [e2].Resize(, 31)
 Rng0.NumberFormat = "MM/DD/yyyy"
 For Each Clls In Sh.Range(Sh.[B3], Sh.[b65500].End(xlUp))
   Set sRng = Rng.Find(Clls.Value, , xlFormulas, xlWhole)
   If Not sRng Is Nothing Then
      sRng.Interior.ColorIndex = 35
      With Clls.Offset(, 1)
         NgayBD = Day(.Value):        SoNgay = .Offset(, 1).Value - .Value
      End With
      For Jj = NgayBD - 1 To (NgayBD + SoNgay) '*'
         If Weekday([e2].Offset(, Jj).Value) <> 1 Then
            Cells(sRng.Row, [e2].Offset(, Jj).Column).Value = Clls.Offset(, 3).Value
         Else
            Cells(sRng.Row, [e2].Offset(, Jj).Column).Value = "CN"
         End If
      Next Jj
   End If
 Next Clls
Rng0.NumberFormat = "DD"
End Sub
 

tulaphl

Thành viên chính thức
Tham gia ngày
27 Tháng ba 2008
Bài viết
67
Được thích
66
Điểm
0
Tuổi
34
Cám ơn bạn HYen17, bạn thật giỏi, đoạn code bạn sửa lại cho chạy rất tốt. Khi nào mình gặp phải trường hợp khó lại mong bạn giúp đỡ nhé, xin đừng từ chối. Hẹn gặp lại
 

HYen17

Thành viên cằn cỗi.
Tham gia ngày
27 Tháng năm 2007
Bài viết
4,481
Được thích
6,174
Điểm
100
Tuổi
20
Tiếp tục bỏ các công thức tại vùng 'AL5:AP138' của trang tính DonVị

Thay vào đó là đoạn macro như sau:

Mã:
[B]Private Sub Worksheet_Change(ByVal Target As Range)[/B]
  [COLOR=silver] ' . . . . . . ' [/COLOR]
  [COLOR=silver] ' . . . . . . ' [/COLOR]
  [COLOR=silver] ' . . . . . . ' [/COLOR]
[COLOR=silver]  End If[/COLOR]
   
   Set Rng = [AL5]
   Rng.FormulaR1C1 = "=COUNTIF(R[1]C5:R[1]C35,R4C)"
   Rng.Select
   Selection.AutoFill Destination:=Range("AL5:AO5"), Type:=xlFillDefault
   Rng.Offset(, 4).FormulaR1C1 = "=SUM(RC[-4]:RC[-1])"
   Rng.Resize(, 5).AutoFill Destination:=Range("AL5:AP" & _
      [c5].End(xlDown).Row), Type:=xlFillDefault
[COLOR=silver]End If[/COLOR]
[B]End Sub[/B]
Thêm đoạn này nó chỉ điền công thức tới đủ thì dừng, chứ không như bạn, điền công thức phải chắc dư: Dẫn đến hao tài nguyên của chúng ta, nói chung!
 

tulaphl

Thành viên chính thức
Tham gia ngày
27 Tháng ba 2008
Bài viết
67
Được thích
66
Điểm
0
Tuổi
34
Chào bạn HYen17, xin cám ơn và chúc một ngày tốt đẹp vui vẻ. Các đoạn Code bạn viết cho tôi thật hữu dụng, nhưng có một ý nhỏ tôi muốn hỏi bạn: hiện tai file hoạt động tốt nhưng mỗi khi nhập số liệu xong thì cứ phải kích hoạt tại Sheet"Donvi" thì số liệu mới chạy, mong bạn chỉ bảo. Thân chào
 

HYen17

Thành viên cằn cỗi.
Tham gia ngày
27 Tháng năm 2007
Bài viết
4,481
Được thích
6,174
Điểm
100
Tuổi
20
Tuy bạn thấy là chuyện nhỏ, nhưng mình chưa hiểu hết í, nên thành lớn chuyện

Các đoạn Code thật hữu dụng, nhưng có một ý nhỏ tôi muốn hỏi bạn: hiện tai file hoạt động tốt nhưng mỗi khi nhập số liệu xong thì cứ phải kích hoạt tại Sheet"Donvi" thì số liệu mới chạy, mong bạn chỉ bảo. Thân chào
Chúng ta đang có 2 macro;

Cái thứ 2 đang ở module 1; ta có thể & đã gán fím tắc cho nó & chạy lúc nào ta muốn nó cập nhựt dữ liệu từ CongNghi sang ChamCong (& chỉ có thế mà thôi)

Cái thư nhứt macro đang ở trong trang tính DonVi; Trong cái này giữa chừng có gọi cái thứ hai để làm phần việc cập nhựt này.

Nếu bạn muốn macro này chạy bất cú từ địa điểm nào bạn đang đứng thí ta tách macro ấy ra; Phần chủ yếu macro phải để trong module 1 (Tạm gọi macro này là GPE);

Khi ấy ta có thể triệu gọi GPE này từ việc kích hoạt [D2] của trang 'DonVi' hay từ 1 macro sẽ phải tạo (Tạm gọi là NEW) để cung cấp mã đơn vị cho GPE làm việc trơn tru; NEW sẽ được chúng ta gán fím tắc để ới lúc nào ta muốn.

(Thật ra mình chưa dám khẳng định là hiểu chu trình vận hành WorkBook này của bạn;
Cứ xem như ta nhập vô trang CongNghi; Chạy hay không chạy macro thứ 2;
Khi cần báo cáo (hay in ấn) ta sang DonVi để chạy ra cái đơn vị cần thiết để xem hay in
). Nếu không phải, làm ơn cho mình biết đặng cùng nhau thống nhứt trong hình dung sự việc tổng thể.

Chúc vui!
 

tulaphl

Thành viên chính thức
Tham gia ngày
27 Tháng ba 2008
Bài viết
67
Được thích
66
Điểm
0
Tuổi
34
Đúng như bạn nói, dữ liệu được nhập vào trang congnghi và mình muốn nó được cập nhật ngay sang trang chamcong, còn trang Donvi khi nào in tì mình mới kích hoạt [D2]. Bạn nói đã gán phím tắt đó là phím nào. mình rất cảm ơn bạn đã giúp mình. Thân chào
 

HYen17

Thành viên cằn cỗi.
Tham gia ngày
27 Tháng năm 2007
Bài viết
4,481
Được thích
6,174
Điểm
100
Tuổi
20
Ái dzà, có lẽ chúng ta phải quay lại từ đầu?!

Hiện tại, macro ở bài 11 nó chép toàn bộ các records trong CongNghi đến ChamCong;
Để thấy được fím nóng của nó, bạn thực hiện các công đoạn sau:
Vô menu Tool -> Macro -> Macro. . .
Ta sẽ thấy tên một số các macro có trong workbook;
Bạn chọn vô ngăn Option để xem;

Nếu bạn muốn chép từng dòng từ CongNghi sang ngay ChamCong ta phải đổi lại nội dung macro này;
(Vì trước đây cấu trúc CongNghi khác bây chừ, giờ có thuận tiện hơn)

Lúc đó khi chọn DonVi bên trang tính thứ 3 sẽ không cần triệu gọi macro thứ hai nữa;

Nhưng có điều này cần nói trước; Trang ChamCong phải làm lại từ đầu mỗi tháng. (Điều này có thể tự động hóa được, . . .)

Tóm lại làm lại toàn bộ thì dễ hơn!. . . Việc này sẽ phải tốn thời gian một chút.
Nhưng để vậy, cho hỏi các dòng tổng hợp ở dưới & bên phải của trang chamCong có dùng làm gì không? Bạn hãy cho biết nha!

Chờ tin bạn!
 

tulaphl

Thành viên chính thức
Tham gia ngày
27 Tháng ba 2008
Bài viết
67
Được thích
66
Điểm
0
Tuổi
34
Cám ơn HYen17, tôi đã tìm được rồi. Bảng theo dõi công nghỉ này là dùng tốt lắm rồi, rất cảm ơn bạn. Các dòng tổng hợp bên dưới & bên phải dùng để biết mỗi ngày có bao nhiêu người nghỉ và bên phải là tổng hợp công nghỉ các loại của từng người trong tháng. Thân chào và hẹn gặp lại!
 

HYen17

Thành viên cằn cỗi.
Tham gia ngày
27 Tháng năm 2007
Bài viết
4,481
Được thích
6,174
Điểm
100
Tuổi
20
Nhờ sửa giúp file Excel
Hôm trước bạn đã giúp mình sửa file theo dõi công nghỉ hiện thời hoạt động rất tốt nhưng trong đó chưa có công nghỉ lễ. Bạn giúp mình:
(*) Cho thêm công nghỉ lễ "L" vào trang "chamcong" như các công "CN" khi gặp ngày chủ nhật, vì ngày lễ là công chế độ mà ở Công ty mình thì ngoài các ngày lễ theo quy định chung của Nhà Nước còn được nghỉ một số ngày của ngành.

Những ngày lễ này có thể được ấn định ở một vùng nào đó hoặc được ghi thẳng vào các ngày của tháng đang theo dõi. Mình mong bạn giúp đỡ, Thân chào và hẹn gặp lại.​


Mình sẽ làm 1 macro để tháng nào có ngày nghĩ của Nhà nước, hay CTi quy định thì sẽ thêm công 'L' vô;
Nhưng để làm việc đó, mình sẽ yêu cầu bạn 2 vấn đề:
(.) Ngày âm lịch bạn tự điền vô hàng năm
(.) Bạn cho biết CTi bạn có cho nghĩ vào các ngày nào trong năm; Nếu đó là ngày truyền thống của ngành thì hãy cho biết; Còn đó là ngày sinh/tử của vị chức sắc nào đó mà tính theo âm lịch thì bạn cũng phải tự nhập hàng năm;

Dự định của mình là sẽ lấy 1 vùng trên trang tính 'CongNghi' như 'H:I' để liệt kê các công nghĩ bạn sẽ cung cấp (Cũng như sau này bạn sã phải sửa đổi/bổ sung vào đầu năm nếu đó là ngày âm)

Chờ thông tin từ bạn!

 

tulaphl

Thành viên chính thức
Tham gia ngày
27 Tháng ba 2008
Bài viết
67
Được thích
66
Điểm
0
Tuổi
34
Xin cám ơn HYen17.Công ty mình có các ngày lễ sau: Các ngày dương lịch 01/01; 30/04; 01/05;02/09;12/11 (ngày truyền thống công nhân mỏ). Các ngày âm lịch 30/12; 01/01; 02/01; 03/01 (tết nguyên đán); 10/03 (giỗ tổ Hùng Vương). Mong bạn giúp mình; xin chân thành cám ơn và xin được kết bạn để mình được học hỏi thêm.
 
Top Bottom