Đổ công, Phép, giờ làm thêm bằng VBA. (1 người xem)

  • Thread starter Thread starter mrloe
  • Ngày gửi Ngày gửi

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

mrloe

Thành viên chính thức
Tham gia
2/7/14
Bài viết
52
Được thích
7
Kính gửi Anh/Chị.

Cho em xin đoạn code VBA để em đổ mọi cái theo ngày và ID từ sheet DATA vào sheet WORKING_TIME với ah (nếu 1 ô nào đó trong working_time đã có dữ liệu thì được thay thế bằng dữ liệu mới ở sheet Data sau khi em cho đoạn code chạy).

Trước đây thì em chấm bằng cách điền theo từng ngày với từng ID, nhưng giờ Số lượng CBCNV quá lớn nên em làm theo kiểu này thì vất lắm.

Vậy em rất mong được các Anh/Chị trợ giúp em.

Em cảm ơn nhiều ah!

http://www.4shared.com/office/Ppusl0z5ce/Cong_Phep_Overtime.html?
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn xem file kèm theo; Bạn xem & kiểm số liệu đi nha

Nhưng chỉ đến ngày cuối của tháng trước thôi;

Các ngày đầu tháng . . . . , khì, khì, do bạn chưa giả lập, khà, khà,. . .

@#!^%
 
Lần chỉnh sửa cuối:
Upvote 0

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Thật ra mình muốn cảnh báo bạn thế thôi; File trước mình đã giả lập rồi

& lần này tặng luôn bạn file có xử lí luôn số liệu của trang "Leave' luôn nè;

(Thật ra mình làm xong trước chiều qua, nhưng chờ bài này của bạn . . . )
 

File đính kèm

Upvote 0
& lần này tặng luôn bạn file có xử lí luôn số liệu của trang "Leave' luôn nè;

(Thật ra mình làm xong trước chiều qua, nhưng chờ bài này của bạn . . . )

Thật tuyệt vời.

Em gửi tới anh một tin nhắn thật lòng đó, anh đọc nhé.

Em cảm ơn anh rất nhiều.
 
Upvote 0
Báo cáo với anh SA_DQ và các Anh/Chị khác là có một tý lỗi rồi ah.

Trong giả định em gửi là áp dụng từ 26/5 -> 25/6/2014 (tháng 5/2014 có 31 ngày) thì OK nhưng giờ em đang áp dụng thực từ 26/6 -> 25/7/2014 (tháng 6/2014 có 30 ngày) thì ngày 01/7/2014 bị bỏ trắng và dữ liệu ngày 01 này nhảy sang ngày 02, tương tự 02 -> 03,....

Em đã cùng ngày cách thủ công là: Sau khi đổ xong em đã copy lùi lại 01 ngày là OK.

Em gửi lên đây để anh, các anh/chị khác biết và sửa giúp em khi rảnh.

Cảm ơn anh và các anh/chị khác đã chỉ dẫn em!
 
Upvote 0
Báo cáo với anh SA_DQ và các Anh/Chị khác là có một tý lỗi rồi ah.

Trong giả định em gửi là áp dụng từ 26/5 -> 25/6/2014 (tháng 5/2014 có 31 ngày) thì OK nhưng giờ em đang áp dụng thực từ 26/6 -> 25/7/2014 (tháng 6/2014 có 30 ngày) thì ngày 01/7/2014 bị bỏ trắng và dữ liệu ngày 01 này nhảy sang ngày 02, tương tự 02 -> 03,....

Em đã cùng ngày cách thủ công là: Sau khi đổ xong em đã copy lùi lại 01 ngày là OK.

Em gửi lên đây để anh, các anh/chị khác biết và sửa giúp em khi rảnh.

Cảm ơn anh và các anh/chị khác đã chỉ dẫn em!

bạn test code sau nhé
Mã:
Sub sort()
Application.ScreenUpdating = False
Dim a(), c, d, w
With Sheets("WORKING_TIME")
    .[H5:EA21].ClearContents
    Set IDs = .[B5:B20]
    Set d = .Rows(3)
End With
For Each ID In IDs.Cells
    If ID <> "" Then
        Set c = Sheets("DATA").Cells.Find(ID)
        If Not c Is Nothing Then
            frc = c.Row
        Do
            w = Application.Match(Day(c.Offset(, -1)), d, 0) - 4
            ReDim Preserve a(1 To w)
            For j = w - 3 To w
                a(j) = c.Offset(, 1 + (j - 1) Mod 4)
            Next
            Set c = Sheets("DATA").Cells.FindNext(c)
        Loop Until c.Row = frc
            ID.Offset(, 6).Resize(, w) = a
        End If
    End If
Next
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Mời các bạn xem theo file

Hãy thử kiểm với số liệu các tháng, nhất là tháng 3 & tháng 7, 8. . .
 

File đính kèm

Upvote 0
Hãy thử kiểm với số liệu các tháng, nhất là tháng 3 & tháng 7, 8. . .

Gửi anh.

