Tham chiếu giữa hợp đồng và bản chấm công (1 người xem)

Liên hệ QC

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

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:
[TABLE="width: 414"]
[TR]
[TD]NVK00[/TD]
[TD]Nguyễn Văn Khánh[/TD]
[/TR]
[TR]
[TD]NVT00[/TD]
[TD]Nguyễn Văn Thái[/TD]
[/TR]
[TR]
[TD]NVT01[/TD]
[TD]Nguyễn Văn Thái[/TD]
[/TR]
[TR]
[TD]NVT02[/TD]
[TD]Nguyễn Văn Thuận[/TD]
[/TR]
[TR]
[TD]NVT03[/TD]
[TD]Nguyễn Văn Tín[/TD]
[/TR]
[TR]
[TD]NVT04[/TD]
[TD]Nguyễn Tú Vũ Tuấn[/TD]
[/TR]
[TR]
[TD]NXN00[/TD]
[TD]Nguyễn Xuân Nhật[/TD]
[/TR]
[TR]
[TD]PXT00[/TD]
[TD]Phan Xuân Thúy[/TD]
[/TR]
[TR]
[TD]TMH00[/TD]
[TD]Thiều Vũ Minh Hùng[/TD]
[/TR]
[TR]
[TD]TTL00[/TD]
[TD]Thiều Thị Thanh Loan[/TD]
[/TR]
[TR]
[TD]TVN00[/TD]
[TD]Trương Văn Nam[/TD]
[/TR]
[TR]
[TD]TVT00[/TD]
[TD]Trương Văn Tài[/TD]
[/TR]
[TR]
[TD]TVT01[/TD]
[TD]Trương Văn Thiều[/TD]
[/TR]
[TR]
[TD]TVT02[/TD]
[TD]Trương Văn Tưởng[/TD]
[/TR]
[TR]
[TD]TJV00[/TD]
[TD]Trần Vịnh[/TD]
[/TR]
[/TABLE]

