Bài toán hay: Tính thời điểm đủ 730 ngày trong vòng 5 năm liên tục. (1 người xem)

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

huuthang_bd

Chuyên gia GPE
Tham gia
10/9/08
Bài viết
8,941
Được thích
11,366
Donate (Momo)
Donate
Giới tính
Nam
Nghề nghiệp
Thợ đụng
Tôi đọc được câu hỏi này trên một diễn đàn Excel của nước ngoài. Chợt nhớ tới mấy anh em mê công thức trên diễn đàn mình nên đăng lên đây để mọi người giải trí.

Bài toán:
Anh X có thông tin về thời gian lưu trú ở các quốc gia như bảng sau:
Quốc giaNgày đếnNgày đi
Australia
06/04/2019​
20/05/2019​
Canada
23/01/2019​
06/03/2019​
Australia
02/10/2018​
26/11/2018​
France
25/06/2018​
07/08/2018​
Australia
26/03/2018​
30/04/2018​
France
28/12/2017​
24/02/2018​
Australia
25/09/2017​
12/11/2017​
Germany
27/06/2017​
20/08/2017​
Australia
13/04/2017​
17/05/2017​
Canada
08/01/2017​
26/02/2017​
Australia
17/10/2016​
25/11/2016​
France
04/07/2016​
24/08/2016​
Australia
28/03/2016​
05/05/2016​
Canada
03/01/2016​
19/02/2016​
Australia
13/10/2015​
03/12/2015​
France
22/07/2015​
13/09/2015​
Australia
18/05/2015​
19/06/2015​
France
23/02/2015​
29/03/2015​
Canada
16/12/2014​
15/01/2015​
France
12/10/2014​
14/11/2014​
Australia
18/11/2014​
27/12/2014​
Điều kiện để được định cư tại một trong các quốc gia trên là trong vòng 5 năm gần nhất có 730 ngày có mặt ở quốc gia đó (được tính là có mặt khi vào lúc 00h00 có mặt trên lãnh thổ quốc gia đó). Xác định thời điểm anh X đủ điều kiện định cư tại mỗi quốc gia nếu anh X bay đến quốc gia đó trong ngày hôm nay và ở đó liên tục cho đến khi đủ điều kiện.
 
Không hiểu sao ngày tháng năm ở đây copy qua excel thì không chuyển về số được nó báo lỗi dù dùng cách nào, nếu so với chuỗi khác tự gõ cũng không giống nhau.
Đành dùng text to column :v
 
Không hiểu sao ngày tháng năm ở đây copy qua excel thì không chuyển về số được nó báo lỗi dù dùng cách nào, nếu so với chuỗi khác tự gõ cũng không giống nhau.
Đành dùng text to column :v
Không hiểu sao lại có thêm 1 ký tự lạ ở cuối chuỗi ngày tháng (Length = 11)
Em chuyển bằng công thức này là được:
Mã:
=--LEFT(B2,10)
 

File đính kèm

Chắc em hiểu nhầm rồi. Yêu cầu là xác định ngày (trong tương lai) khi mà anh X đủ điều kiện.
Ví dụ, đối với Australia sẽ là ngày 08/05/2020.
 
Chắc em hiểu nhầm rồi. Yêu cầu là xác định ngày (trong tương lai) khi mà anh X đủ điều kiện.
Ví dụ, đối với Australia sẽ là ngày 08/05/2020.
Anh hướng dẫn cách anh ra kết quả với, em tính ra ngày khác, hình như em lại tính sai rồi chưa hiểu rõ cách tính lắm:
 

File đính kèm

Lần chỉnh sửa cuối:
ngày đi - ngày đến, sau đó sumif theo quốc gia = số ngày đã ở (1)

Số ngày còn lại cần ở = 730 - số ngày đã ở (2)

ngày tương lai đủ đk = today() + kết quả ở bước (2)
 
