Làm sao biết ngày đầu tuần (thứ 2) của tuần thứ x là ngày bao nhiêu?

Thảo luận trong 'Lập Trình với Excel' bắt đầu bởi ST-Lu!, 9 Tháng bảy 2010.

  1. ST-Lu!

    ST-Lu! Love Wingchun

    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
     
  2. cadafi

    cadafi New Style! New Life!

    Conv

    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
     

    Các file đính kèm:

    Last edited: 9 Tháng bảy 2010
  3. ST-Lu!

    ST-Lu! Love Wingchun

    Hu hu, khó quá. Chuyển về code giúp em được không
    - Bài toán là biết ngày thứ mấy (ví dụ thứ 2) biết tuần
    - Tìm ngày thứ bao nhiều ví dụ: 05/07/2010

    Cám ơn Anh Ca_dafi
     
    Last edited: 9 Tháng bảy 2010
  4. ndu96081631

    ndu96081631 Well-Known Member

    Đâ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
     
  5. cadafi

    cadafi New Style! New Life!

    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!
     
  6. le tin

    le tin Học mãi

    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)


    =DATE(A1;1;1)-WEEKDAY(DATE(A1;1;1);1)+IF(A3<8;A3;8)+7*(A2-1)
     
  7. Tường_Vi

    Tường_Vi New Member

    Anh NDU ơi, em chưa hiểu công thức trên dùng như nào,
    ở đây em hiểu WEEKNUM(A1) mà A1 ở đây là số tuần phải không? hay A1 là gì ạh?
     
  8. Tường_Vi

    Tường_Vi New Member

    Chị Ca_dafi ơi
    Công thức của Chị bị lệch mất một ngày (ngay ở trong file của chị) tuần 28 thứ 2 là 05/07/2010 chị ạh (trong file của chị nó thể hiện là 12/07/10
     
  9. ST-Lu!

    ST-Lu! Love Wingchun

    PHP:
    Function ConvertDate(mYear As IntegermWeek As IntegermDay As Integer) As Date
    Dim iDays 
    As IntegeriNumDays As Integer
    iDays 
    Choose(Weekday(DateSerial(mYear11), vbMonday), 0, -1, -2, -3321)
    iNumDays = (mWeek 2) * iDays mDay
    ConvertDate 
    DateAdd("d"iNumDays 1DateSerial(mYear11))
    End Function
    Anh Kiệt ơi
    Em chưa hiểu đoạn này, kém quá
    - 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
     
  10. cadafi

    cadafi New Style! New Life!

    Diễn giải như sau:
    Nếu như ngày đầu năm là thứ hai thì iday=0
    Nếu ngày đầu năm là thứ ba thì iday = -1
    ....
    Nếu như ngày đầu năm là thứ sáu thì iday = 3
    ...
    Nếu như ngày đầu năm là chủ nhật thì iday = 1

    ==>Mục đích để đưa về mức chuẩn là ngày thứ hai để tính.

    Vì vậy, chặt đầu chặt đuôi và phải chặt luôn phần quy chuẩn này, mình quên. Cho nên công thức trên sửa lại là lấy (số tuần - 2) sau đó nhân với 7 ngày là chính xác.

    Đưa về dạng số, ngày 01/01/2010 là 40,179
    vậy ngày thứ ba tuần 28 phải là [40,179 + (28-2)*7] + [thứ tự của thứ] +/- [ảnh hưởng của ngày đầu năm] (cái ảnh hưởng đó là phần Choose(....))
     
    Last edited: 10 Tháng bảy 2010
  11. BNTT

    BNTT Bùi Nguyễn Triệu Tường

    A1 là TODAY() đấy! Là cái ngày nằm trong tuần cần phải tính (ở đây là tuần thứ 28).

    Công thức này rất 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.

    Tuy nhiên, nếu thay A1 = TODAY() thì công thức này chỉ trả lời đươc câu hỏi: Thứ Hai của tuần này là ngày bao nhiêu?.


    Nếu phải trả lời chính xác câu hỏi của tác giả: Thứ Hai của tuần thứ X là ngày bao nhiêu?, thì tôi sẽ dùng công thức này:

    Với X = X trong câu hỏi.

    Hay tổng quát hơn: Để trả lời cho câu hỏi Thứ Y của tuần thứ X là ngày bao nhiêu?, có thể dùng công thức:
     
  12. ndu96081631

    ndu96081631 Well-Known Member

    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ôi
    Với yêu cầu của tác giả thì thay Weeknum(A1) bằng 1 số từ 1 đến 52 (hay 53 gì đó) là được rồi
    Hoặc vầy:
    PHP:
    =DATE(2010,1,1)-WEEKDAY(DATE(2010,1,1))+ 2+(ROWS($1:1)-1)*7
    và kéo fill xuống
    Ở trên chỉ lầ giải thuật, BNTT đã sửa cho tổng quát rồi
    Tuy nhiên:
    - Nên kiểm tra lại 2 cận trên dưới xem có chính xác không? (cận trên là ngày đầu năm và những ngày lân cận nó... Cận dưới là ngày cuối năm và những ngày lân cận nó)
    - Kiểm tra lại các trường hợp cận trên là ngày CN, thứ 2, thứ 3... vân vân...
    ---------------
    Để ý khi viết code thì sai sót thường rơi vào các biên
     
    Last edited: 10 Tháng bảy 2010
  13. solomon2211

    solomon2211 Well-Known Member

    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
     

    Các file đính kèm:

    Last edited: 10 Tháng bảy 2010
  14. ndu96081631

    ndu96081631 Well-Known Member

    Thì cũng y chang như trên thôi chứ có gì khác "đặc biệt" đâu đồng chí?
    Ẹc... Ẹc...
     

Chia sẻ trang này