[Bài tập vui]: Tìm ra mươi ngày 13 rơi vào thứ sáu gần hôm nay nhất!

Liên hệ QC

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia
8/6/06
Bài viết
14,317
Được thích
22,354
Nghề nghiệp
Nuôi ba ba & trùn quế
Sẽ có 3 xị rượu cho ai giải đúng & sớm nhất bằng công thức!

Chúc các bạn vui vẻ & mạnh khỏe nhân dịp xuân về!
 
Gần trong tương lai hay cả quá khứ bác Sa nhỉ?
 
Cả quá khứ nữa chứ!
 
Bác cho hỏi thêm 1 câu, dùng Excel 365 hay phải chơi để Excel 2010 dùng được.
 
Xài 'dao' nào cũng được, miễn là có thể biến gà thành mồi!
 
Sẽ có 3 xị rượu cho ai giải đúng & sớm nhất bằng công thức!

Chúc các bạn vui vẻ & mạnh khỏe nhân dịp xuân về!
Cái này chắc bác sa phải nói rõ ra, công thức excel nhưng dùng một công thức hay thế nào? có cột phụ gì không? chứ chơi kiểu kéo 13/01/1921...13/02/1921.. cho đến 13/12/2121 rồi một cột là weekday(a1,1)=6 cũng kéo hết ra true, xong filter cũng cho kết quả
 
3 xị có thể đổ vô 2 chai mà, bạn!
Cái này chắc bác sa phải nói rõ ra, công thức excel nhưng dùng một công thức hay thế nào? có cột phụ gì không? chứ chơi kiểu kéo 13/01/1921...13/02/1921.. cho đến 13/12/2121 rồi một cột là weekday(a1,1)=6 cũng kéo hết ra true, xong filter cũng cho kết quả
Về công thức thì mình mù, các bạn làm sao cũng xong! Nhưng không lọc à nha!
 
Lần chỉnh sửa cuối:
Sẽ có 3 xị rượu cho ai giải đúng & sớm nhất bằng công thức!

Chúc các bạn vui vẻ & mạnh khỏe nhân dịp xuân về!
A2 = today()

Các ngày sau ngày hiện hành
B2 =SMALL(IF(WEEKDAY(EOMONTH($A$2,ROW($1:$100)-IF(DAY($A$2)>13,1,2))+13)=6,EOMONTH($A$2,ROW($1:$100)-IF(DAY($A$2)>13,1,2))+13,""),ROW(A1))

Các ngày gần nhất trước và sau ngày hiện hành
D2 =LOOKUP(2,1/(IF(WEEKDAY(EOMONTH($A$2,ROW($1:$200)-100)+13)=6,ABS($A$2-EOMONTH($A$2,ROW($1:$200)-100)+13),"")=SMALL(IF(WEEKDAY(EOMONTH($A$2,ROW($1:$200)-100)+13)=6,ABS($A$2-EOMONTH($A$2,ROW($1:$200)-100)+13),""),ROW(A1))),EOMONTH($A$2,ROW($1:$200)-100)+13)
Có khả năng sai với xác suất rất bé

Cả 2 là công thức mảng: Ctrl+Shift+Enter
Copy xống 10 dòng
 

File đính kèm

  • Thu 6 ngay 13.xlsx
    9.2 KB · Đọc: 31
3 xị có thể đổ vô 2 chai mà, bạn!

Về công thức thì mình mù, các bạn làm sao cũng xong! Nhưng không lọc à nha!
Làm đại như này bác à, vì sắp hết giờ nên chưa kịp nghiên cứu thêm zụ abs gì đó nữa :
Mã:
=AGGREGATE(15,6,1/(WEEKDAY(DATE(ROW(INDIRECT("2010:2030")),{1,2,3,4,5,6,7,8,9,10,11,12},13),1)=6)*DATE(ROW(INDIRECT("2010:2030")),{1,2,3,4,5,6,7,8,9,10,11,12},13),ROW(A1))
 