Anh hướng dẫn cách anh ra kết quả với, em tính ra ngày khác, hình như em lại tính sai rồi chưa hiểu rõ cách tính lắm:
Em bỏ sót điều kiện "trong vòng 5 năm gần nhất" rồi. Nếu tính ra kết quả là ngày 30/03/2020 thì tổng số ngày ở Australia từ ngày 31/03/2015 đến ngày 30/03/2020 là 730 ngày thì mới đúng.
 
Em bỏ sót điều kiện "trong vòng 5 năm gần nhất" rồi. Nếu tính ra kết quả là ngày 30/03/2020 thì tổng số ngày ở Australia từ ngày 31/03/2015 đến ngày 30/03/2020 là 730 ngày thì mới đúng.
Em nghĩ ra là làm sai nhưng chưa nghĩ ra cách giải, không đơn giản chút nào haha
 
Anh hướng dẫn cách anh ra kết quả với, em tính ra ngày khác, hình như em lại tính sai rồi chưa hiểu rõ cách tính lắm:
Cái "mắc mớ" là nếu kết quả của bạn ngày 30/3/2020 thì 5 năm gần nhất sẽ bắt đầu từ ngày 30/3/2015.
Những ngày ở trước đó không tính vào số 730
 
Bài này dùng toán lặp, 1 thứ em chỉ làm theo mẫu chưa biết cách làm :)
Dùng chức năng tính vòng khá đơn giản, ví dụ ô A1=f(ô B1) và ô B1= g(ô A1) nếu 2 hàm f và g có nghiệm, excel tự xử lý tương tự Solver và trả về kết quả
 
Cái này tính theo quốc gia nào cụ thể
haha em nghĩ 4 tiếng rồi chưa ra..
Hôm qua làm bài về Sum theo Phân đoạn, nay có chút thời gian rảnh rang chơi với anh em nè!
Dòm thấy anh @HieuCD giải bài mà thấy "ngẩn ngơ", lại chơi vòng lặp nữa chứ! :<>

Anh thì cũng giống em nhìn vào thấy "lạc lõng" vì không biết bắt đầu lấy mốc tính từ đâu, nên tự lập luận như sau:
  1. Do kết cấu dữ liệu thời gian sắp từ thời gian gần nhất ở trên, rồi lùi xuống cho thời gian xa hơn. Do vậy, nếu cộng lũy kế các ngày này sẽ có số tăng dần. Rồi lấy 730 trừ số Lũy kế theo các đoạn thời gian sẽ ra số ngày cần ở để đủ 730.
  2. Lấy các Mốc ngày đến đều tính ra "Ngày" của 5 năm sau. Rồi lấy "Ngày vừa tính ra" trừ "Ngày hôm nay (+1)" để biết còn bao nhiêu ngày còn có thể ở đến cán mốc 5 năm.
  3. Nếu Mốc thời gian Lũy kế nào thỏa điều kiện (2.) mà lớn hơn (1.) thì lấy nó ra + Số ngày hôm nay thì ra ngày tương lai.
Tuy nhiên, như bài #21 có nêu thì...hi..hi.. còn phải xem lại nhiều.
Gửi cách làm để anh em "ném đá" cho vui.

Chúc anh em ngày vui.

Thân
 

File đính kèm

Ví dụ trường hợp đến Germany ngày cách ngày hôm nay đúng 5 năm và lưu trú đúng 728 ngày.

Để đạt 730 ngày trong vòng 5 năm, người này phải ở thêm 730 ngày!

Thú vị ở chỗ kết quả giống người chưa đến Germany ngày nào. :yahoo:
 
