Tham chiếu giữa hợp đồng và bản chấm công

Liên hệ QC

suzuki tadayoshi

Thành viên chính thức
Tham gia
16/12/16
Bài viết
52
Được thích
1
Chào các anh chị trong diễn đàn!
Trong quá trình làm CHẤM CÔNG công trường (giống như file đính kèm) em gặp vấn đề như thế này ạ:
-NGÀY CHẤM CÔNG KHÔNG KHỚP với ngày thực hiện trong hợp đồng, ví dụ anh "số 3" hợp đồng làm từ ngày 10/1 nhưng chấm công từ ngày 9/1 (vô lý). Vấn đề này nếu chỉnh thủ công lên đến cả trăm người, chấm công 12 tháng trong năm sẽ rất lâu và dễ sai sót. EM nghĩ có 1 cách Khắc phục bằng cách trên bảng chấm công sự hiển thị anh "số 3" làm từ ngày nào đến ngày nào(tô màu, đánh dấu..) cho ta biết, sau đó ta đánh thủ công trong phạm vi đó sẽ không sai được
-Nâng cao hơn Em có ý tưởng này ví dụ anh A làm tháng 1 được 20 công, có code nào để bảng chấm công tháng 1 ĐÁNH DẤU X NGẪU NHIÊN 20 dấu không ạ.
Mong các anh chị diễn đàn giúp đỡ, chỉ dẫn cho em những ý tưởng khả thi về vấn đề này nếu không tự động hóa hoàn toàn thì cũng để cho người làm đỡ mất sức.
Trân trọng cám ơn.
 
Lần chỉnh sửa cuối:
Chào các anh chị trong diễn đàn!
Trong quá trình làm CHẤM CÔNG công trường (giống như file đính kèm) em gặp vấn đề như thế này ạ:
-NGÀY CHẤM CÔNG KHÔNG KHỚP với ngày thực hiện trong hợp đồng, ví dụ anh "số 3" hợp đồng làm từ ngày 10/1 nhưng chấm công từ ngày 9/1 (vô lý). Vấn đề này nếu chỉnh thủ công lên đến cả trăm người, chấm công 12 tháng trong năm sẽ rất lâu và dễ sai sót. EM nghĩ có 1 cách Khắc phục bằng cách trên bảng chấm công sự hiển thị anh "số 3" làm từ ngày nào đến ngày nào(tô màu, đánh dấu..) cho ta biết, sau đó ta đánh thủ công trong phạm vi đó sẽ không sai được
-Nâng cao hơn Em có ý tưởng này ví dụ anh A làm tháng 1 được 20 công, có code nào để bảng chấm công tháng 1 ĐÁNH DẤU X NGẪU NHIÊN 20 dấu không ạ.
Mong các anh chị diễn đàn giúp đỡ, chỉ dẫn cho em những ý tưởng khả thi về vấn đề này nếu không tự động hóa hoàn toàn thì cũng để cho người làm đỡ mất sức.
Trân trọng cám ơn.
1/ Quản lý kho hàng hóa, nhân sự, công cán mà không có MÃ của đối tượng đó (duy nhất) là phá sản rồi, khỏi phải nghĩ ý tưởng nào nữa cho mệt.

2/ Làm sao mà xảy ra chỗ màu đỏ được? Vì nhầm họ tên? Đã hết năm đâu mà 12 tháng rồi?

Áp hình thức phạt vào lỗi chấm công sai, đảm bảo hết vô lý.

Số lượng nhân sự tới trăm người thì ăn thua gì ở đây?

3/ Tham khảo file và bài viết sau:
http://www.giaiphapexcel.com/forum/showthread.php?121318-Hỏi-về-file-tính-tương
 
1/ Quản lý kho hàng hóa, nhân sự, công cán mà không có MÃ của đối tượng đó (duy nhất) là phá sản rồi, khỏi phải nghĩ ý tưởng nào nữa cho mệt.

2/ Làm sao mà xảy ra chỗ màu đỏ được? Vì nhầm họ tên? Đã hết năm đâu mà 12 tháng rồi?

Áp hình thức phạt vào lỗi chấm công sai, đảm bảo hết vô lý.

Số lượng nhân sự tới trăm người thì ăn thua gì ở đây?

