Code thay thế hàm sumif để giảm dung lượng file

Liên hệ QC

tanthanh94

Thành viên mới
Tham gia
24/8/14
Bài viết
46
Được thích
3
Hiện tại file sử dụng hàm sumif rất nhiều dòng
Nay nhờ các Anh viết code để giảm dung lượng file
 

File đính kèm

  • CODE SUMIF.xls
    23.5 KB · Đọc: 416
Bạn đưa file "giống thật" lên đi, rồi nêu rõ yêu cầu, vài dòng kết quả mẫu.
Trước bạn có giúp viết code để phân bổ nên mình dựa vào đấy để lấy kết quả là tính tổng nhiều điều kiện thôi, nhưng nó ghi ra kết quả ở tất cả các dòng giống như trong bài này nên mình mới vào hỏi cách để ghi ra dữ liệu ở dòng đầu tiên, nếu rảnh bạn có thể xem lại giúp mình chi tiết mình ghi ở trong file rồi
 

File đính kèm

  • BC 2019.xlsm
    1.6 MB · Đọc: 52
Upvote 0
Trước bạn có giúp viết code để phân bổ nên mình dựa vào đấy để lấy kết quả là tính tổng nhiều điều kiện thôi, nhưng nó ghi ra kết quả ở tất cả các dòng giống như trong bài này nên mình mới vào hỏi cách để ghi ra dữ liệu ở dòng đầu tiên, nếu rảnh bạn có thể xem lại giúp mình chi tiết mình ghi ở trong file rồi
Trong code tôi gán dữ liệu vào cột S, bạn chỉnh lại vào cột nào tùy ý.
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, R As Long, Tem As String, Rws As Long
    sArr = Range("A8", Range("A8").End(xlDown)).Resize(, 13).Value
    R = UBound(sArr)
ReDim dArr(1 To R, 1 To 1)
With CreateObject("Scripting.Dictionary")
For I = 1 To R
    Tem = sArr(I, 1) & "#" & sArr(I, 2) & "#" & sArr(I, 4) & "#" & sArr(I, 5)
    If Not .Exists(Tem) Then
        .Item(Tem) = I
        dArr(I, 1) = sArr(I, 11)
    Else
        Rws = .Item(Tem)
        dArr(Rws, 1) = dArr(Rws, 1) + sArr(I, 11)
    End If
Next I
End With
Range("S8").Resize(R) = dArr
End Sub
 
Upvote 0
Trước bạn có giúp viết code để phân bổ nên mình dựa vào đấy để lấy kết quả là tính tổng nhiều điều kiện thôi, nhưng nó ghi ra kết quả ở tất cả các dòng giống như trong bài này nên mình mới vào hỏi cách để ghi ra dữ liệu ở dòng đầu tiên, nếu rảnh bạn có thể xem lại giúp mình chi tiết mình ghi ở trong file rồi

Mình diễn ý lại đúng ý bạn không nhé:
Bạn cần kết quả của những nhân viên có làm ca 3 và đảm bảo những nhân viên này không vượt max (dữ liệu mẫu của bạn không đầy đủ!). Nếu bài toán chỉ như vậy thì theo mình để nhanh chỉ cần như sau: Tonghop --> Pivot + filter ca3 + field công việc --> tạo cột max; cột kq so sánh tổng điểm + max --> Pivot lần nữa hoặc dùng trực tiếp
Bài toán hiện tại của bạn thực sự viết code càng khó cho bạn quản lý sau này. Viết code cho vụ này thì phí lắm và bạn cũng chưa học được việc khai thác hết sức mạnh add-in của Excel

MaNVcongvieccaSum of DiemluongCột phụ lấy maxCột kết quả
606congviec23
60.625​
647congviec23
37.30769231​
661congviec23
39.58333333​
853congviec23
60.625​
939congviec13
72.71428571​
1,120congviec23
158.3333333​
1,124congviec13
56.55555556​
3,901congviec23
37.30769231​
3,913congviec13
84.83333333​
 