VBA cho kết quả vầy nè:
STTNgàyThứ
10
4/13/2018​
6​
8
7/13/2018​
6​
6
9/13/2019​
6​
4
12/13/2019​
6​
3
3/13/2020​
6​
1
11/13/2020​
6​
2
8/13/2021​
6​
5
5/13/2022​
6​
7
1/13/2023​
6​
9
10/13/2023​
6​
 
Tôi nhớ có luật rằng "Thứ Sáu 13 sẽ nằm vào tháng bắt đầu bằng ngày chủ nhật".
Câu hỏi: có thể dựa vào đó để làm thuật toán?
 
1613817007643.png

Mã:
=SMALL(IF(WEEKDAY(EOMONTH(TODAY(),ROW(INDIRECT("1:1000"))-500)+13)=6,EOMONTH(TODAY(),ROW(INDIRECT("1:1000"))-500)+13),ROW(A1))
Bài đã được tự động gộp:

1613817084698.png


=INDEX($G$12:$G$118,MATCH(SMALL(ABS($G$12:$G$118-TODAY()),ROW(A1)),ABS($G$12:$G$118-TODAY()),0))
Bài đã được tự động gộp:

Chưa chứng mình được là không thể tồn tại hai ngay thỏa mãn điều kiện mà cùng cách ngày hiện tại những lượng bằng nhau, nên công thức chưa ngọt ngào như ý.
 
Lần chỉnh sửa cuối:
VBA cho kết quả vầy nè:
STTNgàyThứ
10
4/13/2018​
6​
8
7/13/2018​
6​
6
9/13/2019​
6​
4
12/13/2019​
6​
3
3/13/2020​
6​
1
11/13/2020​
6​
2
8/13/2021​
6​
5
5/13/2022​
6​
7
1/13/2023​
6​
9
10/13/2023​
6​
Góp vui: Chỉ lấy 10 ngày như kết quả của anh gửi.
Mã:
A1=AGGREGATE(15,6,MOD(AGGREGATE(15,6,ABS(TODAY()-EDATE(EOMONTH(TODAY(),0)+13,61-ROW($1:$121)))*10^6+EDATE(EOMONTH(TODAY(),0)+13,61-ROW($1:$121))/(WEEKDAY(EDATE(EOMONTH(TODAY(),0)+13,61-ROW($1:$121)))=6),ROW($1:$10)),10^6),ROW())
Enter.

Chúc anh em ngày vui.

Thân
 

File đính kèm

  • Thu6Ngay13.xlsx
    8 KB · Đọc: 23
Ôi phải nói là quá ư siêu luôn! Các bạn khác có công nhận với mình không vậy?

& cũng nhờ bài tập này mà mình gặp lại bạn hiền; Lâu nay vắng bóng xứ nào vậy!

Cho biết địa chỉ để mình gởi 3 xị rượu tổ iến đến bạn & hạn ngạch thới gian là 1 tháng; Cũng có thể đến nhận thưởng tại nhà luôn nha, khi đó báo trước 1 buổi để còn chuẩn bị mồi!
 
Ôi phải nói là quá ư siêu luôn! Các bạn khác có công nhận với mình không vậy?

& cũng nhờ bài tập này mà mình gặp lại bạn hiền; Lâu nay vắng bóng xứ nào vậy!

Cho biết địa chỉ để mình gởi 3 xị rượu tổ iến đến bạn & hạn ngạch thới gian là 1 tháng; Cũng có thể đến nhận thưởng tại nhà luôn nha, khi đó báo trước 1 buổi để còn chuẩn bị mồi!
Dạ! tại anh thương em út nên mới khen như vậy, chứ lúc này trên diễn đàn của mình xuất hiện nhiều sao sáng và lạ nữa, còn em của anh thì rút lui vào bóng râm ở ẩn rồi anh. Lâu rồi mở trang GPE ra thấy anh có câu đố nên ngứa tay ngứa chân mà giải đố cho vui chung với anh em, chứ bài em giải 'dài ngoằn ngoèo' có hay gì đâu anh.