- Em thử tháng 3 thì OK nhưng thử các tháng khác mà các tháng trước có 30 ngày hay 31 ngày thì đều nhận được báo lỗi ở như sau:

Cls.Offset(, 6 + Ng * 4 + (Cll.Column - 3)).Value = Cll.Value


- Riêng tháng 2 (tháng 01 có 31 ngày, tháng 02 có 28 ngày) thì không có báo lỗi những dữ liệu nhảy ra ngoài mấy ngày trong Bảng chấm công.

Anh xem lại giúp em nhé.

Em cảm ơn anh!
 
Upvote 0
(1) -Em thử tháng 3 thì OK nhưng thử các tháng khác mà các tháng trước có 30 ngày hay 31 ngày thì đều nhận được báo lỗi ở như sau:
Cls.Offset(, 6 + Ng * 4 + (Cll.Column - 3)).Value = Cll.Value

(2)- Riêng tháng 2 (tháng 01 có 31 ngày, tháng 02 có 28 ngày) thì không có báo lỗi những dữ liệu nhảy ra ngoài mấy ngày trong Bảng chấm công.
Anh xem lại giúp em nhé.
Em cảm ơn anh!

(1) Mình quên chưa nói với bạn là bạn cần đến ô [DY1] & chỉnh chọn đúng tháng cần ghi số liệu công xá trước khi chạy macro
Điều này cho fép ta vượt qua số ngày khác nhau của các tháng, kể cả tháng hai

Giờ trở đi thì chúng liên quan chặt chẽ với nhau giữa 2 trang tính.

Nếu làm như trước đây thì mệt với năm nhuận thêm nữa.

(2) Bạn chép số liệu các tháng giả lập vô cột [a] của trang 'Data'; Sau khi chọn lại tháng cần B/C & chạy macro cho từng tháng xem sao.

Còn gì chưa đúng bào mình biết với nha.

Chúc vui!
 
Upvote 0
Bảng công thực đang làm trong tháng.

(1) Mình quên chưa nói với bạn là bạn cần đến ô [DY1] & chỉnh chọn đúng tháng cần ghi số liệu công xá trước khi chạy macro
Điều này cho fép ta vượt qua số ngày khác nhau của các tháng, kể cả tháng hai

Giờ trở đi thì chúng liên quan chặt chẽ với nhau giữa 2 trang tính.

Nếu làm như trước đây thì mệt với năm nhuận thêm nữa.

(2) Bạn chép số liệu các tháng giả lập vô cột [a] của trang 'Data'; Sau khi chọn lại tháng cần B/C & chạy macro cho từng tháng xem sao.

Còn gì chưa đúng bào mình biết với nha.

Chúc vui!

Dạ vâng, hôm qua trước khi em đăng lỗi của đoạn code thì em đã thử hết rồi ah.

Và đây là file thực làm của em, anh xem em đã chỉnh và đã chỉnh sai code ở chỗ nào nhé.

Em cảm ơn anh!
 

File đính kèm

Upvote 0
Trời ạ! toi nữa giờ mới tìm ra:

Cột [A] của trang 'Data' của bạn chưa là số liệu, nó là dữ liệu kiểu chuỗi!

/-)ể chuyển thành số liệu bạn cần trãi qua các bước sau:

B1: Tại [I2] bạn áp công thức: =DATE(1*RIGHT(A2,4),1*MID(A2,4,2),LEFT(A2,1)*1)

B2: Dùng fương thức FillDown Copy cho đến dòng cuối (27752)

B3: Dùng chuột tô chọn cột này & Copy - Paste Values để chuyển hết sang dạng số liệu

B4: Copy cột sang cột [A]

(B4.1) Nếu muốn dễ nhìn, bạn format cột này dạng Custom với thể DD/MM/YYYY cho quen mắt người Việt.
 
Upvote 0
Cột [A] của trang 'Data' của bạn chưa là số liệu, nó là dữ liệu kiểu chuỗi!

/-)ể chuyển thành số liệu bạn cần trãi qua các bước sau:

B1: Tại [I2] bạn áp công thức: =DATE(1*RIGHT(A2,4),1*MID(A2,4,2),LEFT(A2,1)*1)

B2: Dùng fương thức FillDown Copy cho đến dòng cuối (27752)

B3: Dùng chuột tô chọn cột này & Copy - Paste Values để chuyển hết sang dạng số liệu

B4: Copy cột sang cột [A]

(B4.1) Nếu muốn dễ nhìn, bạn format cột này dạng Custom với thể DD/MM/YYYY cho quen mắt người Việt.



Có vẻ như không ổn anh ah, em thử rồi nhưng nó vẫn lỗi: Cls.Offset(, 6 + Ng * 4 + (Cll.Column - 3)).Value = Cll.Value

(cột A em để định dạng kiểu DD/MM/YYYY, cột I em để định dạng kiểu MM/DD/YYYY hoặc A & I đều là DD/MM/YYYY nhưng vẫn báo lỗi như trên)

Có cách nào khác tốt hơn không ah?

Em cảm ơn anh!
 