Upvote 0
Mình diễn ý lại đúng ý bạn không nhé:
Bạn cần kết quả của những nhân viên có làm ca 3 và đảm bảo những nhân viên này không vượt max (dữ liệu mẫu của bạn không đầy đủ!). Nếu bài toán chỉ như vậy thì theo mình để nhanh chỉ cần như sau: Tonghop --> Pivot + filter ca3 + field công việc --> tạo cột max; cột kq so sánh tổng điểm + max --> Pivot lần nữa hoặc dùng trực tiếp { 1 }
Bài toán hiện tại của bạn thực sự viết code càng khó cho bạn quản lý sau này { 2 }. Viết code cho vụ này thì phí lắm và bạn cũng chưa học được việc khai thác hết sức mạnh add-in của Excel { 3 }
Có lẽ do bạn lâu quá chưa trở lại diễn đàn (hoặc bạn mượn tên của mọt người cũ) nên không biết đường lối giải quyết của hầu nhết ngừoi ở đây:

{ 1 } Cái bạn đề nghị cần khá nhiều động tác. Mà dân hỏi bài ở đây chỉ muốn 1 động tác là bấm nút. Nhiều người thẳng thừng phân bày là nhiều đọng tác thì "dễ bị nhầm lẫn". Muốn gọi đó là tinh thần hưởng ứng kỹn nghệ tiên tiến hay do lười quen ỷ lại tuỳ thuộc vào quan điểm của bạn. Nhưng sự thật là vậy.

{ 2 } Người ta chỉ làm cho xong việc rồi biến đi, để cái "khó quản lý sau này" cho người kế vị. Ở đây bạn gặp trườngn hợp này không ít. Dânn ở đay có nthois quen "yêu cuồng sống vội". Đòi hỏi người ta phải nghĩ đến tương lại là đòi hỏi nhiều quá.

{ 3 } Khia thác sức mạnh của Excel hầu như không cần thiết nếu bạn biết khai thác sức mạnh của GPE.
 
Upvote 0
Mình diễn ý lại đúng ý bạn không nhé:
Bạn cần kết quả của những nhân viên có làm ca 3 và đảm bảo những nhân viên này không vượt max (dữ liệu mẫu của bạn không đầy đủ!). Nếu bài toán chỉ như vậy thì theo mình để nhanh chỉ cần như sau: Tonghop --> Pivot + filter ca3 + field công việc --> tạo cột max; cột kq so sánh tổng điểm + max --> Pivot lần nữa hoặc dùng trực tiếp
Bài toán hiện tại của bạn thực sự viết code càng khó cho bạn quản lý sau này. Viết code cho vụ này thì phí lắm và bạn cũng chưa học được việc khai thác hết sức mạnh add-in của Excel

MaNVcongvieccaSum of DiemluongCột phụ lấy maxCột kết quả
606congviec23
60.625​
647congviec23
37.30769231​
661congviec23
39.58333333​
853congviec23
60.625​
939congviec13
72.71428571​
1,120congviec23
158.3333333​
1,124congviec13
56.55555556​
3,901congviec23
37.30769231​
3,913congviec13
84.83333333​
Chuẩn rồi bạn bài này mình muốn dùng pivot để lấy dữ liệu từ 2 bảng ra, mình không biết pivot kiểu j ra được cái cột max đấy, mình đang làm thì pivot ra cột điểm lương xong vlookup ra bảng phụ để điền cột max (nó có nhược điểm hàng ngày số mã nv thay đổi nên dòng tổng thay đổi dẫn đến phải sửa lại bảng phụ) mình có đăng bài rồi nhưng ko đc hướng dẫn nên buộc phải nghĩ cách điền cái tổng ra trước vlookup theo cái đấy rồi mới pivot
Cái này mình ko làm cho mình làm hộ cho mấy chị ở cty mình thôi vì thấy ng ta vất vả, ng ta toàn sắp về hưu có biết pivot là j đâu, có mỗi việc hàng ngày lấy dlieu cop vào file rồi cập nhật lại bảng pivot thôi mà dạy mãi còn quên. Bài cũ mình có đăng ở đây https://www.giaiphapexcel.com/diend...không-vượt-trần-cho-trước.149516/#post-968537
 
