Son2006 đã viết:
Tôi xem file congthuc21 và đã hiểu như sau:Mục dích cuối cùng là phân bố lại, còn mark là để đánh dấu những hàng cần phân bố. Đúng không? Khi đó xảy ra vấn đề: dòng 11, số 30 đáng ra phải mark vì 30 gần 100 hơn so với 30+300. Nhưng bạn không mark số 30; Ngược lại nếu mark số 30 thì thực tế ta không cần phân bố lại số 30. Vậy có nghĩa là cách đặt bài toán mark còn chưa đầy đủ
Trước hết mình phải khẳng định lại 2 bài toán là hoàn toàn khác nhau, việc Mark là 1 việc cần phải thực hiện còn việc Phân bố lại là việc khác (nhưng nếu tận dụng được kết quả của việc Mark thì rất hay).
Qua góp ý của các bạn mình phải "Tổng quát hóa" bài toán Mark của mình như sau (rất khó để diễn tả bằng lời nên mình đã đánh "M" bằng tay để các bạn hiểu giúp nhưng vẫn bị nhầm: như bạn Sơn phát hiện ra số 30 vẫn phải Mark):
Ví dụ cụ thể trên khi Giá trị cuối cùng cộng dồn là =770 thì như vậy bạn chỉ được 770/100 =7,7 qui tròn= 8 lần "M" (sai số cuối cùng cho phép không quá +1 lần Mark dư) sao cho đều nhất ngay khi có thể (có nghĩa: sai số cho phép sau 1 lần Mark là nhỏ nhất). Nhưng trong thực tế mình đã phát hiện ra sẽ có lúc Bài toán Mark không giải được(nên có sai số): khi mà số liệu đầu vào liên tục vượt quá xa giá trị tiêu chuẩn (100), trong ví dụ của mình là 300. Trong thực tế mình đã và đang
xử lý thủ công chỗ này, nghĩa là không nhập vào 300 mà sẽ nhập thành 3 lần 100
Nên mình mới nghĩ rằng bài toán sẽ phải giải triệt để hơn bằng cách thực hiện Phân bố lại ở cột E.
Còn công việc(bài toán) mình cần xử lý hiện tại chỉ cần Mark tự động cho cột D là được rồi.
Son2006 đã viết:
Về file congthuc3 tôi có 1 số ý kiến:
1. Tại sao lại dùng roundup?
2. Tại sao phải dùng function Value trong công thức?
3. Nếu input value bằng cận trên? Nếu input value nhỏ hơn cận dưới?
4. Nếu ma trận có kích thước vượt quá cột AB?
5. Nếu kết quả y cuối cùng của ma trận không bằng 0.004?
Những vấn đề trên cũng đơn giản, nên điều chỉnh để công thức chính xác hơn
1) có lẽ nếu không round thì vấn đề "số chữ số có nghĩa sau dấu phẩy" sẽ tự giải quyết được
2) xem giải thich ở câu 3)
3) Nếu input bằng hoặc lớn hơn cận trên sẽ tùy bài toán thực tế: hoặc lấy bằng giá trị nội suy cận trên lớn nhất hoặc có cách xử lý riêng(nên mình đặt sẵn Value để có thể them 1 ghi chú "Vượt quá giới hạn !" chẳng hạn)
Giá trị input trong thực tế luôn > 0 nên mình đã đặt cận dưới =0
4) Cái này mình cũng lưỡng lự, vì sợ lấn dữ liệu khác cũng sử dụng trên sheet này.
5) xem giải thích ở câu 3)
Cám ơn bạn, có gì bạn cứ trao đổi vì đây là những bài toán thực tế nên có những phạm vi riêng, nhưng qua đó tổng quát lên thì rất bổ ích.
Còn về lập công thức mình luôn muốn nó có độ linh động cao tránh mắc lỗi khi bổ sung dữ liệu (trường hợp mình ko dùng SUM mà dùng OFFSET trong congthuc1 là một ví dự nhỏ mình học được)
Congthuc3 này cũng là mở đầu cho 1 bài toán mình đã gặp và đã nhờ xử lý trong VBA đã thành công: tình huống là một số thiết bị yêu cầu nhập số các dữ liệu đầu vào là cố định (Ví dụ chỉ cho phép có đúng 500 số liệu đầu vào thì máy mới xử lý) trong khi số liệu của bạn lúc thì chỉ có 222 chẳng hạn lúc lại có tới 700 .v.v... biết rằng các số liệu có quan hệ tuyến tính với nhau; như vậy các bạn sẽ phải xử lý sao cho ra đúng 500 data input mà thôi ....
Son2006 đã viết:
Có trường hợp: Nếu tổng lũy tiến chẵn trăm có cần mark không? Rõ ràng con số input đó không cần phân bố lại nên không cần mark. Vậy cần sửa lại công thức 1 tí, cái này chẳng khó
Chắc chắn phải Mark vì đây là
mục tiêu lý tưởng của Bài toán. Nghĩ là phải thực hiện Phân bố lại cũng chỉ vì điều này ! và lý do số nhập vào lớn quá so với tiêu chuẩn (100) đã giải thích ở trên
Son2006 đã viết:
Theo tôi nghĩ có lẽ để phân bố lại, cần mark theo kết quả cột tổng lũy tiến, cứ quá chẵn trăm (100,200,...) là phải mark chứ không cấn tính cái nào gần 100 hơn, lại càng không cần tính dến tổng bắt đầu từ ô mark phía trên... như bạn đã nêu. Nếu vậy thì công thức rất đơn giản: Copy & paste công thức sau vào D4 & filldown
=IF(ROUNDDOWN(B4/100,0)-ROUNDDOWN(B3/100,0)>0,"M","")
Công thức của bạn vẫn chưa giải quyết được:
Đó là chưa kể đến yêu cầu tổng quát mình đã nêu trên, cụ thể là nếu ngay từ đầu ô C4 đã có giá trị = 300 chẳng hạn thì ngay lập tức ô kế tiếp D5, D6 phải được Mark ngay để tiêu thụ hết số "M" bị dư ra mà chưa cần quan tâm đến giá trị các ô C5, C6 bằng bao nhiêu !
Thực tế mình vẫn phải xử lý bằng tay chỗ này hơn nữa số liệu thực tế mình gặp có đến vài chục nghìn và rất may là đều nhỏ hơn nhiều so với tiêu chuẩn; tuy nhiên nếu tiêu chuẩn là một số không tròn trịa (như giả thiết =100) thì các bạn thử tưởng tượng sẽ không thể làm bằng tay mà không bị sai sót được
Son2006 đã viết:
Giá trị mới tìm được sẽ được viết theo mấy chữ số thập phân? Theo tôi thì cần theo số có chữ số thập phân ít hơn. Vì sao? Ví dụ tính tổng 2 phép đo. Phép thứ nhất được 10 m (sai số 1 m); Phép thứ 2 được 20.05m(Sai số 0.01m). Vậy tổng sẽ viết là 30m hay 30.05m?
Cài này quả thật tôi cũng không biết mặc dù kiến thức rất cơ bản, có bạn nào đang học môn Phương pháp tính trả lời giùm.
Nhưng cứ giả thiết đi bạn, thực tế đây là nội suy tuyến tính ngoài ra còn nội suy loga .... nữa