Giúp công thức tính ngày kết thúc theo Ngày mở và chu kỳ và kiểu Tròn ngày

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài
Nếu:
- Ngày bắt đầu là: 20/02/2024
- Nhắc cách nhật: 5 ngày

Cũng vậy nếu:
- Ngày bắt đầu là: 27/02/2024
- Nhắc cách nhật: 2 ngày

Kết quả tại kỳ 1 (ngày bắt đầu) đều chưa chính xác, vì vậy cũng không đúng cho các kỳ kế tiếp.

Thân
Bài đã được tự động gộp:


Anh khéo lo! Trong chốn "võ lâm" làm gì có ngày cuối tuần anh!?

/-*+//-*+//-*+/
Em biết chỗ sai mà, đang tính sửa mà bận quá nên chưa sửa được. Lúc lập công thức cũng nghĩ đến rồi mà tự nhiên quên đưa vô.
Lỗi sai là ở chỗ chưa ràng buộc ngày bắt đầu kỳ 1 lớn hơn hoặc bằng ngày bắt đầu đã cho. Thêm hàm text nữa chắc ổn anh nhỉ.
 
Em biết chỗ sai mà, đang tính sửa mà bận quá nên chưa sửa được. Lúc lập công thức cũng nghĩ đến rồi mà tự nhiên quên đưa vô.
Lỗi sai là ở chỗ chưa ràng buộc ngày bắt đầu kỳ 1 lớn hơn hoặc bằng ngày bắt đầu đã cho. Thêm hàm text nữa chắc ổn anh nhỉ.
Bài này rắc rối lắm. Bạn phải chịu khó tóm ghi lại cái pattern. Phải có cái pattern mới đoán được những chỗ thừa thiếu mà phát triển thêm hàm.
 
Bài này rắc rối lắm. Bạn phải chịu khó tóm ghi lại cái pattern. Phải có cái pattern mới đoán được những chỗ thừa thiếu mà phát triển thêm hàm.
Dạ bác. Thực ra em cũng chỉ làm theo cái em hiểu thôi. Còn thực tế như nào thì chờ chủ thớt xác nhận rồi chỉnh sửa tiếp.

Mã:
=AGGREGATE(15,6,--TEXT(DATE(2024,{0,1,2,3}+MONTH(B1),TEXT(DAY(B1)+B2*(ROW(A1:A60)-30),"[>31]a;[<=0]a;0")),"[<"&B1&"]a"),B3)
 

File đính kèm

Em biết chỗ sai mà, đang tính sửa mà bận quá nên chưa sửa được. Lúc lập công thức cũng nghĩ đến rồi mà tự nhiên quên đưa vô.
Lỗi sai là ở chỗ chưa ràng buộc ngày bắt đầu kỳ 1 lớn hơn hoặc bằng ngày bắt đầu đã cho. Thêm hàm text nữa chắc ổn anh nhỉ.
Xem lại bài #3
1722491679797.png

Ví dụ ngày bắt đầu 1/8/2024 10 ngày 1 lần (1,11,31) thì sau 10 chu kỳ rơi vào ngày 1/11/2024
Trường hợp như tháng 9 nếu không có ngày 31 thì +1 để nó thành 1/10/2024 .
Ngay cả chủ thớt cũng tính sai:
1/ Tháng 8: có 4 ngày 1->11->21->31
2/ Tháng 9: có 3 ngày 1->11->21
3/ Tháng 10: có 4 ngày 1->11->21->31

Vậy, kỳ thứ 10 phải là ngày 21/10/2024, không phải ngày 1/11/2024 (chủ thớt tính tay), và cũng không là ngày 11/10/2024 (như công thức).

Yêu cầu đòi nợ nhắc ngày của thớt cũng hơi "máu lạnh", ngày 31/8 mới nhắc nợ, thì qua hôm sau ngày 1/9 lại nhắc nợ theo chu kỳ tháng mới. Lẽ ra nên bỏ ngày nhắc nào gần nhau, như bỏ ngày 1/9, kỳ tiếp là 11/9. Nếu tính như vậy thì 'cách nhật nhắc': 10 ngày, kỳ thứ 10 sẽ là ngày 31/10/2024 vậy mới hợp 'tình' hơn chút.

Thân
 
Sắp tới rồi đó, Excel chưỡi!