Upvote 0
Có lẽ do bạn lâu quá chưa trở lại diễn đàn (hoặc bạn mượn tên của mọt người cũ) nên không biết đường lối giải quyết của hầu nhết ngừoi ở đây:

{ 1 } Cái bạn đề nghị cần khá nhiều động tác. Mà dân hỏi bài ở đây chỉ muốn 1 động tác là bấm nút. Nhiều người thẳng thừng phân bày là nhiều đọng tác thì "dễ bị nhầm lẫn". Muốn gọi đó là tinh thần hưởng ứng kỹn nghệ tiên tiến hay do lười quen ỷ lại tuỳ thuộc vào quan điểm của bạn. Nhưng sự thật là vậy.

{ 2 } Người ta chỉ làm cho xong việc rồi biến đi, để cái "khó quản lý sau này" cho người kế vị. Ở đây bạn gặp trườngn hợp này không ít. Dânn ở đay có nthois quen "yêu cuồng sống vội". Đòi hỏi người ta phải nghĩ đến tương lại là đòi hỏi nhiều quá.

{ 3 } Khia thác sức mạnh của Excel hầu như không cần thiết nếu bạn biết khai thác sức mạnh của GPE.

Vấn đề giải pháp là trong tình huống cụ thể mình đưa ra đỡ tốn sức nhất, nhanh nhất. Bạn đồng ý như vậy không? Người gặp vấn đề có đưa bài toán lớn có mô hình để tư vấn không? Chính vì vậy theo mình đưa ra cách thức dễ nhất, nhanh nhất để thực hiện.
Để có thể giải quyết gốc với một nút bấm mà không có mô hình + viết macros hoặc VBA lai thì sao thực hiện được. Đó là chưa kể bug lỗi. Chính vì vậy giải pháp theo mình đối với người khó khăn là giải pháp ít tốn sức nhất nhưng đạt được vấn đề. Và người dùng tham khảo còn rút ra cho mình cái gì đó chứ giải quyết một lần thì lần sau cũng sẽ tiếp tục hỏi vấn đề tương đương thôi.
 
Upvote 0
Vấn đề giải pháp là trong tình huống cụ thể mình đưa ra đỡ tốn sức nhất, nhanh nhất. Bạn đồng ý như vậy không? ...
Tôi có đồng ý với bạn hay không hoàn toàn vôn nghĩa ở đây.
Ở diễn đàn này, người ta chỉ muốn nhận code về chạy chứ không muốn nghe lý luận.

... Chính vì vậy theo mình đưa ra cách thức dễ nhất, nhanh nhất để thực hiện.
Cách dễ nhất, nhanh nất là nhờ ngừoi khác viết code giùm mình rồi bấm nút chạy.

...Để có thể giải quyết gốc với một nút bấm mà không có mô hình + viết macros hoặc VBA lai thì sao thực hiện được. Đó là chưa kể bug lỗi..
Mô hình là tiếng Ma rốc ở diễn đàn này.
Người hỏi chỉ việc nói "code còn vướng chút xíu...". Và người code lại cong lưng sửa. Bug lỗi là chuyện của người code.

... Và người dùng tham khảo còn rút ra cho mình cái gì đó chứ giải quyết một lần thì lần sau cũng sẽ tiếp tục hỏi vấn đề tương đương thôi.
Thử làm thống kê xem có bao nhiêu người dùng "rút ra cho mình cái gì đó".
Mơ đi.

Chú thích: khoảng vài năm trước tôi cũng lý tưởng như bạn. Nhưng nay tôi đã biết "thế giới ảo không phải là thiên đàng, nó cũng có sự vô lý của nó".
 
Upvote 0
Web KT

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

Back
Top Bottom