(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
 
Cám ơn bạn hoang2013. Mình mới tiền hành vài chiêu Các bước thử nghiệm để tăng tốc cho macro, quả thật là macro chạy mượt hơn nhiều rồi.
Thế nhưng phần ẩn dòng trong bảng chấm công mình làm không được (Mình đã thử thêm macro worksheet_Change vào sheet 1 nhưng không thành công). Bạn kiểm tra giùm mình chút nha
 
Lần chỉnh sửa cuối:
Cái macro sự kiện đó là giành cho trang 'CTLg', không là của 12 trang họ nha "T"

Bạn chép đè lên macro cũ & kiểm tra kết quả dữ liệu của các tháng.

Còn macro cho họ nhà "T" cần có í kiến của bạn mới tiến hành viết được:

Điều cần hỏi bạn ở đây là bạn sẽ in theo đường hướng nào, 1 lúc (tự động in liền 1 mạch 12 trang) hay in từng trang.

Nếu cần macro ẩn dòng trước khi in từng trang thì mình sẽ cố giúp bạn chuyện ẩn dòng bằng macro sự kiện khi mở/kích hoạt 1 trong 12 trang trính dòng "T".

Còn nếu bạn cần in 1 loạt thì sẽ phải viết các lệnh ẩn dòng trong macro in ấn mà bạn sẽ được ai đó giúp.

Còn chuyện in hàng loạt các hợp đồng LĐ, mình cho rằng bạn nên in như in thư trộn trong Word cũng được mà.
 
Mình đã dán code vào sheet CTLg, kết quả là ...mỹ mãn. Nhưng mà.....
Mình mới kiểm tra lại, những NV ko làm trong tháng nhưng trong trang "CTLg" vẫn có công, mặc dù dòng đó đúng là đã bị ẩn đi (mình để ý trang "Luong" thấy lạ nên unhide mấy dòng trong trong "CTLg" mới thấy), bạn kiểm tra lại CODE nhé.

Mình cứ tưởng là dán vào sheet chấm công, vì bảng chấm công cũng không thể để những người không làm mà in ra. Bạn giúp mình đoạn CODE cho 12 trang họ nhà "T" nữa nha:
- Hiện tại mình đang sử dụng addin (đính kèm) để in 1 loạt nhiều trang tính (nhưng hơi phiền cái là chỉ có trang hiện hành, bảng lương thì chỉ in được 1 tháng) bạn load về dùng thử xem có chỉnh được CODE không nha.
- Mình muốn in 1 loạt 12 bảng chấm công ra luôn (ví dụ nếu công trường nào không làm tháng 11, 12 có phải xóa 2 trang đó đi là ok ko?)
- Mình nghĩ nếu mỗi sheet họ "T" bạn dán 1 macro sự kiện ẩn dòng gần giống như macro ở trang "CTLg", thì form trang "T" đã chuẩn ngày từ đầu không can thiệp gì đến addin in hàng loạt kia liệu đó có phải là phương án khả thi?

Chuyện in HĐ thì mình thấy dùng excel tiện hơn, như cái Modul 11 đó, bạn để ý sẽ thấy, bạn xem giùm mình dùng cái đó ổn không ha.
* À bạn hoang2013 ơi, có cái này quan trọng mà mình quên mất, ngày lễ mà còn làm thì BỊ PHẠT mất, bạn chỉnh lại CODE chấm công giùm mình nha.

Thân.
 
Lần chỉnh sửa cuối:
Mình đã dán code vào sheet CTLg,. . Nhưng mà.....
Mình mới kiểm tra lại, những NV ko làm trong tháng nhưng trong trang "CTLg" vẫn có công, mặc dù dòng đó đúng là đã bị ẩn đi (mình để ý trang "Luong" thấy lạ nên unhide mấy dòng trong trong "CTLg" mới thấy), bạn kiểm tra lại CODE nhé.
Là tháng nào, có hiện tượng này để còn biết đường sửa.
- Mình nghĩ nếu mỗi sheet họ "T" bạn dán 1 macro sự kiện ẩn dòng gần giống như macro ở trang "CTLg", thì form trang "T" đã chuẩn ngày từ đầu không can thiệp gì đến addin in hàng loạt kia liệu đó có phải là phương án khả thi?
Bạn chép macro này đến 12 trang tính họ 'T'
Mã:
Private Sub Worksheet_Activate()
 AnDong Range([c8], [c8].End(xlDown))
End Sub

& tiếp theo là macro này trong Module1:
PHP:
Sub AnDong(Rng As Range)
 Dim Cls As Range
 Dim Rws As Long
 
 Rws = [c8].CurrentRegion.Rows.Count
 Rows("8:" & Rws).Hidden = False
 Application.ScreenUpdating = False
 For Each Cls In [c8].Resize(Rws)
    If Application.WorksheetFunction.CountBlank(Cls.Offset(, 1).Resize(, 31)) = 31 Then
        Rows(Cls.Row & ":" & Cls.Row).Hidden = True
    End If
 Next Cls
 Application.ScreenUpdating = True
End Sub

Thêm nữa, macro có tên sau:
Mã:
Sub RaiCongThangGiua()
' . . . . . '
End Sub
đang là dư & bạn nên xóa bỏ macro này trong module1

Cuối cùng:
Đây là macro sự kiện để ẩn dòng của trang tính 'Luong'
PHP:
Private Sub Worksheet_Activate()
 Dim Rw As Long, J As Long
 
 Rows("7:999").Hidden = False
 For J = 999 To 6 Step -1
    With Cells(J, "C")
        If Left(.Value, 1) = "C" And Right(.Value, 2) = "ng" Then
            Rw = .Row:      Exit For
        End If
    End With
 Next J
 For J = 7 To Rw
    If Cells(J, "D").Value < 0.09 Then
        Cells(J, "D").EntireRow.Hidden = True
    End If
 Next J
 
End Sub


* À bạn ơi, có cái này quan trọng mà mình quên mất, ngày lễ mà còn làm thì BỊ PHẠT mất, bạn chỉnh lại CODE chấm công giùm mình nha. Thân.
Về các ngày nghĩ lễ thì sẽ phải thế này:

1./ Thủ tướng hay dời ngày nghỉ lễ tùy theo ngày đó gần ngày T7 hay chủ nhất cỡ nào

2./ Vã chăng, trong có có gần phân nữa là ngày âm lịch

Do VBA không làm việc trực tiếp với ngày âm lịch, nên chuyện này bước đầu bạn thực hiện bằng tay.
Sau khi đã hoàn chỉnh file, ta sẽ bàn tiếp chuyện này.
Trên diễn đàn cũng có 1 số bảng chấm công chừa ngày lễ trong năm, nhưng là những bảng chấm công thực của các cơ quan hành chính sự nghiệp hay doanh nghiệp Nhà nước.
Bạn có thể tìm & tham khảo nếu rỗi.
 
Lần chỉnh sửa cuối:
Là tháng nào, có hiện tượng này để còn biết đường sửa.
-Tháng nào có NV ko làm cũng bị hết bạn, bạn cứ nhìn sheet "Luong" là bạn thấy mấy NV ẩn bên sheet "CTluong" cũng có công hết, hoặc bạn unhide những NV bị ẩn trong sheet "CTLg", hoặc bạn nhìn tổng số tiền sẽ thấy con số quá đáng liền...(bạn load file đính kèm của mình xem sẽ rõ)
-Mình chép macro sự kiện ẩn dòng vào trang "Luong" không thấy có sự khác biệt, không biết là macro này không hoạt động hay là trục trặc từ vấn đề mình vừa nêu trên.

Bạn chép macro này đến 12 trang tính họ 'T'...& tiếp theo là macro này trong Module1:...
-Macro hoạt động tốt bạn à, khi xem từng bảng cũng như khi mình dùng add in đã in 1 loạt (ẩn sạch những NV ko có công)
-Duy chỉ có điều bên dưới bảng công mình ghi thêm khoảng 5 hàng: ký hiệu chấm công, người lập, thủ trưởng ký... thì cũng bị ẩn, (khi mình unhide lên dự liệu 1 số ô bị xóa) bạn điều chỉnh CODE giúp mình chút nha

Mã:
Sub RaiCongThangGiua()
' . . . . . '
End Sub
-Mình đã xóa


Cuối cùng:
Đây là macro sự kiện để ẩn dòng của trang tính 'Luong'
- Mình không thấy macro này tác động tí nào

Về các ngày nghĩ lễ thì sẽ phải thế này:
-Mình cũng có thấy 1 số bảng chấm công trên diễn đàn họ chừa ngày lễ, cách làm của họ cũng chuyển hết ngày lễ về ngày dương, vì số lượng ngày lễ cũng không nhiều lắm nên họ tạo "list ngày lễ"...., vấn đề này mình sẽ đọc thêm
Thân bạn.
PS: Bạn load file mình gửi về vào sheet "CTLg" và "Luong" sẽ thấy ngày vấn đề lương, còn khi bạn chạy macro sẽ thấy vấn đề ở sheet họ "T" (mình mới DÁN macro Cho sheet T01,T02,T03
 
Lần chỉnh sửa cuối:
Có lẽ phải đưa file mới lên rồi

Bạn thao tác với file mới này & góp cho mình thêm í kiến để hoàn chỉnh thêm --=0

(Chiều nay mình sẽ tháo file đã đính kèm ở các bài trước bài này)
 
Lần chỉnh sửa cuối:
Bạn thao tác với file mới này & góp cho mình thêm í kiến để hoàn chỉnh thêm --=0

(Chiều nay mình sẽ tháo file đã đính kèm ở các bài trước bài này)
Mình test file mới của bạn luôn nè:
Mình mới kiểm tra lại, những NV ko làm trong tháng nhưng trong trang "CTLg" vẫn có công, mặc dù dòng đó đúng là đã bị ẩn đi (mình để ý trang "Luong" thấy lạ nên unhide mấy dòng trong trong "CTLg" mới thấy), bạn kiểm tra lại CODE nhé.
vấn đề này ok rồi bạn, nhưng....
1./ Bạn mở trang "CTLg" cập nhật tháng 8 thì bạn sẽ thâý lòi ngay đâu ra 1 ông ko có tên mà có số công bằng đúng mấy ông trên cộng lại!$@!! (mình test có vẻ khi số NV trong tháng <=10 thì xảy ra hiện tượng này)

2./ Nếu tăng số NV của công trường lên ( mình test thử với 45 người) đôi khi "CTLg" ẩn luôn cả dòng tổng.

3./ trang "CTLg" cập nhật đến tháng không có nhân công nào làm đôi khi báo lỗi"run time eror 1004, bôi vàng ở dòng "[b6].Resize(W, 4).Value = dArr()" CODE trang "CTLg".

4./ Bảng "Luong" thì ẩn OK rồi, nhưng nếu bảng "CTLg" sai ví dụ như ở tháng 8 thì bảng "luong" cũng sai theo y chang.

Đôi chút về form:
- Ở bảng công học "T" khi ẩn dòng đi thì số thứ thự không liên tục 1,2,3... nữa. Bạn chỉnh được số thứ tự liên tục được như bảng trong "CTLg" thì đẹp
-
-Duy chỉ có điều bên dưới bảng công mình ghi thêm khoảng 5 hàng: ký hiệu chấm công, người lập, thủ trưởng ký... thì cũng bị ẩn, (khi mình unhide lên dự liệu 1 số ô bị xóa) bạn điều chỉnh CODE giúp mình chút nha
có thể điều chỉnh vấn đề này ở trang họ "T" được không bạn?
-Bạn lập cho mình ô tổng lương 12 tháng trong sheet "CTLg" luôn được không ạ (ô này chỉ để theo dõi cho biết chứ ko in ra)

Mình mới test có đôi điều nói với bạn vậy (không chừng test tiếp tại khám phá thêm lỗi nữa --=0)
PS:File của mình thì cồng kềnh có lẽ không nên đưa lên nữa, hay là cứ thao tác trên file bạn gửi như thế này cho dễ hiểu, như vậy bạn chịu khó xóa những file gửi trước đi vậy cho đỡ tốn dung lượng.(Cái nào mình cũng load về để ngâm cứu hết rồi bạn xóa đi thoải mái)
 
Lần chỉnh sửa cuối:
Mình test file mới của bạn luôn nè:
Vấn đề này ok rồi bạn, nhưng....
1./ Bạn mở trang "CTLg" cập nhật tháng 8 thì bạn sẽ thâý lòi ngay đâu ra 1 ông ko có tên mà có số công bằng đúng mấy ông trên cộng lại!$@!! (mình test có vẻ khi số NV trong tháng <=10 thì xảy ra hiện tượng này)

Bạn thử với macro sự kiện này ở trang 'CTLg':
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, Arr()
    Dim J As Long, Rws As Long, W As Long
    
    ShName = "T" & Right("0" & Target.Value, 2)
    Set Sh = ThisWorkbook.Worksheets(ShName)
    Rws = Sh.[C999].End(xlUp).Row               '*'
    Arr() = Sh.[c8].Resize(Rws, 33).Value
    ReDim dArr(1 To 55, 1 To 4)
    [b6].Resize(50, 4).Value = dArr()
    Rows("8:60").Hidden = False
    For J = 1 To UBound(Arr())
        If Arr(J, 1) = "" Then Exit For         '*'
        If Arr(J, 33) > 0 And Arr(J, 33) < 53 Then
            W = W + 1:                  dArr(W, 1) = W
            dArr(W, 2) = Arr(J, 1):     dArr(W, 3) = 26 * 10 ^ 4
            dArr(W, 4) = Arr(J, 33)
        End If
    Next J
    [b6].Resize(W, 4).Value = dArr()
    Rows(W + 6 & ":60").Hidden = True
 End If
End Sub
 
Hi bạn Hoang2013.
1./ Bạn mở trang "CTLg" cập nhật tháng 8 thì bạn sẽ thâý lòi ngay đâu ra 1 ông ko có tên mà có số công bằng đúng mấy ông trên cộng lại!$@!! (mình test có vẻ khi số NV trong tháng <=10 thì xảy ra hiện tượng này)
Vấn đề này ngon rồi bạn%#^#$. Nhưng...Lại có việc làm cho bạn đây:-=:
- Khi mình tăng thêm NV trong bảng DATA (ví dụ tăng thêm 5 NV là có tổng cộng 46 NV ) thì bảng chấm công họ "T" ok chấm rất đầy đủ, nhưng bảng lương thì bất di bất dịch vẫn chỉ hiện thị tối đa 41 NV như cũ, mình đã thử mọi cách mà không được chắc mấu chốt là ở đoạn CODE rồi.
Lại phiền bạn rồi.
Chúc bạn ngủ ngon.
 
Chắc phải thay đổi cách tổ chức dữ liệu cho thống nhất.

Hiện tại các trang tính họ "T" đang xài hàm VLOOKUP()

Nhưng trang 'CTLg' & 'Luong' thì không.

Vã lại, xài VLOOKUP() sẽ làm chương trình xử lí dữ liệu sẽ năng nề thêm.

Mình đề xuất giải pháp là:

Mỗi lần nhập mới (dù ít hay nhiều hoặc bớt người trong danh sách) ta làm nút lệnh để sau khi nhấp xong tại trang 'Data' ta bấm vô nó.
Khi đó danh sách CNV toàn bộ sẽ chuyển sang các trang tính còn lại có liên quan.

Khi đó, các dòng cần thiết bên dưới các trang tính cần có (như hàng tổng cộng hay người lập bảng, . . .) ta cần đảy xuống dưới xa tít & ẩn những dòng không có số liệu trên cúng đi

Tất nhiên cách này ta cũng phải có biện pháp để dữ liệu nhân viên không đè lên các phần cố định này: Định kì cần xem xét dòng cuối chứa phần cố định này.

(Có nghĩa là để nhẹ máy tính, ta cũng cần trả giá & đó là cái giá đáng trả lắm bạn!)

Thân.
 
Hi bạn hoang2013, cám ơn bạn trong thời gian qua đã dành thời gian quý báu để đồng hành, giúp đỡ mình nhiều.Mình cảm thấy làm phiền bạn nhiều quá cũng không nên

Đến nay cơ bản mình đã có đủ công cụ để áp dụng vào công việc của mình rồi (chấm công, lương đầy đủ, form cũng khá ổn), thế nên bây giờ mình sẽ áp dụng ngay để xuất bản 1 bộ hồ sơ chứng từ công trường xem thế nào.
Đến nay thì có 1 VĐ đau đầu nhất là ở trang "CTLg":
- Cho dù đã thống nhất cách tổ chức dữ liệu nhưng cứ thêm hay bớt NV là sheet "CTLg" báo lỗi macro ở dòng:Private Sub Worksheet_Change(ByVal Target As Range). Như vậy đến công trình khác có nhiều hay ít NV hơn (41 NV) thì ko áp dụng được nữa...Vấn đề kéo dài trang tính để dữ liệu không đè lên phần cố định như bạn nói cũng chưa nghĩ đến nếu ko giải quyết được vấn đề nêu trên
- 4 cột B,C,D,E đã fix, cho dù mình thay đổi, dùng hàm kiểu gì cũng không được... đơn giá/ngày 260.000 là ví dụ thôi giờ mình sửa không được thì cũng tiêu
- Thực sự nếu lập macro trang "CTLg" gặp trở ngại thì mình làm luôn 12 trang lương cho 12 tháng lấy dữ liệu từ 12 trang công qua thì đảm bảo OK luôn... nhưng thế thì "nông dân" quá bạn nhỉ.


Mong bạn giúp mấy vấn đề này nữa. (Mình cố gắng ngày làm 1 công trình)

Theo quan điểm của bạn thì cái nào dùng thủ công được mình sẽ làm tránh lạm dụng hàm không cần thiết để giảm tải (tạo thêm nút thì sợ nặng thêm, nên mình cứ thủ công copy, past value hoặc past link)

Chúc bạn 1 ngày làm việc vui vẻ
 
Lần chỉnh sửa cuối:
Bạn thử vận hành file này xem sao?

Những điểm khác biệt:

1./ Các trang họ "T" không chứa sẵn danh sách;
Chỉ khi chạy macro tô màu & chấm công thì mới có danh sách & danh sách này chỉ có ở các tháng có hợp đồng mà thôi.
Việc này bạn kiểm tra số liệu xem sao.

2./ Hiện tại toàn file ấn định tối đa 99 người CNV;
& như vậy các dòng "Tổng cộng. . " dưới các trang tính sẽ phải ờ cách dòng có số liệu đầu là trên 100 dòng.

2.1. Hiện các trang họ 'T' mình chưa kịp làm các dòng "tổng cộng,. . . "
Khi làm mình sẽ viết thêm đoạn lệnh ẩn đi các dòng không dữ liệu trong từng trang họ "T"

2.2 Khi CQ bạn tằng số người hơn 99 thì sẽ phải:
Tăng Const này lên & đồng thời dời các dòng "Tổng cộng,. . ." xuống tương ứng. (Để khỏi ẩn đi do macro thực hiện)

Mình tin rằng file này sẽ cải thiện tốc độ tính toán do không có nhiều hàm VLOOKUP() cũng như Link ,. . .

Chúc vui!
 
Lần chỉnh sửa cuối:
Hi bạn.
Những điểm khác biệt:
1./ Các trang họ "T" không chứa sẵn danh sách;
Chỉ khi chạy macro tô màu & chấm công thì mới có danh sách & danh sách này chỉ có ở các tháng có hợp đồng mà thôi.
Việc này bạn kiểm tra số liệu xem sao.
Hoan hô Ý tưởng về việc tự độngchạy danh sách, tuy nhiên tự động thì có tự động thật nhưng danh sách hiện lên không chính xác bạn à:
- Danh sách không hiện lên đủ NV, việc này bạn có thể thấy ngay khi chạy file bạn gửi (ở bảng chấm công tháng 4 trang "T04": 10 NV đầu bình thường, ngắt quãng ở NV thứ 11 thì bảng tính ẩn đi, từ NV thứ 12 tiếp tục làm thì bảng tính không ẩn đi nhưng cũng bỏ trống dữ liệu)
- Chỉ tô màu và chấm mùng 1 hàng tháng cho NV đầu tiên
Nhận xét: File cũ chấm chính xác hơn.

2./ Hiện tại toàn file ấn định tối đa 99 người CNV;
& như vậy các dòng "Tổng cộng. . " dưới các trang tính sẽ phải ờ cách dòng có số liệu đầu là trên 100 dòng.
2.1. Hiện các trang họ 'T' mình chưa kịp làm các dòng "tổng cộng,. . . "
Khi làm mình sẽ viết thêm đoạn lệnh ẩn đi các dòng không dữ liệu trong từng trang họ "T"
- Khi tăng số lượng NV mình không thấy họ "T" tô màu và chấm thêm chút nào
2.2 Khi CQ bạn tằng số người hơn 99 thì sẽ phải:
Tăng Const này lên & đồng thời dời các dòng "Tổng cộng,. . ." xuống tương ứng. (Để khỏi ẩn đi do macro thực hiện)
99 NV là quá nhiều rồi, dù sao Const này ở chỗ nào bạn chỉ giùm mình nhé
Dù sao file này được cái vô địch về chạy nhanh--=0.
Chúc buổi tối vui vẻ.
PS: Mình ngâm cứu CODE của bạn biết cách sửa để rải công chỉ trừ chủ nhật ra rồi, còn cái cụ chấm ngày lễ chắc phức tạp hơn hè.
 
Lần chỉnh sửa cuối:
Hi vọng file này số liệu sẽ chính xác. ;;;;;;;;;;; ;;;;;;;;;;; ;;;;;;;;;;;
 
Lần chỉnh sửa cuối:
HI, mình mới thử tăng thêm 20 NV nữa...nhưng không thành công.
Bớt người thì có vẻ ok nhưng thêm người thì mấy trang họ "T" chạy không chính xác bạn à.
Chúc buổi tối vui
 
HI, mình mới thử tăng thêm 20 NV nữa...nhưng không thành công.
Bớt người thì có vẻ ok nhưng thêm người thì mấy trang họ "T" chạy không chính xác bạn à.

Lần sau bạn nên mô tả là bạn đã thêm như thế nào; Thêm ngay người đầu là sai hay đấn người thứ mấy dẫn đến sai;

Từ "thành công" của bạn còn quá chung chung.

Mình thử thêm hơn 20 người nữa bạn kiểm xem sao.

Thời gian tiêu tốn cho các công đoạn như sau:
PHP:
Quá trình      Thời gian
Chuẩn bị         2.7656
Lập DS           2.9219
Điền công        9.3125
Ẩn trống        10.0313




(Sẽ tháo hết các file bài trước, thu hồi tài nguyên)
 
Lần chỉnh sửa cuối:
Hi Bạn Hoang2013. Cám ơn bạn vì phiên bản mới quá tuyệt vời!)(&&@@
- Ở trang học "T" cột B: số TT bỏ trống, mình ghi thủ công nhưng mỗi lần chạy lại thì bị xóa mất, chắc phải can thiệp CODE mới được. Bạn làm ơn chỉnh giúp mình nhé
PS: phiên bản này có dòng "PHP Code:" quá hay
Quá trình Thời gian
Chuẩn bị 2.7656
Lập DS 2.9219
Điền công 9.3125
Ẩn trống 10.0313
Một lần nữa cám ơn bạn. Chúc bạn có buổi tối chủ nhật vui vẻ/-*+/
 
Để có số thứ tự tại cột trong các trang họ "T", bạn làm như sau:

1./ Đổi câu lệnh này:
Mã:
Sh.[B8].Resize(J, 33).Value = ""
thành câu lệnh:
PHP:
Sh.[C8].Resize(J, 32).Value = ""

2./ Tại [B8] của các trang tính, ta nhập công thức:

=If(C8="","",N(b7)+1)

Sau đó copy xuống dưới đến đâu mà bạn chán thì dừng.
 
Quá tuyệt vời cho bài toán thuận chấm công, thanks bạn!
Theo bạn chủ đề bài toán ngược: Nghĩa là cho số công trong 1 tháng cụ thể ( ví dụ nhân viên A trong tháng 1 được 20 công), lập macro rải công ngẫu nhiên trong tháng đó
và chủ đề rải công ngày lễ (chữ "L") ta có cần bàn tiếp ko
Thân bạn.
 
Quá tuyệt vời cho bài toán thuận chấm công, thanks bạn!
Theo bạn chủ đề bài toán ngược: Nghĩa là cho số công trong 1 tháng cụ thể ( ví dụ nhân viên A trong tháng 1 được 20 công), lập macro rải công ngẫu nhiên trong tháng đó
và chủ đề rải công ngày lễ (chữ "L") ta có cần bàn tiếp ko
Thân bạn.

Vô lý thế, sao lại rải công ngẫu nhiên? đi ngày nào, làm ngày nào thì chấm công ngày đó mới đúng

Hay là làm ngược để tính người lý thuyết?
 
Hihi...
Tình hình là thế này, do thời gian gấp rút để giải quyết vấn đề kê khai thuế cho năm rồi nên mình đã làm bài toán ngược chi phí nhân công tại công trường (mấy đồng chí dưới công trường không có bảng công gì nộp về hết...):
-Chi phí nhân công công trường kê khai là 1.000.000.000 đ
-Mức giá mỗi công từ 200.000đ đến 300.000đ
-Công trường của mình có khoảng 50 nguời và nhiệm vụ của mình là lập 12 bảng công tương đương cho 12 tháng sao cho: Tổng chi phí nhân công đúng con số 1.000.000.000 mà mình đã kê khai ban đầu.
-Tính ngẫu nhiên ở đây là cho bảng công thêm hợp lý 1 chút.
Xin lỗi vì bài toán không giống ai+-+-+-+
 
Vô lý thế, sao lại rải công ngẫu nhiên? đi ngày nào, làm ngày nào thì chấm công ngày đó mới đúng
Hay là làm ngược để tính người lý thuyết?

Mình đã nêu ở bài nào đó ở đầu trong topic này: Đây là kiểu chấm công đối phó của các công ti "Xây dựng"
Ngõ hầu như trốn thuế doanh nghiệp, thuế thu nhập cá nhân hay TN doanh nghiệp,. . . .

__--__ __--__ __--__
(1) Theo bạn chủ đề bài toán ngược: Nghĩa là cho số công trong 1 tháng cụ thể ( ví dụ nhân viên A trong tháng 1 được 20 công), lập macro rải công ngẫu nhiên trong tháng đó
và (2) chủ đề rải công ngày lễ (chữ "L") ta có cần bàn tiếp ko

1. Mình đã hỏi bạn trước đây rằng cố định công hàng tháng hay sao; Nhưng bạn đang quan tâm đến vấn đề khác hơn nên còn bỏ ngỏ mà!

2. Chuyện này tiếp cũng không sao. Miễn là bạn cung cấp những thông số đầu vào (Cách mà bạn tiến hành lâu nay & v.v. . . ) -+*/ -+*/ -+*/
 
Theo bạn chủ đề (1) rải công ngày lễ (chữ "L") & bài toán ngược: (2) Nghĩa là cho số công trong 1 tháng cụ thể ( ví dụ nhân viên A trong tháng 1 được 20 công), lập macro rải công ngẫu nhiên trong tháng đó
ta có cần bàn tiếp ko

(1) Đến sáng nay mình đã viết xong cho bạn cách chấm công ngày lễ rồi đây; Bạn làm theo mình nha:

B1: Bạn đến trang 'Data': Nhập vô ô to tướng [AA2] nhóm từ "Ngày Lễ"
Tại ô dưới liền kề là công thức: =DATE('T01'!C4,1,1)
Tại ô [AA11] bạn lại nhập công thức tương tự để sao ô này thể hiện là ngày Quốc khách nước ta;
Các ô giữa 2 ô công thức này bạn cần rãi các ngày nghỉ lễ theo dương lịch; (Ví dụ, tại [AA8] là ngày 4/10/2016

B2: Bạn chép đè macro này lên toàn bộ cái cũ & chạy nó:
PHP:
Sub NgayCQ()
 Dim Sh As Worksheet, Cls As Range
 Dim SoNgay As Integer, J As Integer, MyColor As Byte, Tmr As Double
 Dim fDat As Date, tDat As Date, lDat As Date
 Dim ShName As String
 On Error GoTo LoiCT
1 'Xóa Du Lieu Cu:'
 Tmr = Timer()
 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
        Rows("8:99").Hidden = False
        Sh.[c8].Resize(J, 32).Interior.ColorIndex = 0
        Sh.[B8].Resize(J, 33).Value = ""
        Sh.Rows("8:99").Hidden = False
    End If
 Next Sh
 Sheets("Data").Select:             [r3].Value = Timer() - Tmr
2 'Lap Danh Sách CNV:'
 For Each Cls In Range([B4], [B99].End(xlUp))
    fDat = Cls.Offset(, Col + 2).Value
    lDat = Cls.Offset(, Col + 3).Value
    ChepTen Cls, fDat, lDat
    If Cls.Offset(, Col + 4).Value > 0 Then
        fDat = Cls.Offset(, Col + 4).Value
        lDat = Cls.Offset(, Col + 5).Value
        ChepTen Cls, fDat, lDat
    End If
 Next Cls
 [r4].Value = Timer - Tmr
3 'Chép Công Vô Các Tháng'
 For Each Cls In Range([B4], [B99].End(xlUp))
    fDat = Cls.Offset(, Col + 2).Value
    lDat = Cls.Offset(, Col + 3).Value
    GPE Cls, fDat, lDat
    
    If Cls.Offset(, Col + 4).Value > 0 Then
        fDat = Cls.Offset(, Col + 4).Value
        lDat = Cls.Offset(, Col + 5).Value
        GPE Cls, fDat, lDat
    End If
 Next Cls
 [r5].Value = Timer - Tmr
 Application.ScreenUpdating = False
4 'Ân Dòng Tróng Cua Các Trang "T01..T12":'
  For Each Sh In ThisWorkbook.Worksheets
    If Left(Sh.Name, 1) = "T" And IsNumeric(Right(Sh.Name, 1)) Then
        J = Sh.[c99].End(xlUp).Row + 2
        Sh.Rows(J & ":99").Hidden = True
    End If
 Next Sh
 [r6].Value = Timer() - Tmr
5 'Dièn Nghi Le:'
 For Each Cls In Sheets("Data").Range("NLe")
    ShName = "T" & Right("0" & CStr(Month(Cls.Value)), 2)
    Set Sh = ThisWorkbook.Worksheets(ShName)
    MyColor = Sh.Cells(SNV, "C").End(xlUp).Row
    SoNgay = 3 + Day(Cls.Value)
    For J = 8 To MyColor
        With Sh.Cells(J, SoNgay)
            If .Interior.ColorIndex > 9 Then
                .Value = "L"
                .Interior.ColorIndex = .Interior.ColorIndex + 1
            End If
        End With
    Next J
 Next Cls
 [r7].Value = Timer() - Tmr
 Application.ScreenUpdating = True
 Exit Sub
LoiCT:
 If Err > 0 Then MsgBox Error, , Err
End Sub

B3: Kiểm tra & thêm râu ria cần thiết.

Chúc thành công!
 
Hi Hoang2013, cám ơn bạn tiếp tục kiên nhẫn với mình.
Mình làm như bạn hướng dẫn và bị lỗi này (hình đính kèm), bạn xem giúp mình nhé:
1004
application-defined or object-defined error
 
Lần chỉnh sửa cuối:
Mình còn thiếu 1 công đoạn cuối của bước 1 nên sẩy ra lỗi;

Đó là vùng [AA3:AA11] bạn gán cho nó 1 cái tên như ghi trong macro ("NLe")
 
Bravo! Vậy là lời giải cho bài toán thuận đã hoàn thành. Quá trình đồng hành với bạn thật thú vị, cám ơn bạn rất nhiều.
Tiếp theo mình sẽ gửi dữ liệu đầu vào của bài toán nghịch lên cho bạn giải tiếp ha...--=0
Thân!
PS:
1./ Giờ mới nhớ ra, Cột mức lương theo ngày làm sao chỉnh được vậy bạn? Mình thay đổi thế nào chạy macro xong cũng quay lại như cũ. Bạn giúp mình nhé.
2./ Do không biết cách vận hành ở sheet "CTLg" nên Muốn biết tổng lương cả công trường trong 12 tháng:
- mình lập 1 cột tổng số công từng nhân viên = công tháng 1+công tháng 2...
- làm 1 cột đơn giá. Nhân lại... Tự thấy mình nông dân ghê--=0
 
Lần chỉnh sửa cuối:
Hỏi sao trả lời vậy mà thôi:
Muốn chỉnh thì sửa trong câu lệnh này:
PHP:
:     dArr(W, 3) = 26 * 10 ^ 4

Nhưng bạn muốn sửa mức lương ngàu đều khắp cho mọi người trong CTi, hay chỉ điều chỉnh cho 1 số ít người có bật thợ cao?

Ta sẽ có tổng quỹ tiền lương & tổng số công cũng sẽ có;

Vậy mức lương bình quân ngày cũng sẽ có; Hay bạn sẽ áp mức lương này cho tất thẩy mọi người?
 
Lần chỉnh sửa cuối:
Chờ bạn lâu quá & mình đã kịp làm cho bạn đơn giá lương ngày rồi đây.

Tuy đã có nhiều trang tính, nhưng chắc trước tiên bạn nên tạo thêm trang tính có tên là 'FuTro' như hình dưới đây:

a) Bạn dời vùng có tên 'NLe' sang đây

b) Thiết lập 12 công thức để có số liệu như cột [I:I]
& công thức để có tổng số công trong năm của công trình (Tại [I15]

c) Nhập tổng quỉ tiền lương vô [I16]

d) Chép hàm tự tạo này vô Module1:
PHP:
Function DGCong(TT As Double, TC As Double) As Long
 Dim Tmp As Integer
 Const M3 As Integer = 1000

 DGCong = ((TT / TC) \ M3)
 Tmp = DGCong Mod 10
 If Tmp > 2 And Tmp < 8 Then
    Tmp = 5
 ElseIf Tmp > 7 Then
    Tmp = 10
 Else
    Tmp = 0
 End If
 DGCong = (DGCong \ 10) * 10 + Tmp
 DGCong = DGCong * M3
