Để câu lệnh sort ở đâu thì cho kết quả đúng.

Liên hệ QC

nguyenminh121a122

Thành viên mới
Tham gia
11/5/21
Bài viết
27
Được thích
9
Anh/Chị xem giúp em để câu lệnh sort ở đâu thì cho kết quả đúng. Em sửa lại nó bị chạy kết quả tán loạn rồi.
Cảm ơn các anh chị rất nhiều !!!
 

File đính kèm

  • SUA KET QUA.xlsm
    154.7 KB · Đọc: 13
Upvote 0
Upvote 0
:yahoo:Sort thì được nhưng kết quả tính toán vẫn bị sai anh ơi.
Vậy thì bạn xóa hẳn Sort ở chỗ đó đi thay chỗ này:

Mã:
With Sheet25.[D23:O23].Resize(k)
        .Borders.LineStyle = xlContinuous
        .Borders.Weight = xlThin
        .Sort .Cells(1, 2), xlAscending
End With

thành cái này:

Mã:
With Sheet25.[D23:O23].Resize(k)
    .Borders.LineStyle = xlContinuous
    .Borders.Weight = xlThin
    .Sort Sheet25.Range("E23")
End With
 
Upvote 0
Cột M và N không phải công thức thì kết quả sai sau khi sort là phải rồi.
 
Upvote 0
Cột Tồn lũy kế mà bạn sort thì đương nhiên kết quả sai rồi. Bạn thử một trong các cách sau thử:
- Một là bạn sort mảng trước khi ghi kết quả ra sheet
- Hai là giá trị tại cột M, N ghi ra dùng công thức Formular
- Ba là nạp lại mảng tính toán lại giá trị cột M, N sau khi sort
 
Upvote 0
Cột Tồn lũy kế mà bạn sort thì đương nhiên kết quả sai rồi. Bạn thử một trong các cách sau thử:
- Một là bạn sort mảng trước khi ghi kết quả ra sheet
- Hai là giá trị tại cột M, N ghi ra dùng công thức Formular
- sort mảng trước khi ghi kết quả ra sheet thì cũng vẫn vậy.
- cột M, N gán formula được nhưng không dễ, do số dư đầu kỳ đang ở dòng 21, bên ngoài mảng kết quả, dòng đầu tiên của mảng là dòng 23 phải tính từ dòng 21. Từ dòng 2 của mảng trở đi mới tính từ dòng liền kề bên trên (dòng 1). Phải đặt điều kiện để công thức dòng 1 của mảng khác những dòng sau.
- Nạp lại mảng để tính toán lại 2 cột M, N cũng phải lưu ý giá trị dòng 1 của mảng cũng tính toán khác với các dòng còn lại.
 
Upvote 0
Anh/Chị xem giúp em để câu lệnh sort ở đâu thì cho kết quả đúng. Em sửa lại nó bị chạy kết quả tán loạn rồi.
Cảm ơn các anh chị rất nhiều !!!
Nên dùng auto filter, muốn gì sort đấy, cho nhanh và hiệu quả
Chú ý khi sort thì công thức muốn thay đổi ra sao, vì nó sẽ thay đổi theo liên kết có thể thấy sai

Thử với Auto Filter ... sort để xem sai (theo bạn cho là sai, thực tế là đúng theo công thức) do đâu (?)
 
Upvote 0
Các bước thực hiện thế này:
- Gán giá trị cho mảng kết quả các cột từ 1 đến 9 và cột 12, bỏ 2 cột 10 và 11 rỗng.
- Đưa mảng kết quả xuống
- Sort trên sheet

Cách 1: Gán công thức:

Mã:
Range("M23").resize(k).FormulaR1C1 = "= R21C13 + Sum(R23C9:RC9) - Sum(R23C11:RC11)"
Cách 2: gán giá trị
Lấy mảng kết quả sau khi sort lên lại (arrNew)
Mã:
dkSL = Cells(21, 13).value
If i = 1 then
    ArrNew(i, 10) = dkSL + arrNew(i, 6) - arrNew(i, 8)
Else
    ArrNew(i, 10) = arrNew(i - 1, 10) + arrNew(i, 6) - arrNew(i, 8)
End if
 
Lần chỉnh sửa cuối:
Upvote 0
Anh/Chị xem giúp em để câu lệnh sort ở đâu thì cho kết quả đúng. Em sửa lại nó bị chạy kết quả tán loạn rồi.
Cảm ơn các anh chị rất nhiều !!!
Bạn sửa lại 2 dòng sort:
Mã:
.sort .Cells(1, 2), xlAscending
thành
Mã:
.sort .Cells(23, 4), xlAscending
xem lại thử. Còn số dư đầu kỳ thì bạn viết code riêng để tổng hợp bên sheet xuất nhập tồn, ra kết quả bên sheet đó rồi thì chỉ lấy kết quả qua thôi.
 