Xứ em ở mới bị bão tuyết nên mất điện, mất nước đang nằm co ro chờ ngày bình minh đến. Vừa may có điện, lướt qua 'nhà cũ' lại gặp anh 'nắm đầu kéo vô'.
Vậy em xin lưu giữ thịnh tình của anh dành cho em, hẹn một ngày không còn 'mắc dịch' nữa anh em hội mình sẽ tái hội.

Chúc anh và anh em sức khỏe, nhiều, càng nhiều, càng càng nhiều sức khỏe và may mắn, vui tươi.

Em của anh.
 
Sẽ có 3 xị rượu cho ai giải đúng & sớm nhất bằng công thức!

Chúc các bạn vui vẻ & mạnh khỏe nhân dịp xuân về!
Em cũng làm thử, nhưng kết quả có vẻ khác của bác lấy trước tháng 2/2021 5 ngày, sau tháng 2/2021 cũng 5 ngày:
Mã:
=SMALL(AGGREGATE({15,14},6,TEXT(MID(SUBSTITUTE(TEXT(EOMONTH(TODAY(),ROW($1:$150)-75)+13,"ddd ddmmmy"),"Fri",REPT(" ",11)),13,7),{"[<","[>="}&TODAY()&"];")^{1,-1}*{-1,1},ROW($1:$5))^{1,-1}*{-1,1},ROW(1:1))
 
Lần chỉnh sửa cuối:
/(ết quả do VBA đưa lại là không thể chối cải, nha! Nó tính ngay từ mốc ngày hiện hành luôn & đi theo 2 chiều âm & dương.
Gặp ngày nào trước là nó đưa vô danh sách thôi. (& nó thoát khi đã hoàn thành nhiệm vụ đề ra - không thiếu hay không dư)

Rất cảm ơn bạn nhiều!

Chúc các bạn vui, khỏe & hạnh phúc!
 
/(ết quả do VBA đưa lại là không thể chối cải, nha! Nó tính ngay từ mốc ngày hiện hành luôn & đi theo 2 chiều âm & dương.
Gặp ngày nào trước là nó đưa vô danh sách thôi. (& nó thoát khi đã hoàn thành nhiệm vụ đề ra - không thiếu hay không dư)

Rất cảm ơn bạn nhiều!

Chúc các bạn vui, khỏe & hạnh phúc!
Của em dựa vào tiêu chí trước và sau, nên cũng không chính xác lắm nếu xét theo ngày gần nhất. Nếu dựa vào ngày gần nhất thì sẽ phải trừ cho ngày hiện tại và tìm 10 ngày sát nhất.
Chắc em đã hiểu nhầm vấn đề :eek: :eek:
 
Đây là code mình làm. Mình làm 2 phương án :
1. Tìm thứ 6 gần nhất theo ngày hiện tại hệ thống
2. Tìm thứ 6 gần nhất theo cách nhập vào 1 ngày bất kỳ
 

File đính kèm

  • Tim Ngay T6 Gan Nhat.xlsm
    16.6 KB · Đọc: 14
Cách của bạn chỉ tìm 1 trong mười ngày đó mà thôi;
Đề bài là tìm cả mười ngày thứ sáu 13 gần nhất trong 1 lúc cơ!

Mình thử viết hàm mảng tự tạo & có nội dung sau:
PHP:
Function T6N13(Optional Dat As Date)
 ReDim Arr(1 To 10, 1 To 3)
 Dim J As Long, W As Integer
 
 If Dat < 9 Then Dat = Date
 If Day(Dat) = 13 Then Dat = Dat - 1
 For J = 1 To 10000
 If Day(J + Dat) = 13 And Weekday(J + Dat) = 6 Then
    W = W + 1:                  Arr(W, 2) = Format(J + Dat, "MM/DD/yy")
    Arr(W, 3) = J:              Arr(W, 1) = W
 End If
 If W = 10 Then Exit For
 If Day(Dat - J) = 13 And Weekday(Dat - J) = 6 Then
    W = W + 1:                  Arr(W, 2) = Format(Dat - J, "MM/DD/yy")
    Arr(W, 3) = Space(1) & -J:  Arr(W, 1) = W
 End If
 If W = 10 Then Exit For
 Next J
 T6N13 = Arr()
End Function
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom