=DATE($B$3,1,($B$1-1)*7+CHOOSE(WEEKDAY(DATE($B$3,1,1),2),0,-1,-2,-3,3,2,1)+$B$2)
Cú pháp hàm tự tạo: = Convertdate(Năm, Tuần, Thứ)Function ConvertDate(mYear As Integer, mWeek As Integer, mDay As Integer) As Date
Dim iDays As Integer, iNumDays As Integer
iDays = Choose(Weekday(DateSerial(mYear, 1, 1), vbMonday), 0, -1, -2, -3, 3, 2, 1)
iNumDays = (mWeek - 1) * 7 + iDays + mDay
ConvertDate = DateAdd("d", iNumDays - 1, DateSerial(mYear, 1, 1))
End Function
Đâu có đúng đâu chứVí dụ:
Ô B1 ta gõ Weeknum
Ô B2 ta gõ weekday (quy ước Monday = 1 nhé)
Ô B3 ta gõ Năm.
Công thức để chuyển sang ngày thỏa mãn ba điều kiện đó như sau:
=DATE(2010,1,1)-WEEKDAY(DATE(2010,1,1))+ 2+(WEEKNUM(A1)-1)*7
Chẳng quan trọng gì ---> Vấn đề là Thuật toánXin lỗi ST-Lu! Mình làm xong mới thấy đây là box VBA.
Bạn thử công thức này với :A1 : nhập năm 2009 , 2010 .. ; A2 : tuần thứ ; A3: thứ mấy ( ví dụ thứ 2 là 2 , thứ 3 là 3 ,...,Chủ nhật tùy)Ví dụ: hiện tại weeknum(today()) đang ở tuần thứ 28
Làm sao em biết được thứ hai rơi vào ngày bao nhiêu cụ thể thứ 2 tuần 28 rơi vào 05/07/2010
Đâu có đúng đâu chứ
Tuần thứ 2 của năm 2010, ngày thứ 2 là ngày là ngày 4/1 cơ mà (của Kiệt ra kết quả ngày 11/1)
Tôi nghĩ nó phải vầy:
---------------------PHP:=DATE(2010,1,1)-WEEKDAY(DATE(2010,1,1))+ 2+(WEEKNUM(A1)-1)*7
Chẳng quan trọng gì ---> Vấn đề là Thuật toán
Ví dụ:
Ô B1 ta gõ Weeknum
Ô B2 ta gõ weekday (quy ước Monday = 1 nhé)
Ô B3 ta gõ Năm.
Công thức để chuyển sang ngày thỏa mãn ba điều kiện đó như sau:
Từ đó có thể viết Code lại như sau:
Cú pháp hàm tự tạo: = Convertdate(Năm, Tuần, Thứ)
Lưu ý: Công thức này dùng quy ước Monday = 1
Function ConvertDate(mYear As Integer, mWeek As Integer, mDay As Integer) As Date
Dim iDays As Integer, iNumDays As Integer
iDays = Choose(Weekday(DateSerial(mYear, 1, 1), vbMonday), 0, -1, -2, -3, 3, 2, 1)
iNumDays = (mWeek - 2) * 7 + iDays + mDay
ConvertDate = DateAdd("d", iNumDays - 1, DateSerial(mYear, 1, 1))
End Function
- các già trị mình lấy cho Idays là 0, -1, -2, -3, 3, 2, 1 --> tại sao lại như vậy?
- Em chưa hiểu về thuật toán trên, anh giảng qua em chút
P.s: Code của Anh nếu sửa lại thành -2 thì đúng anh ạh
Diễn giải như sau:Choose(Weekday(DateSerial(mYear, 1, 1), vbMonday), 0, -1, -2, -3, 3, 2, 1)
Anh ndu ơi cho em hỏi xíu, Weeknum(A1), anh nói thêm A1 là ngày nào? Công thức của anh quá hay!
Có thể thay con số màu đỏ để tìm những ngày khác. Ví dụ, muốn biết thứ Ba là ngày mấy thì thay số 3, thứ Tư thì thay số 4... Chủ Nhật thì thay số 1.ndu96081631 đã viết:=DATE(2010,1,1)-WEEKDAY(DATE(2010,1,1))+2+(WEEKNUM(A1)-1)*7
Với X = X trong câu hỏi.=DATE(2010,1,1) - WEEKDAY(DATE(2010,1,1)) + 2 + (X -1)*7
=DATE(2010,1,1) - WEEKDAY(DATE(2010,1,1)) + Y + (X -1)*7
Trong quá trình thí nghiệm, tại cột A tôi gõ ngày từ 1 đến cuối năm nên A1 là 1 ngày nào đó thôiAnh ndu ơi cho em hỏi xíu, Weeknum(A1), anh nói thêm A1 là ngày nào? Công thức của anh quá hay!
=DATE(2010,1,1)-WEEKDAY(DATE(2010,1,1))+ 2+(ROWS($1:1)-1)*7
Ví dụ:=DATE(NAM,1,1)-(WEEKDAY(DATE(NAM,1,1))+THU)+(TUAN-1)*7
Nếu cần tìm ngày chủ nhật, tuần 29, năm 2010 thì kết quả sẽ là 11/7/2010=DATE(B3,1,1)-WEEKDAY(DATE(B3,1,1))+B2+(B4-1)*7
Thì cũng y chang như trên thôi chứ có gì khác "đặc biệt" đâu đồng chí?Với quy ước ngày chủ nhật là số 1 (là ngày đầu tuần), thứ 2 là số 2 thì công thức của mình như sau:
Ví dụ:
Ô B2 là thứ cần tìm
Ô B3 là năm
Ô B4 là tuần thì công thức cụ thể tìm là:
Nếu cần tìm ngày chủ nhật, tuần 29, năm 2010 thì kết quả sẽ là 11/7/2010
Tương tự như vậy, Chủ Nhật tuần 53 năm 2010 nhằm ngày 26/12/2010
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2