Upvote 0
Xem hình

1631326204240.png

Thời điểm (1) trên sheet đang có kết quả cũ hoặc đang trống, mảng kết quả chỉ đưa xuống ở thời điểm (3). Sort lúc này là vô nghĩa vì sẽ bị xoá
Thời điểm (2): Mảng chưa sort, gắn kết quả cứng vào các dòng của dArr chưa sort
Thời điểm (3): Gán mảng chưa sort xuống sheet.
Thời điểm (4): Sort giá trị cứng, dòng dưới bị đưa lên trên cùng với giá trị cứng của 2 cột 10 và 11.
 
Lần chỉnh sửa cuối:
Upvote 0
Vâng ! cảm ơn anh đã góp ý. Để em làm lại xem có được không.
Xem hình

View attachment 265845

Thời điểm (1) trên sheet đang có kết quả cũ hoặc đang trống, mảng kết quả chỉ đưa xuống ở thời điểm (3). Sort lúc này là vô nghĩa vì sẽ bị xoá
Thời điểm (2): Mảng chưa sort, gắn kết quả cứng vào các dòng của dArr chưa sort
Thời điểm (3): Gán mảng chưa sort xuống sheet.
Thời điểm (4): Sort giá trị cứng, dòng dưới bị đưa lên trên cùng với giá trị cứng của 2 cột 10 và 11.
 
Upvote 0
Các bước thực hiện thế này:
- Gán giá trị cho mảng kết quả các cột từ 1 đến 9 và cột 12, bỏ 2 cột 10 và 11 rỗng.
- Đưa mảng kết quả xuống
- Sort trên sheet

Cách 1: Gán công thức:
Khi em làm thế nầy, em dùng công thưc thì bị sai. Anh có thể "Soi" giúp em một chút được không. Em không biết dùng cách nào nữa rồi.
 

File đính kèm

  • SUA KET QUA.xlsm
    164.4 KB · Đọc: 8
Upvote 0
Khi em làm thế nầy, em dùng công thưc thì bị sai. Anh có thể "Soi" giúp em một chút được không. Em không biết dùng cách nào nữa rồi.
Công thức đúng cho kết quả không có dòng tổng mỗi tháng. Bạn chèn dòng cộng từng tháng vào làm sao còn đúng nữa? Huống chi con số chèn vào đang tính sai: Đầu tháng này phải lấy cuối tháng trước, chứ đâu phải lấy đầu kỳ ở dòng 21.

Ngoài ra tôi có nói 2 lần là gán dArr xuống sort xong mới làm tiếp 2 cột M, N mà?
Lại vầy nữa: Tôi cũng đã nói trong mảng dArr không cần gắn 2 cột 10 và 11, 2 cột đó để xử lý sau, gắn vô rồi xoá hoặc ghi đè thì mất công.
 
Lần chỉnh sửa cuối:
Upvote 0
Công thức đúng cho kết quả không có dòng tổng mỗi tháng. Bạn chèn dòng cộng từng tháng vào làm sao còn đúng nữa? Huống chi con số chèn vào đang tính sai: Đầu tháng này phải lấy cuối tháng trước, chứ đâu phải lấy đầu kỳ ở dòng 21.
Em dùng kết quả chạy bằng mảng thì chạy đúng. Nhưng với code nầy do em không sort được nên 2 cột 11 và 12 chạy sai kết quả. Anh có cách nào khác không? chỉ giúp em với.
 
Upvote 0
Công thức viết tay đi nha. Rồi record macro ra code
Chèn dòng cộng thì phải dùng công thức khác, không phải công thức đó nữa.
 
Upvote 0
Dùng công thức SumIf như sau:
Mã:
Sheet25.Range("M23").Resize(k).FormulaR1C1 = "= R21C13 + Sumif(R23C4:RC4,""<>"",R23C9:RC9) - Sumif(R23C4:RC4,""<>"",R23C11:RC11)"
Sheet25.Range("N23").Resize(k).FormulaR1C1 = "= R21C14 + Sumif(R23C4:RC4,""<>"",R23C10:RC10) - Sumif(R23C4:RC4,""<>"",R23C12:RC12)"
Quan trọng là:
- Sort sheet trước khi gán công thức. Nếu sort sau khi gán công thức thì chỉ sort từ cột D đến cột L. Làm được điều này thì công thức nào cũng không lỗi. Trừ khi cột O có ghi chú cần sort theo thì bắt buộc phải sort trước.
- Chèn dòng vẫn ra kết quả đúng, còn bản thân dòng chèn sai thì tôi đã nói nguyên nhân ở trên.
 
Upvote 0
Web KT

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

Back
Top Bottom