3/ Tham khảo file và bài viết sau:
http://www.giaiphapexcel.com/forum/showthread.php?121318-Hỏi-về-file-tính-tương
cám ơn bạn befaint đã xem giúp mình... Có lẽ vấn đề của mình hơi khác một chút. Ở đây mình làm lại chứng từ nhân công công trường để ĐỐI PHÓ QUYẾT TOÁN THUẾ năm 2016 ( có đủ 12 tháng, nhiều công trường khác nhau, cũng không áp dụng hình thức phạt được (có mình làm thôi còn ai nữa đâu), nên mới phải làm lại chia nhỏ hợp đồng lao động dưới 3 tháng dấn đến chấm công loạn cả lên, chứ ở công trường thì chấm công trả tiền lương đầy đủ rồi...
Nghĩa là ở đây mình đang làm BÀI TOÁN NGƯỢC, thay vì bình thường là làm hợp đồng, chấm công rồi trả lương thì ở đây mình áp cho nó 1 số công nhất định trong khoảng thời gian dưới 3 tháng, sau đó mới làm hợp đồng trong khoảng thời gian đó.
Vấn đề ở đây là sao cho các khoảng thời gian khớp nhau, đánh dấu bảng chấm công nhanh nhất thôi bạn à
Mình không ở công trường lại phải làm chứng từ ở công trường nên mới khó khăn vậy. Mong bạn hiểu và giúp đỡ mình
 
Lần chỉnh sửa cuối:
Đây chắc là bảng chấm công ma để đối phó thôi!

(1) NGÀY CHẤM CÔNG KHÔNG KHỚP với ngày thực hiện trong hợp đồng, ví dụ nã "số 3" hợp đồng làm từ ngày 10/1 nhưng chấm công từ ngày 9/1 (vô lý). Vấn đề này nếu chỉnh thủ công lên đến cả trăm người, chấm công 12 tháng trong năm sẽ rất lâu và dễ sai sót. EM nghĩ có 1 cách Khắc phục bằng cách trên bảng chấm công sự hiển thị anh "số 3" làm từ ngày nào đến ngày nào(tô màu, đánh dấu..) cho ta biết, sau đó ta đánh thủ công trong phạm vi đó sẽ không sai được

(2)Nâng cao hơn Em có ý tưởng này ví dụ anh A làm tháng 1 được 20 công, có code nào để bảng chấm công tháng 1 ĐÁNH DẤU X NGẪU NHIÊN 20 dấu không ạ.

Đúng là nên tạo mã & làm việc với mã NV; không nên làm việc với [Họ Tên] là chính xác;
Mình đề xuất bộ mã như sau:
NVK00Nguyễn Văn Khánh
NVT00Nguyễn Văn Thái
NVT01Nguyễn Văn Thái
NVT02Nguyễn Văn Thuận
NVT03Nguyễn Văn Tín
NVT04Nguyễn Tú Vũ Tuấn
NXN00Nguyễn Xuân Nhật
PXT00Phan Xuân Thúy
TMH00Thiều Vũ Minh Hùng
TTL00Thiều Thị Thanh Loan
TVN00Trương Văn Nam
TVT00Trương Văn Tài
TVT01Trương Văn Thiều
TVT02Trương Văn Tưởng
TJV00Trần Vịnh

(1) Sẽ thực hiện được bỡi VBA, 1 khi có 12 BCC các tháng

(2) Cũng sẽ làm được, tuy khó sẽ gặp phải trong 2 tháng đầu & cuối vô làm việc của nhân viên đó.

Ngoài lề: Tên trang tính quá dài, chỉ cần T01, T02, . . . ,T12 là được rồi!
 
Lần chỉnh sửa cuối:
Cám ơn bạn hoang2013 đã chỉ dẫn, mình sẽ hiệu chỉnh lại trang tính, còn phần VBA mình chưa biết, mong bạn chỉ dẫn thêm:
- Cụ thể là "anh số 1" theo bảng chấm công tháng 1 bắt đầu làm từ ngày mùng 9 (ngày đầu tiên có đánh dấu x); ô ngày bắt đầu hợp đồng trong bảng DATA lập hàm thế nào để là 9/1/2016?
- "anh số 1" ngày cuối cùng làm việc trong bảng chấm công của tháng 3 là ngày 16 => ô kết thúc hợp đồng trong bảng DATA lập hàm thế nào ạ?
 
Lần chỉnh sửa cuối:
Bạn xem & kiểm theo số liệu trong file

Rất vui được tiếp tục trao đổi thêm cùng bạn. --=0
 
Lần chỉnh sửa cuối:
Cám ơn bạn Hoang2013, mình đã sử dụng thử (đã mở enable all macros), báo cáo bạn như sau:
- Sau khi thay đổi ngày tháng bắt đầu và kết thúc hợp đồng, chạy macro thì đánh dấu trong bảng chấm công tùm lum lắm (cái có cái không)
Bạn xem lại giúp mình nhé.
 
Lần chỉnh sửa cuối:
À!, chưa có đoạn mã lệnh để xóa những ô đã tô màu do lần chạy trước

PHP:
Option Explicit
Const MyErr As Double = 1 + vbObjectError + 512
Sub NgayCQ()
 Dim Sh As Worksheet, Cls As Range
 Dim SoNgay As Integer, fDat As Date, J As Integer, tDat As Date, lDat As Date
 Dim ShName As String
 On Error GoTo LoiCT
 
1 For Each Sh In ThisWorkbook.Worksheets     '|=>'
    If Left(Sh.Name, 1) = "T" And IsNumeric(Right(Sh.Name, 1)) Then
        J = Sh.[c8].CurrentRegion.Rows.Count
        Sh.[c8].Resize(J, 31).Interior.ColorIndex = 0
    End If
11 Next Sh                    '<=|'
 Sheets("Data").Select
 For Each Cls In Range([B4], [B4].End(xlDown))
    fDat = Cls.Offset(, 2).Value
    lDat = Cls.Offset(, 3).Value
    If Year(lDat) > Year(fDat) Then lDat = DateSerial(Year(fDat), 12, 31)
    SoNgay = lDat - fDat
    If SoNgay > 366 Then SoNgay = 366
    For J = 0 To SoNgay
        tDat = J + fDat
2        ShName = "T" & Right("0" & CStr(Month(tDat)), 2)
3        Set Sh = ThisWorkbook.Worksheets(ShName)
        If Year(tDat) <> Sh.[c4].Value Then
            Exit For
        Else
            Sh.Cells(Cls.Row + 4, 3 + Day(tDat)).Interior.ColorIndex = 35
        End If
GPE:    Next J
 Next Cls
Err_:           Exit Sub
LoiCT:
    If Err = 9 Then
        GoTo GPE
    ElseIf Err = MyErr Then
        MsgBox Err:                 GoTo Err_
    Else
        MsgBox Err, , Erl:          Resume Next
    End If
End Sub
 
Hay quá bạn ơi! Thế nhưng mình vẫn còn chút vướng mắc:
- tháng 1, tháng 3...(hình như là những tháng lẻ) không có làm mà vẫn tô màu hết cột ngày 31.
-Vì là hợp đồng ngắn hạn nên trong 1 năm mỗi người đều phải ký 2 hợp đồng, mỗi hợp đồng cách nhau khoảng 1 tháng, mình đã chèn thêm 2 cột ngày tháng bạn cũng giải quyết như vậy giùm mình với.
- Vì sheet DATA có những cột thông tin làm hợp đồng lao động, trước mình xóa đi cho dễ nhìn nay chèn lại nhiều cột đằng trước cột ngày tháng thì macro không còn chạy được nữa, bạn có thể giúp mình vụ này không?
-sheet GPE, link, những ô bạn tô màu là có ý đồ gì không bạn.
Thân ái!
 
Lần chỉnh sửa cuối:
[thongbao](-) Vì là hợp đồng ngắn hạn nên trong 1 năm mỗi người đều phải ký 2 hợp đồng, mỗi hợp đồng cách nhau khoảng 1 tháng, mình đã chèn thêm 2 cột ngày tháng bạn cũng giải quyết như vậy giùm mình với.[/thongbao]
 
Lần chỉnh sửa cuối:
[Bài đăng lại] . . . . (Chả hiểu sao lại không thấy ở đây?)

(-) Bạn kiểm tra theo các trang tính của file.

(*) Chuyện này không khó, nêu biết trước được bạn sẽ dời 4 cột này về đâu ở đằng sau?

(?) Còn iêu cầu thứ 2 thì làm theo tháng hay làm theo cả năm? & nếu vậy cần có danh sách công ấn định trước của mỗi người theo từng tháng; Danh sách đó sẽ ở đâu trong file & sẽ như thế nào?
 
Lần chỉnh sửa cuối:
Cám ơn bạn hoang2013 rất nhiều, nhờ bạn nhiệt tình giúp đỡ, ý tưởng bảng kết hợp hợp đồng, chấm công, lương công trường dần thành hình (như file mình đính kèm dưới đây).
Tuy nhiên do sự yếu kém về VBA nên có 1 số vấn đề mình chưa tự xử lý được, mong bạn giúp đỡ:
- Mình chèn thêm cột ở sheet DATA rồi đấy, lại phải nhờ bạn chỉnh lại macro ( mình còn muốn chèn thêm hàng nữa cơ nhưng sợ loạn cái bảng).
- Mình chèn thêm sheet bảng lương và bảng thanh toán lương (mình mới ví dụ cho tháng 1) có vẻ không ảnh hưởng đến macro. Nhưng mà workbook này có 12 sheet công, 12 sheet lương, 12 sheet thanh toán lương,1 sheet data tổng cộng 37 sheet có phải quá ư công kềnh? bạn có thể góp ý cho mình ý tưởng nào cho gọn bớt không.
- Nếu được bạn có thể chỉ cho mình cách tự chỉnh macro nhửng thứ nhỏ nhỏ như thêm hàng thêm cột vào sheet DATA, sheet chấm công, không mấy cái nhỏ nhỏ cứ làm phiền bạn thật ngại quá.
Thân ái.
 
Lần chỉnh sửa cuối:
Chỉnh macro theo cột rồi đây:

Bạn chép hết nội dung này đè lên cái cũ & chạy thử
PHP:
Option Explicit
Const Col As Byte = 8                                   '*'
Const MyErr As Double = 1 + vbObjectError + 512
Sub NgayCQ()
 Dim Sh As Worksheet, Cls As Range
 Dim SoNgay As Integer, J As Integer, MyColor As Byte   '*'
 Dim fDat As Date, tDat As Date, lDat As Date           ' '
 Dim ShName As String
 On Error GoTo LoiCT
 
1 For Each Sh In ThisWorkbook.Worksheets
    If Left(Sh.Name, 1) = "T" And IsNumeric(Right(Sh.Name, 1)) Then
        J = Sh.[c8].CurrentRegion.Rows.Count
        Sh.[c8].Resize(J, 32).Interior.ColorIndex = 0
    End If
2 Next Sh
 Sheets("Data").Select
 
 For Each Cls In Range([B4], [B4].End(xlDown))
    fDat = Cls.Offset(, Col + 2).Value                  '*'
    lDat = Cls.Offset(, Col + 3).Value                  '*'
    If Year(lDat) > Year(fDat) Then lDat = DateSerial(Year(fDat), 12, 31)
    If lDat > Date Then lDat = Date
    SoNgay = lDat - fDat
    If SoNgay > 365 Then SoNgay = 365
    For J = 0 To SoNgay
        tDat = J + fDat
        ShName = "T" & Right("0" & CStr(Month(tDat)), 2)
        Set Sh = ThisWorkbook.Worksheets(ShName)
        If Year(tDat) <> Sh.[c4].Value Then
            Exit For
        Else
            MyColor = 34 + Month(tDat) Mod 6
            Sh.Cells(Cls.Row + 4, 3 + Day(tDat)).Interior.ColorIndex = MyColor
3        End If
GPE0:    Next J
    fDat = Cls.Offset(, Col + 4).Value                  '*'
    lDat = Cls.Offset(, Col + 5).Value                  '*'
    If Year(lDat) > Year(fDat) Then lDat = DateSerial(Year(fDat), 12, 31)
    If lDat > Date Then lDat = Date
    SoNgay = lDat - fDat
    If SoNgay > 365 Then SoNgay = 365
        For J = 0 To SoNgay
            tDat = J + fDat
            ShName = "T" & Right("0" & CStr(Month(tDat)), 2)
7            Set Sh = ThisWorkbook.Worksheets(ShName)
8            If Year(tDat) <> Sh.[c4].Value Then
                Exit For
            Else
                MyColor = 34 + Month(tDat) Mod 6
                Sh.Cells(Cls.Row + 4, 3 + Day(tDat)).Interior.ColorIndex = MyColor
            End If
GPE1:    Next J
 Next Cls
Err_:           Exit Sub
LoiCT:
    If Err = 9 Then
        If Erl <= 3 Then GoTo GPE0 Else GoTo GPE1
    ElseIf Err = MyErr Then
        MsgBox Err:                 GoTo Err_
    Else
        MsgBox Err, , Erl:          Resume Next
    End If
End Sub

Những mong là khỏi gởi file lên.

Còn chuyện thêm dòng là thêm làm sao?
Mình biết rằng có thể có những người chỉ hợp đồng lần I trong năm (không có lần sau) hay ngược lại là có người chỉ tuyển hợp đồng lần sau trong năm

Như vậy sẽ phải có danh sách tất cả công nhân viên của 2 lần hợp đồng trong mọi trang tính.

Thêm 1 chú í nữa quan trọng là: Tên các trang tính phát sinh sau không thể là TT01,. . . TT11, TT12
Mà phải là 01TT, . . . 11TT, 12TT
 
Chép đè đoạn CODE mới chạy ok lắm bạn. Từ nay bạn khỏi gửi file lên cho tốn dung lượng, có code mình chép lên là chạy ha
- Chuyện thêm dòng đó chỉ là khi mình điều chỉnh form mẫu, chứ những vấn đề chính bạn đã giải quyết giùm mình rồi. Bởi vì khi mình thêm 1 hàng ở trên nhân viên số 1 ở sheet data hoặc ở sheet chấm công thì macro không còn chuẩn nữa (vấn đề này bạn không cần quan tâm cũng được vì cơ bản mọi thứ đã ổn)
- Bạn nói chính xác là phải có đủ nhân viên ở mọi trang tính, vấn đề này theo mình nghĩ là phải chỉnh thủ công ở bảng chấm công, khi in ấn dấu bớt những NV không làm trong tháng đó, bạn nghĩ sao...
- Trang tính phát sinh đặt tên là 01TT thay vì TT01 mục đính là tránh nhầm lẫn với sheet T01 hay còn mục đích nào khác vậy bạn?
- Mình chỉ hơi ngại là nếu phát sinh thêm 1 dòng hay 1 cột nữa chả lẽ lại phải lên nhờ bạn chỉnh giùm nên mình hỏi cách chỉnh CODE là vì vậy, vấn đề này có khó không bạn.
Thân.
 
Mình làm xong file này tối qua, Bạn vận hành & cho ý kiến cuối cùng.

1./ Code đã thu gọn 2 trong 1: Làm luôn chuyện tô màu & ghi công án chừng cho tất cả các ngày trong hợp đồng & trừ thứ 7 hay CN

2./ "phải chỉnh thủ công ở bảng chấm công, khi in ấn dấu bớt những NV không làm trong tháng đó, bạn nghĩ sao..."
Làm vậy sẽ an toàn hơn với bạn, tuy có mất thời gian thêm đôi chút.

3./ "nếu phát sinh thêm 1 dòng hay 1 cột nữa chả lẽ lại phải lên nhờ bạn chỉnh giùm nên mình hỏi cách chỉnh CODE là vì vậy, vấn đề này có khó không bạn."
Thì bạn đối chiếu giữa macro file cũ & mới này (dòng phát biểu về Const í) sẽ nghiệm ra vấn đề thôi;

4./ 2 bảng lương & tiền công thì bạn chọn từng tháng lần lượt in thôi;
Mình không có máy in để thử cho bạn, nên không dám viết tự động in hết 12 tháng cho bạn được.

5./ Rất vui nếu được hỗ trợ bạn trong thời gian tới có gì đó phát sinh
 
Lần chỉnh sửa cuối:
Chào bạn hoang2013, Cám ơn bạn đã giúp đỡ mình nhiệt tình. Mình có vài điều muốn nói như sau:
1./ Code 2 trong 1 của bạn chạy rất chuẩn, tuy nhiên không hiểu sao lần này chạy macro lâu hơn hẳn những lần trước (có lẽ là do macro khá dài hả bạn). Vì ở công trường mình làm cả T7, CN bạn có thể chỉ mình sửa CODE chỗ nào không.
2./Chỉnh thủ công bảng chấm công và bảng lương thì mình hoàn toàn đồng ý, nhưng nếu viết CODE nhân viên nào không làm trong tháng đó thì ẩn đi liệu có khả thi?
3./ Mình đang đối chiếu 5 đoạn CODE từ đầu bạn giúp mình đến giờ hi vọng sẽ biết được nhiều điều, nhưng vì trình VBA mình còn kém nên...
4./ Mình cài add in "print multiple sheets" có thể in nhiều sheet cùng lúc, nếu làm nhiều bảng lương in 1 phát luôn nhưng workbook cồng kềnh. Cách làm của bạn thì quá gọn dĩ nhiên bảng lương thì vẫn phải hiệu chỉnh "tháng" rồi in từng sheet một, có cách nào tối ưu in hơn không bạn.
Bạn đã quá nhiệt tình giúp đỡ, mình khó có thể đòi hỏi hơn. Tuy nhiên nếu bạn có thời gian mình cũng xin trình bày ý tưởng cho file excel được hoàn thiện.(Mình có thêm thắt file đôi chút, bạn xem qua nhé)
Thân chào.
 
Lần chỉnh sửa cuối:
Chào bạn hoang2013, Cám ơn bạn đã giúp đỡ mình nhiệt tình. Mình có vài điều muốn nói như sau:
1./ Code 2 trong 1 của bạn chạy rất chuẩn, tuy nhiên không hiểu sao lần này chạy macro lâu hơn hẳn những lần trước (có lẽ là do macro khá dài hả bạn). Vì ở công trường mình làm cả T7, CN bạn có thể chỉ mình sửa CODE chỗ nào không.

Đảm bảo là không lâu hơn macro lần gần kế do chỉ thêm 1 lệnh đánh dấu đi làm (từ T2 đến T6) mà thôi.
File của bạn xài nhiều công thức quá đấy thôi. Mà bạn có xài Link đến các file khác không đó?
Hiện giờ số công khoảng ~24 công; Nếu thêm cả T7 & CN nữa thì công sẽ là 30 ư?
Về việc này chắc bạn nên thay đổi bằng tay thôi . Dời công đi làm từ thứ này sang thứ khác & chỉ ít thôi mà.
Chứ chỉ cho bạn thay trong macro thì khi đó công dư bạn cũng phải xóa bằng tay, cũng tốn thời gian vậy thôi.

2./
2.1. Chỉnh thủ công bảng chấm công và bảng lương thì mình hoàn toàn đồng ý, nhưng nếu viết CODE nhân viên nào không làm trong tháng đó thì ẩn đi liệu có khả thi?
2.2. Ý tưởng cho file excel được hoàn thiện.(Mình có thêm thắt file đôi chút, bạn xem qua nhé).
Bạn cần chờ & cho biết cần in các trang T01..T12 hay chỉ trang bảng lương thôi?
& mình sẽ xem file ngay sau đây


3./ ...
4./ Mình cài add in "print multiple sheets" có thể in nhiều sheet cùng lúc, nếu làm nhiều bảng lương in 1 phát luôn nhưng workbook cồng kềnh. Cách làm của bạn thì quá gọn dĩ nhiên bảng lương thì vẫn phải hiệu chỉnh "tháng" rồi in từng sheet một, có cách nào tối ưu in hơn không bạn.
Đã nói với bạn rồi, Mình không thể viết "chay"; Bạn có thể nhờ người khác trên Cộng đồng giúp việc này.
 
Lần chỉnh sửa cuối:
Chào buổi tối bạn Hoang2013!
1./Vấn đề công, suy nghĩ lại gì thì gì chừa T7, CN lại như bạn vẫn hợp lí hơn cả...Tại sao macro chạy chậm để mình xem lại công thức và link chắc có vấn đề.
2./Phục vụ làm chứng từ vì vậy mình in tất cả hợp đồng lao động, toàn bộ bảng chấm công và bảng lương tất cả 12 tháng, nhiều trang tính mà phải chỉnh thủ công mình nghĩ cũng ngốn thời gian nhỉ (chưa kể mình phải làm nhiều công trường giống như ví dụ)
3./Xin lỗi bạn Hoàng mình biết bạn ko viết "chay" được mà, ý mình hỏi bạn nên làm như thế nào? Theo như Bạn đã trả lời, chắc chắn sắp tới mình sẽ đăng câu hỏi để các cao thủ trên diễn đàn trợ giúp.
4./ À cho mình hỏi hình thức chỉ có 1 bảng giống như sheet CTLg ta chỉ cần hiệu chỉnh tháng là bảng tính hiệu chỉnh theo thì gọi là gì.
Cám ơn bạn, chúc buổi tối vui vẻ.
 
A. Các bước thử nghiệm để tăng tốc cho macro gồm:
1./ (Tại trang ‘Data’): Cột [A] ta thay công thức này đi (=> Value)
2./ Tại cột [C] của các trang tính họ ‘T’ (đang có công thức VLOOKUP()) ta nên đề câu lệnh chuyển hết chúng sang dạng Value
Có thể chuyển chúng chỉ ngay lần chạy đầu; Sau đó vô hiệu hóa dòng lệnh đó trong macro đi
Cần thêm 1 dòng lệnh vô đoạn Code
PHP:
1 For Each Sh In ThisWorkbook.Worksheets
    If Left(Sh.Name, 1) = "T" And IsNumeric(Right(Sh.Name, 1)) Then
        J = Sh.[c8].CurrentRegion.Rows.Count
        Sh.[c8].Resize(J, 32).Interior.ColorIndex = 0
        Sh.[d8].Resize(J, 31).Value = ""
    End If
2 Next Sh
(Vô hiệu hóa bằng dấu nháy đơn ở đầu & cuối dòng lệnh muốn vô hiệu hóa;
Chuyện này có thể xài từ ‘Rem’ nếu bạn thích)
3./ Cột [D] trang ‘CTLg’ thay vì VLOOKUP() bạn có thể xài công thức khác như =DATA!R4 (cho ô [D6]; . . . . (Tham khảo thêm tại cột [C] của trang ‘Luong’

B Vấn đề in ấn toàn bộ các trang tính
Mình đã hứa sẽ cùng bạn tiếp tục trong những ngày tới để ẩn đi những dòng không dữ liệu.

C” chỉ cần hiệu chỉnh tháng là bảng tính hiệu chỉnh theo thì gọi là gì?
Mình chưa nghĩ ra là gì trong những cụm từ sau:
‘Cập nhật’, ‘Cập nhật số liệu tháng’, ‘Làm tươi dữ liệu’, . . . .
Tựu chung nó là 1 macro sự kiện gắn với ô có ‘Validation’ để chọn tháng. Macro này có nhiệm vụ thay mới số liệu của cột [E] trang tính này theo số liệu cột [AL] của trang tính lien quan đến tháng được chọn.

Chúc bạn ngày vui & hiệu quả!
 
Đây là macro sự kiện đã được bổ sung để ẩn các dòng không dữ liệu về công.

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [O2]) Is Nothing Then
    Dim ShName As String
    Dim Sh As Worksheet, Cls As Range, Arr()
    Dim J As Integer, Rws As Long
    
    Rws = [c6].CurrentRegion.Rows.Count
    Rows("6:" & Rws).Hidden = False
    ShName = "T" & Right("0" & CStr(Target.Value), 2)
    Set Sh = ThisWorkbook.Worksheets(ShName)
    Arr() = Sh.[c8].Resize(Sh.[c8].CurrentRegion.Rows.Count, 33).Value
    Application.ScreenUpdating = False
    For Each Cls In Range([c6], [c6].End(xlDown))
        For J = 1 To UBound(Arr())
            If Cls.Value = Arr(J, 1) Then
                If Arr(J, 33) > 0 Then
                    Cls.Offset(, 2).Value = Arr(J, 33)
                Else
                    Cls.EntireRow.Hidden = True
                End If
            End If
        Next J
    Next Cls
    Application.ScreenUpdating = True
 End If
End Sub
 
Web KT
Back
Top Bottom