:D :D :D
Sắp tới rồi đó, Excel chưỡi!​
:D :D :D
Em nhớ là trong Excel chỉ có hàm Choose(), chứ không có hàm Chui() anh ơi!

Hễ nó là vầy, thì mình vậy, nó là kia, thì mình kịa...

Ai cũng vì cuộc sống mà làm việc, đụng đến 'công việc' cá nhân thì không hợp lẽ. Em chỉ nhớ bài giáo huấn thời em học tiểu học: "Chiếc cân của người buôn" (đại khái nhớ mang máng cái tựa đề), và cố chọn nghề cho hợp. Còn ai khác thì tùy "phước nghiệp" của họ, miễn bàn!

A Di Đà Phật

Chúc anh ngày vui
/-*+//-*+//-*+/
 
Xem lại bài #3

Ngay cả chủ thớt cũng tính sai:
1/ Tháng 8: có 4 ngày 1->11->21->31
2/ Tháng 9: có 3 ngày 1->11->21
3/ Tháng 10: có 4 ngày 1->11->21->31

Vậy, kỳ thứ 10 phải là ngày 21/10/2024, không phải ngày 1/11/2024 (chủ thớt tính tay), và cũng không là ngày 11/10/2024 (như công thức).

Yêu cầu đòi nợ nhắc ngày của thớt cũng hơi "máu lạnh", ngày 31/8 mới nhắc nợ, thì qua hôm sau ngày 1/9 lại nhắc nợ theo chu kỳ tháng mới. Lẽ ra nên bỏ ngày nhắc nào gần nhau, như bỏ ngày 1/9, kỳ tiếp là 11/9. Nếu tính như vậy thì 'cách nhật nhắc': 10 ngày, kỳ thứ 10 sẽ là ngày 31/10/2024 vậy mới hợp 'tình' hơn chút.

Thân
Bên em chỉ mặc định tròn 3 ngày là 1,11,21 nên ko có tính 31 a nhé .do dù tháng đó có 31 hay không có 31 vẫn là 1,11,31
 
Bên em chỉ mặc định tròn 3 ngày là 1,11,21 nên ko có tính 31 a nhé .do dù tháng đó có 31 hay không có 31 vẫn là 1,11,31
Sao bất nhất vậy bạn?
Ba hồi: 1,11,21; rồi ba hồi xác định 1,11,31
Thằng nào đúng hử!?

Vậy, bên bạn còn mặc định cái gì nữa?

Nếu:
- Cách 5 ngày nhắc: thì ngày nào được tính
Vd: ngày 2 bắt đầu -> 2;7;12;17;22;27 (6 ngày). Hay chỉ 2;7;12 (3 ngày thôi)

- Có các trường hợp nhắc khác: như 7 ngày, 15 ngày ..v.v. không? Nếu có thì 'mặc định' những ngày nào?

Đã gọi là 'chu kỳ' thì phải nhất quán chứ bạn, chứ ba hồi tính, ba hồi không tính thì chỉ có nước tự gõ tay.

Ngoài ra, khi đặt yêu cầu thì phải viết cho đủ ý:
-Trường hợp như vầy, thì lọc ra cái này, cái này, cái này.
- Trường hợp khác như vầy, thì lọc ra cái này, cái này, cái này.

Trả lời nhát gừng, như kiểu đánh đố thì chỉ tốn thời gian vô ích mà chả thu được kết quả gì.

Vậy nha, tôi cảm thấy đến đây đã đủ với những gì muốn nói.
 
Sao bất nhất vậy bạn?
Ba hồi: 1,11,21; rồi ba hồi xác định 1,11,31
Thằng nào đúng hử!?

Vậy, bên bạn còn mặc định cái gì nữa?

Nếu:
- Cách 5 ngày nhắc: thì ngày nào được tính
Vd: ngày 2 bắt đầu -> 2;7;12;17;22;27 (6 ngày). Hay chỉ 2;7;12 (3 ngày thôi)

- Có các trường hợp nhắc khác: như 7 ngày, 15 ngày ..v.v. không? Nếu có thì 'mặc định' những ngày nào?

Đã gọi là 'chu kỳ' thì phải nhất quán chứ bạn, chứ ba hồi tính, ba hồi không tính thì chỉ có nước tự gõ tay.