End Function
e) Bạn áp công thức tại [I17] như trong hình

f) Sửa macro sự kiện trong trang 'CTLg' như sau
Mã:
    For J = 1 To UBound(Arr())
        If Arr(J, 1) = "" Then Exit For
        If Arr(J, 33) > 0 And Arr(J, 33) < 53 Then
            W = W + 1:                  dArr(W, 1) = W
            dArr(W, 2) = Arr(J, 1):     dArr(W, 4) = Arr(J, 33)
            dArr(W, 3) = Sheets("FuTro").Range("DGCg")
        End If
    Next J

Chúc vui & thành công!
 

File đính kèm

  • BCC TT.JPG
    BCC TT.JPG
    46.2 KB · Đọc: 12
Lần chỉnh sửa cuối:
Xin lỗi bạn vì sự chậm trế

Vì mình có việc để máy ở công ty không mang về nhà thành ra không phản hồi bạn sớm được...xin lỗi bạn!
1./ Mình làm theo ở sheet "Futro" theo mình hiểu ĐGCong là đơn giá trung bình phải không bạn? (thực ra đây không phải là đơn giá mình đã nói đến nhưng thực sự là 1 thông số rất hay)
2./ Ở trang "CTLg" đã sửa macro và chạy thì báo lỗi "run-time 1004" ở dòng như ở hình mình gửi... (Mình đã sửa được lỗi này khi nhìn thấy mũi tên nhắc nhở của bạn)+-+-+-+
-Theo mình hiểu thì macro này sẽ ghi mức lương của tất cả NV = ĐGCong phải không bạn..
-nhưng ý mình mình là hiển thị đơn giá công mỗi NV là con số chính xác (có khoảng 6 đơn giá công cho 1 công trường) -> khi nhân với số công ra số lương chính xác.
-Đơn giá nhân công như mình thường làm là tạo thêm 1 cột đơn giá ở sheet DATA, rồi ghi đơn giá từng người vào. 1 lần nữa Xin lỗi vì mình chưa gửi file lên kịp cho bạn hiểu ý đồ
3./ Tổng quỹ tiền lương mình muốn biết là con số bằng tổng của ô tổng lương hàng tháng ở trang "CTLg" khi cập nhật số liệu tháng từ 1 đến 12 ấy bạn
Chúc bạn có ngày làm việc vui vẻ và hiệu quả.
 
