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ả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ề!
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!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ả
A2 = today()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ề!
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 :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!
=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))
=SMALL(IF(WEEKDAY(EOMONTH(TODAY(),ROW(INDIRECT("1:1000"))-500)+13)=6,EOMONTH(TODAY(),ROW(INDIRECT("1:1000"))-500)+13),ROW(A1))
Góp vui: Chỉ lấy 10 ngày như kết quả của anh gửi.VBA cho kết quả vầy nè:
STT Ngày Thứ 10 4/13/2018 68 7/13/2018 66 9/13/2019 64 12/13/2019 63 3/13/2020 61 11/13/2020 62 8/13/2021 65 5/13/2022 67 1/13/2023 69 10/13/2023 6
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())
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.Ô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!
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: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ề!
=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))
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./(ế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!
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
Một tháng chỉ có một ngày 13. Chỉ cần lấy một lần ngày 13, sau có cứ +/- tháng (hàm DateAdd)Mình thử viết hàm mảng tự tạo & có nội dung sau:
PHP:... For J = 1 To 10000 If Day(J + Dat) = 13 And Weekday(J + Dat) = 6 Then ...
STT | Ngày | Del ta | |||||||||||||||
1 | 12/13/19 | -45 | =T6N13(DATE(2020,1,27)) | ||||||||||||||
2 | 03/13/20 | 46 | |||||||||||||||
3 | 09/13/19 | -136 | |||||||||||||||
4 | 11/13/20 | 291 | |||||||||||||||
5 | 07/13/18 | -563 | |||||||||||||||
6 | 08/13/21 | 564 | |||||||||||||||
7 | 04/13/18 | -654 | |||||||||||||||
8 | 10/13/17 | -836 | |||||||||||||||
9 | 05/13/22 | 837 | |||||||||||||||
10 | 01/13/23 | 1082 |
Em góp vui với hàm tự tạo dựa theo ý tưởng của thầy VetMini với hàm tự tạo của thầy SA_DQMột tháng chỉ có một ngày 13. Chỉ cần lấy một lần ngày 13, sau có cứ +/- tháng (hàm DateAdd)
Function T6N13_2(Dat As Date, Count As Long)
ReDim Arr(1 To Count, 1 To 3)
Dim i As Long, j As Long, Year_Dat As Long
Dim W As Long
i = Month(Dat)
j = Month(Dat)
Year_Dat = Year(Dat)
Do Until W = Count
If (Weekday(DateSerial(Year_Dat, i, 13))) = 6 Then
W = W + 1
Arr(W, 1) = W
Arr(W, 2) = Format(DateSerial(Year_Dat, i, 13))
Arr(W, 3) = DateDiff("d", Dat, DateSerial(Year_Dat, i, 13))
End If
If W = Count Then Exit Do
If (Weekday(DateSerial(Year_Dat, j, 13))) = 6 Then
W = W + 1
Arr(W, 1) = W
Arr(W, 2) = Format(DateSerial(Year_Dat, j, 13))
Arr(W, 3) = DateDiff("d", Dat, DateSerial(Year_Dat, j, 13))
End If
i = i + 1: j = j - 1
Loop
T6N13_2 = Arr()
End Function
Hẳn là cách đó rất nhanh, cháu đang nghĩ xem có thể sài dic được không mà khó quátháng chỉ có một ngày 13. Chỉ cần lấy một lần ngày 13, sau có cứ +/- tháng (hàm DateAdd)
Nếu vậy thì chỉ cần xét số nào kiểm tra trước, số nào kiểm tra sau thôi, đỡ hơn là kiểm tra từng ngày.Lúc đầu mình cũng định đi theo hướng như vậy, nhưng 1 vài trường hợp cụ thể thì không thỏa yêu cầu & sẽ bị ai đó khó tính cự nự:
Function T6N13(Dat As Date)
Dim Arr(1 To 10, 1 To 3)
Dim a As Long, z As Long, i As Date, k As Long, d As Long, m As Long, y As Long
d = Day(Dat): m = Month(Dat): y = Year(Dat)
If d < 13 Then a = -1
z = a + 1
Do Until k = 10
If Dat - DateSerial(y, m + a, 13) < DateSerial(y, m + z, 13) - Dat Then
i = DateSerial(y, m + a, 13): a = a - 1
Else
i = DateSerial(y, m + z, 13): z = z + 1
End If
If Weekday(i) = 6 Then
k = k + 1: Arr(k, 2) = Format(i, "dd/mm/yyyy")
Arr(k, 1) = k: Arr(k, 3) = i - Dat
End If
Loop
T6N13 = Arr
End Function
=LET(MyDay,$B$1-SEQUENCE(5000),MDate1,TEXT(MyDay,"DDD"),MDate2,TEXT(MyDay,"DD"),mRange,FILTER(MyDay,(MDate1="Fri")*(MDate2="13"),"Not Found"),mOrder,SEQUENCE(COUNTA(mRange)),FILTER(mRange,mOrder<=$B$2,"Not Found"))
=LET(MyDay,$B$1+SEQUENCE(5000),MDate1,TEXT(MyDay,"DDD"),MDate2,TEXT(MyDay,"DD"),mRange,FILTER(MyDay,(MDate1="Fri")*(MDate2="13"),"Not Found"),mOrder,SEQUENCE(COUNTA(mRange)),FILTER(mRange,mOrder<=$B$2,"Not Found"))
=LET(Array1,OFFSET($A4,,,$B$2),Array2,OFFSET($B4,,,$B$2),ColToAppend,CHOOSE({1,2},Array1,Array2),FILTER(INDEX(ColToAppend,MOD(SEQUENCE(ROWS(ColToAppend)*COLUMNS(ColToAppend),,0),ROWS(ColToAppend))+1,SEQUENCE(ROWS(ColToAppend)*COLUMNS(ColToAppend),,0,1/ROWS(ColToAppend))+1),NOT(ISERROR(INDEX(ColToAppend,MOD(SEQUENCE(ROWS(ColToAppend)*COLUMNS(ColToAppend),,0),ROWS(ColToAppend))+1,SEQUENCE(ROWS(ColToAppend)*COLUMNS(ColToAppend),,0,1/ROWS(ColToAppend))+1)))))
Dạo này có tuổi nên HÀM yếu lắm rồi bác, mà vẫn xin 3 xị rượu nhé bác Sa, hẹn 1 ngày gần nhất ở SG.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ề!
Nếu đã có 2 danh sách ở A4 và B4 thì nối lại như sau:Nối 2 danh sách bên trên lại thành 1 danh sách gom bỏ vô trong 1 cột (Kiểu như "append data"):
Nay bần lão được thọ giáo chiêu A4# (thay cho offset) của tiên sinh, quả thật khâm phục, khâm phục!Nếu đã có 2 danh sách ở A4 và B4 thì nối lại như sau:
=LET(db,A4#,da,B4#,rwb,ROWS(db),rwa,ROWS(da),IF(SEQUENCE(rwb+rwa)<=rwb,INDEX(db,SEQUENCE(rwb+rwa),1),INDEX(da,SEQUENCE(rwb+rwa)-rwb,1)))
Vì bài này mảng là Date nên có thể dùng cách này để gom 2 mảngBần đạo tu trên núi lâu quá không biết bằng hữu đàm đạo chuyện này. Thôi thì góp vui vậy. Lưu ý dùng excel phiên bản tầng thứ 9 cửu âm chân kinh 365 mới được.
Cho trước 1 ngày cột mốc nào đó (ví dụ hôm nay), Cho trước số lần tìm Thứ Sáu ngày 13 (ví dụ 10 ngày),
Danh sách các ngày thứ sáu 13 trở về trước (trước ngày cột mốc):
Danh sách các ngày thứ sáu 13 trở về sau (sau ngày cột mốc):
Nối 2 danh sách bên trên lại thành 1 danh sách gom bỏ vô trong 1 cột (Kiểu như "append data"):
View attachment 265746
=LET(a,A4#,b,B4#,SMALL((a,b),SEQUENCE(COUNT(a,b))))
Nếu đặt thêm biến nữa công thức sẽ gọn, so index thì 2 mảng không cùng cấu trúc vẫn được vì nó luôn xét từ trên xuốngNếu đã có 2 danh sách ở A4 và B4 thì nối lại như sau:
=LET(db,A4#,da,B4#,rwb,ROWS(db),rwa,ROWS(da),IF(SEQUENCE(rwb+rwa)<=rwb,INDEX(db,SEQUENCE(rwb+rwa),1),INDEX(da,SEQUENCE(rwb+rwa)-rwb,1)))
=LET(db,A4#,da,B4#,lst,SEQUENCE(ROWS(db)+ROWS(db))-ROWS(db),IF(lst<=0,db,INDEX(da,lst)))
=LET(td,TODAY(),n,10,l_date,td+SEQUENCE(10001)-5001,l_filter,FILTER(l_date,TEXT(l_date,"dd ddd")="13 Fri"),pst,MATCH(td,l_filter),INDEX(l_filter,SEQUENCE(n*2)-n+pst))
Khà khà khà, đúng là ngọa hổ tàng long. Mong anh em bằng hữu có dịp đàm đạo luận kiếm, cầm tay uống rượu!Góp vui dùng 365 cho bài này không tách khớp
Mã:=LET(td,TODAY(),n,10,l_date,td+SEQUENCE(10001)-5001,l_filter,FILTER(l_date,TEXT(l_date,"dd ddd")="13 Fri"),pst,MATCH(td,l_filter),INDEX(l_filter,SEQUENCE(n*2)-n+pst))
=IF(ROWS(A$1:A1)<11,AGGREGATE(14,6,(EDATE(EDATE(TODAY()-DAY(TODAY())+13,-(DAY(TODAY())<=13)),1-ROW($1:$120)))/
(WEEKDAY(EDATE(EDATE(TODAY()-DAY(TODAY())+13,-(DAY(TODAY())<=13)),1-ROW($1:$120)))=6),11-ROWS(A$1:A1)),
IF(ROWS(A$1:A1)<21,AGGREGATE(15,6,(EDATE(EDATE(TODAY()-DAY(TODAY())+13,--(DAY(TODAY())>13)),ROW($1:$120)-1))/(WEEKDAY(EDATE(EDATE(TODAY()-DAY(TODAY())+13,--(DAY(TODAY())>13)),ROW($1:$120)-1))=6),ROWS(A$1:A1)-10),""))
Mình viết code thấy nó ngắn gọn sao các bác viết dài thòn vậy ta?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
Sub Test()
Dim arrDate()
Dim n As Long
Dim d As Date, dteFromDate As Date, dteToDate As Date
dteFromDate = Date
dteToDate = DateSerial(2031, 12, 31)
For d = dteFromDate To dteToDate
If Weekday(d) = 6 And Day(d) = 13 Then
n = n + 1
ReDim Preserve arrDate(1 To n)
arrDate(n) = d
If n = 10 Then Exit For
End If
Next
Range("F5").Resize(n).Value = WorksheetFunction.Transpose(arrDate)
End Sub
Có năm có 1, có năm có 2, 3 thứ 6 ngày 13. Trong công thức ở bài #35 tôi lấy trung bìng là 1 năm 1 lần thứ 6 ngày 13. Vì thế để xét 10 lần thứ 6 ngày 13 thì tôi xét 10 năm, tức 120 tháng. Vì thế có con số 120 - ROW($1:$120)Mình không biết dùng hàm mình ngồi mình đếm thủ công tầm 10 năm từ 1/1/2021 đến 31/12/2031 thì có 17 ngày thứ sáu ngày 13:
View attachment 265791
Từ hiện tại phải dò theo 2 hướng chứ bạn?Mình viết code thấy nó ngắn gọn sao các bác viết dài thòn vậy ta?
PHP:Sub Test() Dim arrDate() Dim n As Long Dim d As Date, dteFromDate As Date, dteToDate As Date dteFromDate = Date dteToDate = DateSerial(2031, 12, 31) For d = dteFromDate To dteToDate If Weekday(d) = 6 And Day(d) = 13 Then n = n + 1 ReDim Preserve arrDate(1 To n) arrDate(n) = d If n = 10 Then Exit For End If Next Range("F5").Resize(n).Value = WorksheetFunction.Transpose(arrDate) End Sub
Hướng nào và hướng nào?Từ hiện tại phải dò theo 2 hướng chứ bạn?
Function FindFriday13th(ByVal intCount As Integer) As Variant
Dim arrDate(), d As Date, n As Long
d = Date
Do
If Weekday(d) = 6 And Day(d) = 13 Then
n = n + 1
ReDim Preserve arrDate(1 To n)
arrDate(n) = d
If n = intCount Then Exit Do
End If
d = d + 1
Loop
FindFriday13th = WorksheetFunction.Transpose(arrDate)
End Function
Thì chủ thớt đã nói rồi đó chi. Gần nhất 10 ngày là phải tính 5 ngày từ hiện tại đến tương lai + 5 ngày từ hiện tại đến quá khứ.Hướng nào và hướng nào?
Còn dùng hàm còn ngắn gọn hơn nữa!
PHP:Function FindFriday13th(ByVal intCount As Integer) As Variant Dim arrDate(), d As Date, n As Long d = Date Do If Weekday(d) = 6 And Day(d) = 13 Then n = n + 1 ReDim Preserve arrDate(1 To n) arrDate(n) = d If n = intCount Then Exit Do End If d = d + 1 Loop FindFriday13th = WorksheetFunction.Transpose(arrDate) End Function
Nếu như trong bài đếm số lượng 10 ngày gần đây nhất thì công thức: =FindFriday13th(10)
Dễ òm chứ gì, sắp xếp theo trình tự thời gian luôn nè.Thì chủ thớt đã nói rồi đó chi. Gần nhất 10 ngày là phải tính 5 ngày từ hiện tại đến tương lai + 5 ngày từ hiện tại đến quá khứ.
Function Find2DFriday13th(ByVal intCount As Integer) As Variant
Dim intBefore As Integer, intAfter As Integer
Dim arrDate, d1 As Date, d2 As Date, blnLimit As Boolean
ReDim arrDate(1 To intCount, 1 To 1) As Date
d1 = Date: d2 = d1
intBefore = Fix(intCount / 2): intAfter = intBefore
Do
If Not blnLimit Then
If Weekday(d1) = 6 And Day(d1) = 13 Then
arrDate(intBefore, 1) = d1
intBefore = intBefore - 1
If intBefore = 0 Then blnLimit = True
End If
d1 = d1 - 1
Else
If Weekday(d2) = 6 And Day(d2) = 13 Then
intAfter = intAfter + 1
arrDate(intAfter, 1) = d2
If intAfter = intCount Then Exit Do
End If
d2 = d2 + 1
End If
Loop
Find2DFriday13th = arrDate
End Function
Function Find2DFriday13th_New(ByVal intCount As Integer) As Variant
Dim arrDate, d As Date, intBefore As Integer, intAfter As Integer
ReDim arrDate(1 To intCount, 1 To 1) As Date
intBefore = Fix(intCount / 2): intAfter = intBefore: d = Date
Do
d = IIf(intBefore, d - 1, d + 1)
If Weekday(d) = 6 And Day(d) = 13 Then
If intBefore > 0 Then
arrDate(intBefore, 1) = d
intBefore = intBefore - 1
If intBefore = 0 Then d = Date
Else
intAfter = intAfter + 1
arrDate(intAfter, 1) = d
End If
End If
Loop Until intAfter = intCount
Find2DFriday13th_New = arrDate
End Function
Mấy cái code này thế giới giải đầy ra rồi vụ thứ sáu ngày 13. chỉ là tập thể dục thôi. Dài ngắn quan trọng gì.Bài đã được tự động gộp:
Mình viết code thấy nó ngắn gọn sao các bác viết dài thòn vậy ta?
Function Find2DFriday13th_HTN(ByVal intCount As Integer) As Variant
Dim arrDate, d As Date, intBefore As Integer, intAfter As Integer
ReDim arrDate(1 To intCount, 1 To 1) As Date
intBefore = Fix(intCount / 2): intAfter = intBefore
d = DateSerial(Year(Date), Month(Date), 13)
Do
d = DateSerial(Year(d), Month(d) + IIf(intBefore, -1, 1), 13)
If Weekday(d) = 6 Then
If intBefore > 0 Then
arrDate(intBefore, 1) = d
intBefore = intBefore - 1
If intBefore = 0 Then d = DateSerial(Year(Date), Month(Date) - 1, 13)
Else
intAfter = intAfter + 1
arrDate(intAfter, 1) = d
End If
End If
Loop Until intAfter = intCount
Find2DFriday13th_HTN = arrDate
End Function
Nói có sách, mách có chứng, xin nguồn.Mấy cái code này thế giới giải đầy ra rồi vụ thứ sáu ngày 13. chỉ là tập thể dục thôi. Dài ngắn quan trọng gì.
Ngon viết thứ sáu ngày 20 đi. Nhớ viết bằng công thức nha. Yêu cầu của thớt là công thức. còn VBA thì người ta giải cách đây 20 năm rồi.
Topic này yêu cầu là công thức mà các hạ!???? VBA ai chả biết!Ủa mà quên, mỗi tháng chỉ có một ngày 13 duy nhất, mắc mớ gì mình tính theo ngày chi ta? Cập nhật lại:
PHP:Function Find2DFriday13th_HTN(ByVal intCount As Integer) As Variant Dim arrDate, d As Date, intBefore As Integer, intAfter As Integer ReDim arrDate(1 To intCount, 1 To 1) As Date intBefore = Fix(intCount / 2): intAfter = intBefore d = DateSerial(Year(Date), Month(Date), 13) Do d = DateSerial(Year(d), Month(d) + IIf(intBefore, -1, 1), 13) If Weekday(d) = 6 Then If intBefore > 0 Then arrDate(intBefore, 1) = d intBefore = intBefore - 1 If intBefore = 0 Then d = DateSerial(Year(Date), Month(Date) - 1, 13) Else intAfter = intAfter + 1 arrDate(intAfter, 1) = d End If End If Loop Until intAfter = intCount Find2DFriday13th_HTN = arrDate End Function
Bài đã được tự động gộp:
Nói có sách, mách có chứng, xin nguồn.
Còn hiện tại ở bài này, ngắn thì nói ngắn.
Ủa các hạ không để ý sao? Tôi trích bài #20 của chính tác giả, và tác giả dùng VBA để viết hàm, nên tôi mới dùng VBA để so sánh. Mà GPE đã từng có tiền lệ ai viết code ngắn nhất và có thời gian nhanh nhất hay sao??????Topic này yêu cầu là công thức mà các hạ!???? VBA ai chả biết!
À, nếu so ngắn dài, thì ngắn bằng này hông các hạ?? Viết code VBA chi cho dài dòng vậy cà!Ủa các hạ không để ý sao? Tôi trích bài #20 của chính tác giả, và tác giả dùng VBA để viết hàm, nên tôi mới dùng VBA để so sánh. Mà GPE đã từng có tiền lệ ai viết code ngắn nhất và có thời gian nhanh nhất hay sao??????
LET(td,TODAY(),n,10,l_date,td+SEQUENCE(10001)-5001,l_filter,FILTER(l_date,TEXT(l_date,"dd ddd")="13 Fri"),pst,MATCH(td,l_filter),INDEX(l_filter,SEQUENCE(n*2)-n+pst))
Kakakaka, các hạ quá khen rồi, công thức có từng này thôi: =Find2DFriday13th_HTN(10)À, nếu so ngắn dài, thì ngắn bằng này hông các hạ?? Viết code VBA chi cho dài dòng vậy cà!
Nếu code chạy ngày 20.02.2021 thì kết quả sai. Vì không đúng với giả thiết là liệt kê 5 ngày trước và 5 ngày sau ngày hiện hành. Kết quả trên có 6 ngày trước và 4 ngày sau ngày hiện hành.VBA cho kết quả vầy nè:
STT Ngày Thứ 10 4/13/2018 68 7/13/2018 66 9/13/2019 64 12/13/2019 63 3/13/2020 61 11/13/2020 62 8/13/2021 65 5/13/2022 67 1/13/2023 69 10/13/2023 6
Bài #20 không tính vì lúc đó trạng thái là đã uống hết 1 xị rồi (ngồi đợi quen tay cứ rót thôi). Muốn biết lúc tỉnh táo thế nào thì xem bài #1Ủa các hạ không để ý sao? Tôi trích bài #20 của chính tác giả, và tác giả dùng VBA để viết hàm, nên tôi mới dùng VBA để so sánh.
Sẽ có 3 xị rượu cho ai giải đúng & sớm nhất bằng công thức!
Vẫn còn dài lắm các hạ ơi!Code VBA thì ngắn từng này thôi (nếu xét về độ ngắn)
Sub ChaubaThong()
Sheet1.[A1].Formula2 = "=LET(td,TODAY(),n,10,l_date,td+SEQUENCE(10001)-5001,l_filter,FILTER(l_date,TEXT(l_date,""dd ddd"")=""13 Fri""),pst,MATCH(td,l_filter),INDEX(l_filter,SEQUENCE(n*2)-n+pst))"
End Sub
Khà khà khà
Bài đã được tự động gộp:
Google sheet thì qua Google sheet chơi cho vui đi, vô đây làm gì ta!?? Excel 365 là Excel 365, chẳng lẽ quay lại excel 2003, hay thích quay lại Lotus 123??? Mà thôi, VBA sắp lạc hậu rồi các hạ à!
Sub N()
[A1].Resize(20).Formula = Find2DFriday13th_HTN(20)
End Sub
Đây là code ăn gian.Code VBA thì ngắn từng này thôi (nếu xét về độ ngắn)
befaint có lý mà. Nếu so sánh ngắn gài, nhanh chậm thì phải xét trong cùng bối cảnh. Vd. phải cùng phiên bản. Nếu so sánh phiên bản 365 với 2010 thì khác gì anh chơi cờ mà lại có lợi con xe. Mà dùng 365 thì hỏa lực của anh hạn chế rồi. Có rất nhiều người không chạy được công thức dùng 365.Mấy bài nhảm nhàm không liên quan không có ích cho diễn đàn, hy vọng các cao nhân soi sét dẹp bớt cho thiên hạ thái bình!
Chúc bác bình an, vui vẻ.Tên bão đó do VN đăng ký, nên phải viết chí ít là Con Son, khà, khà, khà,. . . .
Mình vừa trãi qua 1 đêm ngon giấc đó bạn!
Chúc 1 buổi sáng tốt lành!