Ngoài ra, khi đặt yêu cầu thì phải viết cho đủ ý:
-Trường hợp như vầy, thì lọc ra cái này, cái này, cái này.
- Trường hợp khác như vầy, thì lọc ra cái này, cái này, cái này.

Trả lời nhát gừng, như kiểu đánh đố thì chỉ tốn thời gian vô ích mà chả thu được kết quả gì.

Vậy nha, tôi cảm thấy đến đây đã đủ với những gì muốn nói.
Tôi đã viết code được rồi cảm ơn anh
Mã:
Private Sub TinhchukyNew(ByVal hwnd As LongPtr)
  Dim t&, L&, w&, h&, w2&, h2&, sw&, sh&, SR As RECT, r As RECT, r2 As RECT, T2&, l2&, b1&, r1&, p As aaa, sp As aaa, sx As aaa, hw As LongPtr
  SR = ChukyStatt
  GetWindowRect hwnd, r
  
  hw = hAWHWnd
  GetWindowRect hw, r2
  With r
    w = .Right - .Left: h = .Bottom - .Top: sp.x = SR.Right - w - 30: sp.y = SR.Bottom - h - 30: sx.x = SR.Left: sx.y = SR.Top
    nam hw, sp
    nam hw, sx
    With r2
      w2 = .Right - .Left: h2 = .Bottom - .Top
    
      With p: .x = r2.Left: .y = r2.Top: nam hw, p: L = .x: t = .y: End With
      With p: .x = r2.Right: .y = r2.Bottom: nam hw, p: r1 = .x: b1 = .y: End With
    
      Select Case msbLocation
      Case ngay: thang p: nam hw, p
        L = p.x - w / 2: t = p.y - h / 2 - 30: GoSub p: l2 = L: T2 = t + 30
      Case chuky1: L = (w2 - w) / 2: t = (h2 - h) / 2 - 30: GoSub p: l2 = L: T2 = t + 30
      Case chuky5: L = (w2 - w) / 2: GoSub p: l2 = L: T2 = t + 30
      Case chuky7: L = (w2 - w) / 2: t = b1 - h - 20: GoSub p: l2 = L: T2 = t - 30
      Case chuky10:  t = b1 - h - 50: GoSub p: l2 = L + 20: T2 = t
      Case chuky15: t = t + 20: GoSub p: l2 = L + 20: T2 = t
      Case chuky20: L = w2 - w: t = b1 - h - 50: GoSub p: l2 = L - 30: T2 = t
      Case chuky31: L = w2 - w: t = t + 20: GoSub p: l2 = L - 30: T2 = t
      End Select
    End With

    With p: .x = L: .y = t: NgaydenTronNgay hw, p: L = .x: t = .y: End With
    With p: .x = l2: .y = T2: NgaydenTronNgay hw, p: l2 = .x: T2 = .y: End With
    apiTransparent hwnd, 0
    moveWindow hwnd, L, t, w, h, True: DoEvents
    .Left = L: .Top = t: .Right = L + w: .Bottom = t + h
  End With
  newRECT = r
  With newRECT2: .Left = l2: .Top = T2: .Right = l2 + w: .Bottom = T2 + h: End With
  
  SetTimer_VBObjectBox 2, hwnd

Exit Sub
p:
  L = IIf(L < sx.x, sx.x, IIf(L > sp.x, sp.x, L))
  t = IIf(t < sx.y, sx.y, IIf(t > sp.y, sp.y, t))
Return
End Sub
 
Nếu bạn đang áp dụng bước nhảy đẹp (5, 10) thì logic này dễ hiểu, ví dụ:
1) + bước nhảy 10:
1,11,21,1,...
5,15,26,30,5...
2) hay bước nhảy 5 (với ngày bắt đầu tròn 5)
5,10,15,20,25,30,5,...
Tuy nhiên, nếu bước nhảy khác, ví dụ 3,4,... hoặc bước nhảy 5 nhưng ngày bắt đầu khác, ví dụ:
3) 2,5,8,11,...(bước 3)
4) 4,9,14,19,24,29,3,8,...(bước 5)
thì đơn giản chỉ là ngày bắt đầu cộng thêm 1 bội số của bước.
Nếu ý của bạn là như vậy thì trong công thức cần tách ra các trường hợp riêng biệt để xét.
VD:
IF(bước=10, ...
IF( bước=5,...
Dạ a nói đúng rồi đó anh
 
Web KT

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

Back
Top Bottom