Lần chỉnh sửa cuối:
Hi bạn. Bạn đã xử lý bài toán quá gọn gàng, sạch sẽ rồi, File chạy êm ru.../-*+/

Mình chỉ còn yêu cầu chút xíu là ô tính tổng lương cả năm của toàn công trình. Để mình không phải cập nhật số liệu trang "CTLg" cho từng tháng, ghi số tổng ra máy rồi cộng lại thôi.

Thân,
 
Lần chỉnh sửa cuối:
Bạn thêm 1 dòng lệnh sau vô macro sự kiện tại trang 'CTLg', như sau

Bạn đã xử lý bài toán quá gọn gàng, sạch sẽ rồi, File chạy êm ru.../-*+/

Mình chỉ còn yêu cầu chút xíu là ô tính tổng lương cả năm của toàn công trình. Để mình không phải cập nhật số liệu trang "CTLg" cho từng tháng, ghi số tổng ra máy rồi cộng lại thôi.
Thân,
Mã:
 [COLOR=#d3d3d3]   If W Then
        [b6].Resize(W, 4).Value = dArr()
        Rows(W + 6 & ":" & SNV).Hidden = True[/COLOR]
        [B]Sheets("FuTro").[G1].Offset(Target.Value).Value = [N101].Value[/B]
 [COLOR=#d3d3d3]   End If[/COLOR]
 
Mã:
 [COLOR=#d3d3d3]   If W Then
        [b6].Resize(W, 4).Value = dArr()
        Rows(W + 6 & ":" & SNV).Hidden = True[/COLOR]
        [B]Sheets("FuTro").[G1].Offset(Target.Value).Value = [N101].Value[/B]
 [COLOR=#d3d3d3]   End If[/COLOR]
Cám ơn bạn!
1./ Mình cập nhật tháng xong thì đã có đủ cột lương ở trang "FuTro"và tính sum tổng nữa là ra.

- Thế nhưng khi thay đổi thông số, chạy lại macro hay thêm bớt công (ghi thủ công) ở trang họ "T" thì giá trị trong cột lương ở trên vẫn chưa cập nhật theo mà vẫn phải cập nhật lại từng tháng ở trang "CTLg" mới được.

- Vì mình muốn ngay khi thêm bớt công thì biết luôn giá trị tổng lương đã hiệu chỉnh, đủ thì thôi...chưa đủ thì lại thêm bớt công tiếp (mình đã áp đặt con số tổng từ trước)

- Phải cập nhật lại thì rất bất tiện để điều chỉnh. Điều này bạn có cách nào giúp mình không?

2./ Có 1 bất cập là khi báo cáo thu nhập thì bên thuế họ cần con số thu nhập của từng người trong năm (mình gửi kèm hình mới rồi mình làm thủ công để báo cáo).
Có vẻ bài toán tính tổng này khi làm thủ công thì đơn giản nhưng khi dùng CODE thì không đơn giản chút nào phải không bạn?

Chúc một buổi tối vui vẻ.
 
Lần chỉnh sửa cuối:
1./ Mình cập nhật tháng xong thì đã có đủ cột lương ở trang "FuTro"và tính sum tổng nữa là ra.

- Thế nhưng khi thay đổi thông số, chạy lại macro hay thêm bớt công . . . .
Điều này bạn hoàn toàn nên làm & bằng cách sau:

Với những trang tính họ "T", ngay tại ô [AJ8] của mỗi trang bạn xài 2 hàm VLOOKUP() lồng vô nhau để chúng cho bạn đơn giá người có mã ở cột [C] cùng dòng

& ô bên phải liền kề bạn áp CT phép nhân để có tiền lương của nhân viên đó trong tháng.

(Hai ô công thức này bạn có thể khoá lại;)

Sau đó bạn tiến hành chép xuống đến hàng cuối cột [C] có dữ liệu.

Động tác cuối cùng là: Lấy chuột tô chọn vùng (2 cột) vừa chép & Copy- dán Values; Động tác này ngỏ hầu giảm tải cho file của bạn. & bạn cũng nên làm thế vói cột ô bên trái của chúng.

2./ Có 1 bất cập là khi báo cáo thu nhập thì bên thuế họ cần con số th . . . .
Hình nhỏ quá, không xem được!
 
Điều này bạn hoàn toàn nên làm & bằng cách sau:

Với những trang tính họ "T", ngay tại ô [AJ8] của mỗi trang bạn xài 2 hàm VLOOKUP() lồng vô nhau ....
- Mình cũng có ý định lập hàm như bạn nói: AJ8=VLOOKUP(VLOOKUP(C8;vlook;6;FALSE);GPE_;3) [vlook: vùng mình đặt trong sheet DATA thôi]
- Mình chỉ không biết là dùng Code có hay hơn không: một phát ăn liền, lại không phải copy công thức.
- Và nếu dùng cách lập hàm, bạn hướng dẫn mình bước nữa là sau khi tính lương NV cho từng tháng thì lập bảng tổng hợp lương tất cả NV cả năm thì làm thế nào?

(Hai ô công thức này bạn có thể khoá lại;
Sau đó bạn tiến hành chép xuống đến hàng cuối cột [C] có dữ liệu.)
-Bạn có thể chỉ mình khóa công thức không cho sửa, không cho coi...và mục đích của việc khóa CT rồi chép xuống là để làm gì không?

Động tác cuối cùng là: Lấy chuột tô chọn vùng (2 cột) vừa chép & Copy- dán Values; Động tác này ngỏ hầu giảm tải cho file của bạn. & bạn cũng nên làm thế vói cột ô bên trái của chúng.
- Động tác này mình chưa hiểu lắm, Copy values rồi khi cập nhật lại số liệu giá trị không cập nhật được nữa...?
PS: Hình cách mình làm thủ công gửi lại cho bạn coi
 

File đính kèm

  • Screenshot (26).jpg
    Screenshot (26).jpg
    33.6 KB · Đọc: 8
Lần chỉnh sửa cuối:
Có vẻ như bạn đã khoái xài macro hơn CT rồi thì phải!

Vậy thì đây, xin mời:

PHP:
Sub DonGiaNgayCong()
 Dim ShName As String
 
 ShName = ActiveSheet.Name
 If Left(ShName, 1) = "T" And IsNumeric(Right(ShName, 2)) Then
    DGNCg
 End If
End Sub
Bạn gán 1 tổ hợp phím cho macro này, ví du {CTRL}+{SHIFT} & D
sau đó ở bất kì trang tính nào họ "T" bấm tổ hợp phím qui ước ta sẽ có các kết quả.
Chú í: Công thức 2 hàm VLOOKUP() bạn chưa bẩy lỗi thì phải.


Mã:
[B]Sub DGNCg(Optional ShName As String)[/B]
 Dim Rw As Integer
 
 Rw = ActiveSheet.Cells(SNV, "c").End(xlUp).Row
 Range("AJ8:AK8").Select
 Selection.AutoFill Destination:=Range("AJ8:AK" & Rw)
[B]End Sub[/B]
 
-\\/. Hii Bạn đọc vị đúng quá.
Theo bạn cách học VBA: 1. ngâm cứu các đoạn Code rồi tìm ra qui luật; 2.học đi lên từ cơ bản cách nào tốt hơn... mình thì nghĩ cách 2 chắc hơn nhưng lại không hứng thú cho lắm...--=0
Có bảng lương cũ cần in ra báo cáo gấp, nãy giờ mò Code ẩn những NV không làm trong tháng nhưng còn bó tay
Bạn giúp mình với. (Rất nhiều bảng như vậy mà ẩn dòng thủ công thì chết...)
Thanks bạn.
PS: Đoạn Code bạn mới hướng dẫn, mình lại có cái ngâm cứu
 
Lần chỉnh sửa cuối:
Có bảng lương cũ cần in ra báo cáo gấp, nãy giờ mò Code ẩn những NV không làm trong tháng nhưng còn bó tay
Bạn giúp mình với. (Rất nhiều bảng như vậy mà ẩn dòng thủ công thì chết...)
Bạn nên dịch đoạn Code này sang tiếng Việt:
PHP:
4 'Ân Dòng Tróng Cua Các Trang "T01..T12":'
  For Each Sh In ThisWorkbook.Worksheets
    If Left(Sh.Name, 1) = "T" And IsNumeric(Right(Sh.Name, 1)) Then
        J = Sh.[c99].End(xlUp).Row + 2
        Sh.Rows(J & ":99").Hidden = True
    End If
 Next Sh
 Sheets("FuTro").[N5].Value = Timer() - Tmr
Trong VBE, nó cho phép ta đánh số các dòng lệnh (Như bạn thấy số 4 đó)
Hễ dịch gần được nghĩa là bạn đang trên đường chinh phục VBA

Theo bạn cách học VBA: 1. ngâm cứu các đoạn Code rồi tìm ra qui luật; 2.học đi lên từ cơ bản cách nào tốt hơn... mình thì nghĩ cách 2 chắc hơn nhưng lại không hứng thú cho lắm...
Theo mình, bạn không thể theo lớp/trường bài bảng được thì phải theo đường hướng tự học:

(.) Mua 1 quyễn sách co bản về VBA (Sách giành cho ~ người mới bắt đầu)

(.) Lấy công việc bạn đang làm ra mà làm đề tài thử nghiệm

(.a) Nhập liệu:

Xây dựng 1 CSDL như trang 'Data' bạn đang có
Thử lấy 1 trang tính trắng làm trang tính nhập liệu vô nó theo kiểu

Họ tên: . . . . .
Mã NV: . . . .
Ngày sinh: . . . .
. . . . .

Sau đó tìm trên diễn đàn để chuyển dữ liệu mới nhập này vô trang 'Data'
(Bạn nên biết 1 điều rằng: ta càng ít đụng vô trang 'Data' bao nhiêu càng trường thọ CSDL của ta bấy nhiêu. Có nghĩa là không bao giờ nhập trực tiếp dữ liệu lên trang 'Data')

Khâu nhập liệu tạm xong (vì chưa xong hẵn đâu) Ta chuyển sang vài biểu mẫu báo cáo đơn giản, như
- Lọc những người hợp đồng theo tháng;
- Lập danh sách nữ/nam,
. . . .

Nhiêu đó cái đã & chúc bạn kiên trì & thành công!
 
Bạn nên dịch đoạn Code này sang tiếng Việt:
PHP:
4 'Ân Dòng Tróng Cua Các Trang "T01..T12":'
  For Each Sh In ThisWorkbook.Worksheets
...[/QUOTE]
- Giờ mình đang lo in ấn ba cái trang tính để nộp nên tạm thời gác dịch Code lại sau vậy... +-+-+-+ 
- Mình thấy cách ẩn dòng trang họ "T" như trước đây khá tốt:
1. thêm [QUOTE]Sub AnDong(Rng As Range)
 Dim Cls As Range
 Dim Rws As Long
 
 ....[/QUOTE] vào modul1
2.Dán [QUOTE]Private Sub Worksheet_Activate()
 AnDong Range([c8], [c8].End(xlDown))
End Sub[/QUOTE] vào các trang họ "T"

Nên muốn Áp dụng cách tương tự vào trang họ "L" có được không bạn...?(mình đính kèm file bạn xem giúp)

[QUOTE]Theo mình, bạn không thể theo lớp/trường bài bảng được thì phải theo đường hướng tự học:

(.) Mua 1 quyễn sách co bản về VBA (Sách giành cho ~ người mới bắt đầu)

(.) Lấy công việc bạn đang làm ra mà làm đề tài thử nghiệm...
[/QUOTE] 
cám ơn bạn đã chỉ dẫn, mình sẽ có hy vọng 1 ngày nào đó có thể trao đổi VBA với bạn chứ ko phải cứ ăn rồi đòi hỏi như bây giờ;;;;;;;;;;;
Thân.
 
Lần chỉnh sửa cuối:
PHP:
Sub DonGiaNgayCong()
  ....

Mã:
[B]Sub DGNCg(Optional ShName As String)[/B]
  ...
Cả 2 sub trên mình đều dán vào modul1, rồi chạy macro....nhưng không có gì xảy ra. Chắc mình chưa biết sử dụng rồi...

Chú í: Công thức 2 hàm VLOOKUP() bạn chưa bẩy lỗi thì phải.
- Ý bạn là có lỗi hả mình chưa hiểu lắm? mình thì thấy nó hiện đơn giá là chính xác.
 
Lần chỉnh sửa cuối:
Cả 2 sub trên mình đều dán vào modul1, rồi chạy macro....nhưng không có gì xảy ra. Chắc mình chưa biết sử dụng rồi...
Phải đứng trên trang họ "T" mà bạn muốn ẩn dòng trống.

[thongbao]Chú í: Công thức 2 hàm VLOOKUP() bạn chưa bẩy lỗi thì phải. [/thongbao]
- Ý bạn là có lỗi hả mình chưa hiểu lắm? mình thì thấy nó hiện đơn giá là chính xác.
Chuyện gì sẽ diễn ra nếu ta không cung cấp cho hàm VLOOKUP() trị cần đi tìm? (Ở đây sẽ là Mã NV trống)
 
Chuyện gì sẽ diễn ra nếu ta không cung cấp cho hàm VLOOKUP() trị cần đi tìm? (Ở đây sẽ là Mã NV trống)
cái này đúng là mình chưa có nghĩ tới --=0
Cả 2 sub trên mình đều dán vào modul1, rồi chạy macro....nhưng không có gì xảy ra. Chắc mình chưa biết sử dụng rồi...


Phải đứng trên trang họ "T" mà bạn muốn ẩn dòng trống.
Theo mình thấy thì vẫn phải lập hàm, cái macro này chỉ thay cho việc sao chép công thức ở 2 ô AJ8;AK8 xuống dưới phải không bạn
Mình cứ tưởng có macro thay hàm luôn...%#^#$

- Bài toán tính lương NV trong cả năm thì lời giả thế nào, bạn gợi ý cho mình nhé.

- Vấn đề tự động ẩn dòng trong bảng lương mình đã thực hiện như sau:
bước 1: Mình dùng auto filter và record macro thu lại được macro
Mã:
Sub an_dong_luong()'
' an_dong_luong Macro
'


'
Range("E4:E5").Select
Range("B4:N5").Select
Selection.AutoFilter
ActiveSheet.Range("$B$4:$N$50").AutoFilter Field:=4, Criteria1:="<>0", _
Operator:=xlAnd
Range("N7").Select
End Sub
bước 2: Tạo macro sự kiện active cho trang lương họ "L"cho tự chạy sub 'an_dong_luong' này.
Mình mới tập VBA nên dùng phương pháp sơ cấp là dễ ăn nhất--=0 (nói thật là mới đây nhờ có bạn mình mới biết macro sự kiện là cái gì đó, thanks!)
Bạn thấy phương pháp này có ổn không?
Chúc 1 buổi tối vui!
 
Lần chỉnh sửa cuối:
Theo mình thấy thì vẫn phải lập hàm, cái macro này chỉ thay cho việc sao chép công thức ở 2 ô AJ8;AK8 xuống dưới phải không bạn
Mình cứ tưởng có macro thay hàm luôn...
Viết hàm tự tạo thay cho hàm VLOOKUP() lồng nhau đó cũng được; Nhưng:
Hàm tự tạo không thể nhanh bằng hàm E. chính thống trong rất . . rất nhiều trường hợp.
Nhất là khi rất nhiều những ô hay vùng chứa hàm/công thức này
(& lúc nào bạn rỗi mình sẽ giúp bạn việc viết hàm này)


- Bài toán tính lương NV trong cả năm thì lời giả thế nào, bạn gợi ý cho mình nhé.
Nhìn mấy cái hình chưa thể nói lên điều gì để bắt tay vô hướng dẫn hay giúp bạn được gì
Cần có mô tả thật kỹ, nói như cách các nhà làm IZO í.
Thứ nhất: Danh sách trong hình đang thiếu trầm trọng là mã nhân viên. Cái này là xương sống của toàn bộ CSDL
Với mình, 1 khi không có nó thì không làm gì tiếp được sất!
Ngoài ra còn nói luôn: Là danh sách đó chứa thu nhập của người LĐ cả năm (mỗi người 1 hàng hay mỗi người 12 hàng?)
. . . . .


- Vấn đề tự động ẩn dòng trong bảng lương mình đã thực hiện như sau:
1./ . . . .
2./ . . . .
Tùy thuộc vô cấu trúc trang tính nữa; Ví dụ các bảng họ "T" thì không có dòng trống xen kẻ. Như vậy chi3 việc tìm dòng cuối có dữ liệu cho ẩn đến dòng chứa dữ liệu cuối (tạm gọi là footer) mà thôi;
Còn có xen dòng trống trong đám dòng dữ liệu thì làm cách như bạn là đúng.
Bạn muốn cô gọn đứa con tinh thần của mình thì:
Thử vô hiệu hóa hay thay thế từng địa chỉ ghi trong các dòng lệnh & so sánh kết quả với lần chạy trước mà tự tìm ra kết luận cho mình . . .
Tự học thì phải mất công vậy thôi!
Nếu được người khác chỉ thì bạn không bao giờ nhớ chu trình này để làm vốn cho riêng mình đâu!

Thân!
 
Lần chỉnh sửa cuối:
...
(& lúc nào bạn rỗi mình sẽ giúp bạn việc viết hàm này)
...
Cần có mô tả thật kỹ, nói như cách các nhà làm IZO í.
. . . . .
- Thật xin lỗi bạn vì để bạn nhắc thêm lần nữa về tầm quan trọng của mã NV trong CSDL. Mình hoàn toàn hiểu điều này và bảng tính lập ra chỉ để in ấn báo cáo, bên thuế họ đòi bảng công, bảng lương phải thể hiện rõ tên họ. Làm theo IZO thì mình rất khoái--=0
- Mục đích cuối cùng của vấn đề là kê khai thu nhập người LĐ để báo cáo, bảng tính đầy đủ gồm 4 cột, mỗi NV 1 hàng như sau:
SốTT Họ Tên Số CMND Thu nhập năm
1 Nguyễn Văn A 123456 18.980.000
2 Nguyễn Văn B xxxxxx xxxxxxxxx
...........

Tùy thuộc vô cấu trúc trang tính nữa; Ví dụ các bảng họ "T" thì không có dòng trống xen kẻ. Như vậy chi3 việc tìm dòng cuối có dữ liệu cho ẩn đến dòng chứa dữ liệu cuối (tạm gọi là footer) mà thôi;
Còn có xen dòng trống trong đám dòng dữ liệu thì làm cách như bạn là đúng.
Trang tính của mình xen kẽ, mình dùng thử macro này thấy cung ổn%#^#$

Bạn muốn cô gọn đứa con tinh thần của mình thì:
Thử vô hiệu hóa hay thay thế từng địa chỉ ghi trong các dòng lệnh & so sánh kết quả với lần chạy trước mà tự tìm ra kết luận cho mình . . .
cám ơn bạn chỉ bảo, mình hiểu rồi, mình sẽ cố gắng.
Chúc ngày tốt lành.
 
bạn nhắc thêm lần nữa về tầm quan trọng của mã NV trong CSDL. Mình hoàn toàn hiểu điều này
và bảng tính lập ra chỉ để in ấn báo cáo, bên thuế họ đòi bảng công, bảng lương phải thể hiện rõ tên họ.

- Mục đích cuối cùng của vấn đề là kê khai thu nhập người LĐ để báo cáo, bảng tính đầy đủ gồm 4 cột, mỗi NV 1 hàng như sau:
SốTT Họ Tên Số CMND Thu nhập năm
1 Nguyễn Văn A 123456 18.980.000
2 Nguyễn Văn B xxxxxx xxxxxxxxx
...........

Trong các trang họ "T" & "L" bạn đã tiến hành ẩn dòng; thì trang nầy bạn ẩn cột thì có làm sao đâu nhỉ?
Cách này chỉ làm cho bạn thuận tiện hơn mà thôi.

Như vậy trang 'Bảng Kê TN' có 5 cột (cột trước cột 'Họ Tên' sẽ là cột 'MaNV' bị ẩn)
Trong đó cột 'STT' không quan trọng lắm, xử sao cũng được;
03 Cột kế tiếp lấy gián tiếp hay trực tiếp từ trang 'Data'
cột cuối hoặc lấy từ trang họ "T" hay họ 'L" đều được. Mà nên là họ "T" vì họ 'L' có những dòng trống xen kẻ.

Để lấy số liệu lương 12 tháng của từng người từ các trang họ 'T', ta phải điền đủ số liệu vô các cột [AK] của chúng.

Quan trọng nhất trong các công đoạn tạo bảng báo cáo này sẽ là lập danh sách duy nhất mã NV từ các trang họ 'T'
Ở đây sẽ có vài biện pháp thực hiện từ đơn giản đến phức tạp;
Nhưng dù sao chí ít bạn cũng làm được 1 cách, phải vậy không?

Hãy bắt tay làm thử & chúc bạn thành công!
 
Trong các trang họ "T" & "L" bạn đã tiến hành ẩn dòng; thì trang nầy bạn ẩn cột thì có làm sao đâu nhỉ?
.....
Nhưng dù sao chí ít bạn cũng làm được 1 cách, phải vậy không?

Hãy bắt tay làm thử & chúc bạn thành công!
Cám ơn bạn đã giúp đỡ. Bạn nói đúng, muốn nắm được thì phải thử thôi...)(&&@@
1./ Bạn cho mình hỏi, tạo sao mấy dòng cuối trang ( người lập bảng, kế toán,....ký tên...) toàn bị ẩn khi chạy macro các trang họ "T", có trang lại không sao
và có cách nào khắc phục không bạn?
2./ 1 vấn đề nữa mình tạo macro bằng record giống như nói ở bài trước. Thì tậm tịt nghĩa là macro lúc thì mở sheet lên là chạy ngon, lúc khác cũng mở trang đó lên thì báo lỗi. Đó có phải là khuyết điểm chung của macro tạo bằng cách record..?
 
Lần chỉnh sửa cuối:
"Mấy dòng cuối" đó nên đẩy xuống đến dòng 100

Macro sẽ làm ẩn các dòng không dữ liệu cho đến dòng 99.

Đó là con số đã khai báo Const có tên là "SoNV"
 
Cám ơn bạn, lúc trước bạn có nói rồi mà mình quên mất.
CHúc vui.
 
Xin chào bạn Hoang2013. Đã lâu rồi không thảo luận với bạn, hi vọng bạn vẫn tràn đầy năng lượng;)
Mình cũng xin lỗi là đã đào lại cuộc thảo luận đã cũ này... chắc bạn cũng mất một chút thời gian để tìm lại mạch suy nghĩ, để bớt chút thời gian của bạn lục tìm lại file cũ, mình gửi lên đây file cuối cùng chúng ta thảo luận.
Báo cáo bạn thời gian qua mình đã làm xong bộ chứng từ nhân công công trường năm 2016 rồi, đúng tinh thần file chấm công tự động, tuy nhiên chỉ có chấm công tự động còn bảng lương mình vẫn phải làm thủ công.
Bây giờ mình làm tiếp nhân công năm 2015, mình nghĩ phải tìm cách thông minh hơn cho những vấn đề, mong bạn giúp đỡ:
1. số nhân viên đã lên tới vài trăm người... vấn đề này mình đã tìm ra thông số SNV và đã chỉnh xong.
2*. Ở file cũ chỉ có 1 mức lương/ngày cho toàn bộ nhân viên, điều này không đúng với chứng từ mình phải làm là mỗi nhân viên 1 mức lương khác nhau ( điều này cũng ko hợp lý lắm, nhưng số liệu báo cáo đã fix nên mình phải làm theo:() . Ý tưởng của mình là tạo thêm cột mức lương cho mỗi nhân viên ở trang DATA, sau đó khi chạy macro thì ở trang CTLg xuất hiện mức lương tương ứng cho mỗi nhân viên .
Một lần nữa xin bạn thông cảm vì sự bất tiện mình gây ra. Chúc ngày chủ nhật vui vẻ.
 

File đính kèm

Lần chỉnh sửa cuối:
Hiện tại mức lương ngày ở trang 'CTLg' được tạo ra từ dòng lệnh
Mã:
  dArr(W, 3) = Sheets("FuTro").Range("DGCg")

Nếu bạn muốn điền từ những số liệu khác nhau của mức lương mỗi người từ trang 'Data' thì bạn thực hiện các bước sau:

(1) Đến trang 'Data' & cắt toàn bộ dữ liệu cột [Q:q] sang dòng tương ứng của cột [S:s];
Làm điều này để đảm bảo rằng không có gì chung chạ với CSDL của ta (đảm bảo tính toàn vẹn của nó là tối ưu

(2) Bạn thêm mức lương từng người vô cột [P: p] của trang này

Sau đó đưa trang tính hay file mới chỉnh sửa này lên. Chỉ sau đó ta sẽ tiếp tục . . . .
 
Hi bạn.
mình đã thêm cột lương, ta tiếp tục nào. i can't wait%$$
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn Copy cái này & chép đè lên toàn bộ các câu lệnh hiện có tại cửa sổ VBE của trang 'CTLg' & chạy thử macro sự kiện mới này;
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, Arr(), Rng As Range, sRng As Range '*'
    Dim J As Long, Rws As Long, W As Long
 
    ShName = "T" & Right("0" & Target.Value, 2)
    Set Sh = ThisWorkbook.Worksheets(ShName)
    Rws = Sh.[c8].CurrentRegion.Rows.Count
    Arr() = Sh.[c8].Resize(Rws, 33).Value
    ReDim dArr(1 To SNV, 1 To 4)
    [b6].Resize(SNV, 4).Value = dArr()
    Rows("6:" & SNV).Hidden = False
    With Sheets("Data")                                     '**'
        Set Rng = .Range(.[b4], .[b4].End(xlDown))
    End With                                                '**'
    For J = 1 To UBound(Arr())
        If Arr(J, 1) = "" Then Exit For
        If Arr(J, 33) > 0 And Arr(J, 33) < 53 Then
            W = W + 1:                  dArr(W, 1) = W
            dArr(W, 2) = Arr(J, 1):     dArr(W, 4) = Arr(J, 33)
            Set sRng = Rng.Find(Arr(J, 1), , xlFormulas, xlWhole)   '**'
            If Not sRng Is Nothing Then
                dArr(W, 3) = sRng.Offset(, 14).Value
            End If                                                  '**'
        End If
    Next J
    If W Then
        [b6].Resize(W, 4).Value = dArr()
        Rows(W + 6 & ":" & SNV).Hidden = True
    End If
 End If
End Sub

Sau đó tất nhiên bạn tiếp tục "chạy" hết các macro trong bảng tính của bạn xem có gì bất thường sau khi hiệu chỉnh hay không?

Chúc thành công!
 
Tuyệt vời! chắc bạn cũng hình dung được kết quả rồi đó-=.,,. Cám ơn bạn rất nhiều.
Bạn đã giải quyết cho mình khúc mắc mình không thể giải quyết được...

Còn có vấn đề mình xoay sở bằng hàm tuy cũng chấp nhận được nhưng nhìn "nông dân" lắm, làm file chạy chậm nữa, mong bạn chỉ thêm cho vài chiêu hen:
-bài toán: mình muốn tính tổng số công cả năm của từng nhân viên
-Cách lập hàm của mình:
1. lập 12 cột tương ứng với số công 12 tháng của mỗi NV, và cột tổng ở trang Data
2. dùng hàm =VLOOKUP($B4;[ bảng chấm công tháng 1];33;FALSE) cho ra tổng số công NV ở ô B4 trong tháng 1 (lúc này sẽ có xuất hiện lỗi #NA ở những NV ko có tên trong tháng 1)
3. ở cột tổng mình dùng hàm bẫy lỗi =SUM(IFERROR(Q4:AB4;0))

như vậy thì cũng ra nhưng không thông minh chút nào.
Bạn có thể giúp mình CODE 1 cột tổng số công hiện luôn trên trang Data không.
 
Lần chỉnh sửa cuối:
Bài toán: Tính tổng số công cả năm của từng nhân viên
-Cách lập hàm của mình:
1. lập 12 cột tương ứng với số công 12 tháng của mỗi NV, và cột tổng ở trang Data
2. dùng hàm =VLOOKUP($B4;[ bảng chấm công tháng 1];33;FALSE) cho ra tổng số công NV ở ô B4 trong tháng 1 (lúc này sẽ có xuất hiện lỗi #NA ở những NV ko có tên trong tháng 1)
3. ở cột tổng mình dùng hàm bẫy lỗi =SUM(IFERROR(Q4:AB4;0))
Bạn có thể giúp mình CODE 1 cột tổng số công hiện luôn trên trang Data không.

Thứ nhất trang 'Data' là quả tim của CSDL của bạn & không nên lúc nào cũng thao tác trên nó dù bằng tay hay bằng macro.
Như vậy bạn cần chọn 1 trang tính khác để ghi kết quả công các tháng của nhân viên;
Trang tính có thể trưng dụng việc này có thể là 'FuTro', 'T12' hay 1 trang mới,. . . tùy bạn chọn;

Lúc đó mình sẽ giúp bạn 1 macro để tổng hợp số liệu công này trong năm.
 
Thứ nhất trang 'Data' là quả tim của CSDL của bạn & không nên lúc nào cũng thao tác trên nó dù bằng tay hay bằng macro.
Như vậy bạn cần chọn 1 trang tính khác để ghi kết quả công các tháng của nhân viên;
Trang tính có thể trưng dụng việc này có thể là 'FuTro', 'T12' hay 1 trang mới,. . . tùy bạn chọn;
Cám ơn bạn nhắc nhở, mình sẽ cẩn thận hơn với CSDL
Trang "Luong" ko ý nghĩa cho lắm nên mình trưng dụng luôn để tổng hợp.
Bạn sẽ thấy trong file đính kèm là cách mình làm thủ công. Bạn giúp mình nhé.
 

File đính kèm

Bạn phải chuột vô thanh trang tính 'Luong' ; chọn dòng 'View Code' & chép macro sự kiện này vô CS VBE vừa xuất hiện:
PHP:
Private Sub Worksheet_Activate()
 Dim Sh As Worksheet, Cls As Range, Rng As Range, sRng As Range
 Dim Rws As Long, Thg As Byte, Tmp As Double
 Application.ScreenUpdating = False
 For Each Cls In Range([c7], [c7].End(xlDown))
    For Each Sh In ThisWorkbook.Worksheets
        If Left(Sh.Name, 1) = "T" And IsNumeric(Right(Sh.Name, 2)) Then
            Thg = CByte(Right(Sh.Name, 2))
            Rws = Sh.[c8].CurrentRegion.Rows.Count
            Set Rng = Sh.[c8].Resize(Rws)
            Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlWhole)
            If sRng Is Nothing Then
                Tmp = 0
            Else
                Tmp = Sh.Cells(sRng.Row, "AI").Value
            End If
            Cls.Offset(, Thg).Value = Tmp
        End If
    Next Sh
 Next Cls
 Randomize
 Application.ScreenUpdating = True
 [d6].Resize(, 12).Interior.ColorIndex = 34 + 9 / Rnd() \ 1
End Sub
 
Hi bạn,Chép macro sự kiện vào thì chạy tốt...với cơ sở dữ liệu "hiên tại" bạn à...

như mình nói từ trước là số công của cả năm đã được kế toán fix, bây giờ mình phải lập bảng công hàng tháng sao cho cộng lại khớp với số tổng

Ý đồ của mình từ đầu là chấm công đầy đủ cả tháng không thiếu ngày nào, rồi xóa bớt (vì số công kế toán fix thường là ít hơn số công đầy đủ 1 chút- cột S:s trang 'Luong')

nhưng khi thay đổi trong bảng chấm công (xóa bớt bằng thủ công-lại là thủ công:''"), sau đó mở trang 'Luong" thì phát sinh lỗi ở dòng:
[d6].Resize(, 12).Interior.ColorIndex = 34 + 9 / Rnd() \ 1

Bạn làm ơn xem lại giúp mình,
Nhân tiện bạn có ý tưởng nào giải quyết (việc khớp tổng số công cả ngàn nhân viên),giúp giải thoát công việc chỉnh thủ công rất mất thời gian và nhàm chán này hãy giúp mình nhé.
Trân trọng cám ơn.
 

File đính kèm

Câu lệnh mà bạn nói là đang lỗi thực ra là câu lệnh tô màu nền cho vui thôi. & mình đã đánh sai: Lí ra là dấu nhân "*" mình lại nhập đấu chia "/"
Bạn sửa lại cái nha.

Còn chuyện chỉnh công, đưa về số đã định thì chắc thế này:

Lấy 1 ô trống nào đó để hiện tổng toàn bộ công trong 12 tháng của công ti bạn;
Căn cứ vô đó mà chỉnh những người có công cao hay thấp theo xu hướng ngược lại là được.

Mcro chưa thể điều chỉnh số liệu công đâu bạn. Chỉ là cần tìm ra cách chỉnh sao cho nhanh nhất mà thôi.
 
Câu lệnh mà bạn nói là đang lỗi thực ra là câu lệnh tô màu nền cho vui thôi. & mình đã đánh sai: Lí ra là dấu nhân "*" mình lại nhập đấu chia "/"
Bạn sửa lại cái nha.
mình đã sửa rồi bạn, vụ tô màu đúng là vui thật+-+-+-+

Hihi đúng là công cụ siêu cỡ nào thì cũng có giới hạn bạn nhỉ, vụ chỉnh công này đúng là vượt quá khả năng của macro thật rồi, mình đành phải chỉnh thủ công thôi chứ biết sao giờ.-+*/

Ngày chủ nhật để dành nghỉ ngơi với gia đình và nạp lại năng lượng mà mình làm phiền bạn nhiều quá. Bạn đúng là "người cho đi" đó.
Một lần nữa cám ơn bạn, chúc bạn luôn khỏe. ?><???
 
À mình nhớ ra rằng: Trong Exc. có công cụ "What-If Analysis" có thể xử cái vụ này; Bạn ngâm cứu xem thử!
 
Công cụ này mới quá hen bạn. Để mình ngâm cứu thử xem. Thanks bạn.
 

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

Back
Top Bottom