Lần chỉnh sửa cuối:
Cách tiếp cận của @Phan Thế Hiệp rất hay. Tôi thì đi theo một hướng khác.
  • Tính số ngày đã ở trong 5 năm gần nhất (X)
  • Tính số ngày còn thiếu để đủ 730 ngày (Y = 730 - X)
  • Tạo mảng cộng dồn các ngày không thỏa điều kiện kể từ ngày cách ngày hôm nay 5 năm (Mảng A)
  • Xác định vị trí số Y trên mảng A (Z). Z có ý nghĩa là tổng số ngày cần ở thêm từ ngày hôm nay để đủ điều kiện, Z bao gồm số ngày còn thiếu (X) và số ngày phải bù do dời từ mốc 5 năm trước của ngày hôm nay đến mốc 5 năm trước của ngày đủ điều kiện.
  • Ngày đủ điều kiện là ngày hôm nay + Z
Riêng trường hợp ở bài #21 thì tôi tách riêng ra một công thức.
  • Xác định ngày đến mà trong vòng 5 năm kể từ ngày đó đã ở được >= 730 ngày (Ngày X)
  • Xác định vị trí của số 730 trên mảng cộng dồn các ngày thỏa điều kiện kể từ ngày X (Y)
  • Ngày đủ điều kiện là X + Y
Cảm ơn tất cả mọi người đã tham gia mổ sẻ một bài toán khá thú vị.
 

File đính kèm

Thức sớm gặp ngay bài này mất thời gian thật bỏ luôn cả ăn sáng, góp vui chút với anh em:
- Tính mốc thời gian tương lai của ngày đến 5 năm rồi so với 730 ngày, ngày nào gần nhất thì lấy , dùng cột phụ, có thể bỏ cột phụ công thức sẽ dài hơn tý, mượn file bạn HieuCD.
 

File đính kèm

Cách tiếp cận của @Phan Thế Hiệp rất hay. Tôi thì đi theo một hướng khác.
  • Tính số ngày đã ở trong 5 năm gần nhất (X)
  • Tính số ngày còn thiếu để đủ 730 ngày (Y = 730 - X)
  • Tạo mảng cộng dồn các ngày không thỏa điều kiện kể từ ngày cách ngày hôm nay 5 năm (Mảng A)
  • Xác định vị trí số Y trên mảng A (Z). Z có ý nghĩa là tổng số ngày cần ở thêm từ ngày hôm nay để đủ điều kiện, Z bao gồm số ngày còn thiếu (X) và số ngày phải bù do dời từ mốc 5 năm trước của ngày hôm nay đến mốc 5 năm trước của ngày đủ điều kiện.
  • Ngày đủ điều kiện là ngày hôm nay + Z
Riêng trường hợp ở bài #21 thì tôi tách riêng ra một công thức.
  • Xác định ngày đến mà trong vòng 5 năm kể từ ngày đó đã ở được >= 730 ngày (Ngày X)
  • Xác định vị trí của số 730 trên mảng cộng dồn các ngày thỏa điều kiện kể từ ngày X (Y)
  • Ngày đủ điều kiện là X + Y
Cảm ơn tất cả mọi người đã tham gia mổ sẻ một bài toán khá thú vị.
Tôi thử today là ngày 22/5/2019 thì kết quả file của bạn là canada : 19/02/2021 file của tôi ra 03/01/2021 cả 2 kết quả này đều đúng, tuy nhiên ngày nhập cư hợp lý sẽ là ngày gần với hiện tại nhất, bạn có ý kiến gì chỗ này không?
 
Tôi thử today là ngày 22/5/2019 thì kết quả file của bạn là canada : 19/02/2021 file của tôi ra 03/01/2021 cả 2 kết quả này đều đúng, tuy nhiên ngày nhập cư hợp lý sẽ là ngày gần với hiện tại nhất, bạn có ý kiến gì chỗ này không?
Đương nhiên kết quả đúng là kết quả gần với ngày hiện tại nhất. Có thể công thức của tôi cần phải sửa lại nhưng hiện tại tôi chưa kiểm tra được.
 
File của bạn bị vòng lặp. Theo mình đã tính rõ ràng theo ngày thì không cần dùng Edate.
Vậy giải thuật của bạn như thế nào? bạn có thể góp vui với anh em bằng file của mình gửi anh em xem, như các anh em trên, được không!?

Thân
 

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

Back
Top Bottom