Upvote 0
Máy cà zựt của mình chạy gần 1 fút!

(/ới trang 'Data' mình đã chép dữ liệu cột [A] sang cột [K] & xài macro để chuyển dữ liệu cột này thành số liệu kiểu ngày dạng M/d/yyyy
Sau đó chép i sì kết quả (tại cột ) sang cột [A]

Chạy macro đã có, mất thời gian, nhưng không thấy lỗi

& xin mời bạn xem file:
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
(/ới trang 'Data' mình đã chép dữ liệu cột [A] sang cột [K] & xài macro để chuyển dữ liệu cột này thành số liệu kiểu ngày dạng M/d/yyyy
Sau đó chép i sì kết quả (tại cột ) sang cột [A]

Chạy macro đã có, mất thời gian, nhưng không thấy lỗi

& xin mời bạn xem file:



Báo cáo anh SA_DQ và các anh/chị khác: Em làm theo hướng dẫn và bổ sung thêm đoạn code của anh là ok rồi ah.

Em xin gửi lời cảm ơn đến anh SA_DQ, anh/chị khác đã hướng dẫn em chi tiết việc này!
 
Upvote 0
Gửi các Anh.

Tình hình là sau khi em "Đổ công" xong em đã lỡ tay xoá mất tiêu cái sheet Data kia rồi, giờ em muốn chuyển dữ liệu đang ở trên bảng ngang Working_Time kia về kiểu dữ liệu trên sheet Data.

Các Anh cho em xin code để "gỡ tội" cho em nhé.

Em cảm ơn rất nhiều ah!
 
Upvote 0
[thongbao]Tình hình là sau khi em "Đổ công" xong em đã lỡ tay xoá mất tiêu cái sheet Data kia rồi, giờ em muốn chuyển dữ liệu đang ở trên bảng ngang Working_Time kia về kiểu dữ liệu trên sheet Data.

Các Anh cho em xin code để "gỡ tội" cho em nhé.

Em cảm ơn rất nhiều ah![/thOngbao]
 

File đính kèm

Upvote 0
(/ới trang 'Data' mình đã chép dữ liệu cột [A] sang cột [K] & xài macro để chuyển dữ liệu cột này thành số liệu kiểu ngày dạng M/d/yyyy
Sau đó chép i sì kết quả (tại cột ) sang cột [A]

Chạy macro đã có, mất thời gian, nhưng không thấy lỗi

& xin mời bạn xem file:


Gửi Anh/Chị.

Giờ Sếp em đã ok lời đề xuất của Người lao động trở lại thời gian chốt công từ ngày 01 đến hết ngày cuối cùng trong tháng.

Vậy, trọng đoạn code trên thì em sửa chỗ nào để Bảng công của em được bắt đầu từ ngày 01 đến hết ngày cuối cùng trong tháng ạ?

(Em đã sửa từ số 26 kia về số 1 cả trên Bảng tính và trong code nhưng không thành Anh/Chị ạ)

Anh/Chị hướng dẫn em với nhé.

Em cảm ơn nhiều ạ!
 
Upvote 0
Chà chà; Chuyện này mệt đây; Sửa chật vật hơn viết mới!

Mình sẽ hướng dẫn bạn từng bước; Xong bước này mới sang bước khác nha:

B1:
Sửa công thức tại [H3] của trang 'Working_Time'
Nó hiện đang là =DATE(EA1,DY1-1,26)
Bạn cần chuyển nó thành =DATE(EA1,DY1,1)

Tiếp theo bạn sang trang 'DuLieu"; Chép dữ liệu đang có ở các cột sang các cột, bắt đầu từ cột [K]

Bấm Lưu file;

Bấm nút "Tạo Dữ liệu" để chạy macro

Kiểm tra kết quả macro, đối chiếu số liệu cũ & cho biết kết quả.
 
Upvote 0
Mình sẽ hướng dẫn bạn từng bước; Xong bước này mới sang bước khác nha:

B1:
Sửa công thức tại [H3] của trang 'Working_Time'
Nó hiện đang là =DATE(EA1,DY1-1,26)
Bạn cần chuyển nó thành =DATE(EA1,DY1,1)

Tiếp theo bạn sang trang 'DuLieu"; Chép dữ liệu đang có ở các cột sang các cột, bắt đầu từ cột [K]

Bấm Lưu file;

Bấm nút "Tạo Dữ liệu" để chạy macro

Kiểm tra kết quả macro, đối chiếu số liệu cũ & cho biết kết quả.

Dạ, em xong Bước 1 rồi anh ah.
 
Upvote 0
Bước 2 (fần đầu, vì mình hết giờ rãnh rồi )

Bạn tìm đến macro
PHP:
Sub SangCong()
'Có dòng lệnh:'
Dat = DateSerial([eA1].Value, [dy1].Value - 1, 26)
 End Sub
Sửa lại như bước 1

Bấm lưu trang tính & cho chạy macro này;

Kết quả dự báo là rối tung!

Tạm biệt!
 
Upvote 0

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

Back
Top Bottom