Tuần thứ mấy trong năm

Liên hệ QC

bun_bo_hue

Thành viên chính thức
Tham gia
31/12/09
Bài viết
78
Được thích
11
Chào cả nhà GPE,

Do một số lý do nên tui kô thể nào xài hàm WEEKNUM trong Analysis Toolpack được. Nêu tui muốn viết 1 hàm tương tự như WEEKNUM. Các bác cao thủ EXCEL giúp mình với.

Chân thành cảm tạ. }}}}}
 
Lấy tuần hiện hành:

=1+INT((TODAY()-( DATE(YEAR(TODAY()),1,2)-WEEKDAY(DATE(YEAR(TODAY()),1,1))))/7)

Lấy tuần theo 1 ngày nào đó ví dụ A1 chứ ngày

=1+INT((A1-( DATE(YEAR(A1),1,2)-WEEKDAY(DATE(YEAR(A1),1,1))))/7)

P/S: Bạn nên mua đĩa Office về để đưa cái Analysis Toolpack cho nó linh hoạt hơn nhé
 
Bạn kiểm theo hàm sau:

Mã:
Option Explicit
[B]Function GPEWeekNum(Dat As Date) As Integer[/B]
 Dim Jj As Byte, DauNam As Date, SoNgay As Integer
    
 DauNam = DateSerial(Year(Dat), 1, 1)
 For Jj = 0 To 7
   If Weekday(DauNam + Jj) = 1 Then Exit For
 Next Jj
 SoNgay = Dat - DauNam - Jj
 GPEWeekNum = SoNgay \ 7 + IIf(SoNgay < 0, 1, 2)
[B]End Function[/B]

|Date|WEEKNUM|WEEKDAY|GPEWeekNum|
|12/31/2009|53|5|53|
|1/1/2010|1|6|1|
|1/2/2010|1|7|1|
| 1/3/2010 |2| 1 |2|
|1/4/2010|2|2|2|
|2/4/2010|6|5|6|
|3/8/2010|11|2|11|
|4/9/2010|15|6|15|
|5/11/2010|20|3|20|
|6/12/2010|24|7|24|
|7/14/2010|29|4|29|
|8/15/2010|34|1|34|
|9/16/2010|38|5|38|
|10/18/2010|43|2|43|
|11/19/2010|47|6|47|
|12/21/2010|52|3|52|
|1/22/2011|4|7|4|
|. . .||.||
 
Chỉnh sửa lần cuối bởi điều hành viên:
Mã:
Option Explicit
[B]Function GPEWeekNum(Dat As Date) As Integer[/B]
 Dim Jj As Byte, DauNam As Date, SoNgay As Integer
    
 DauNam = DateSerial(Year(Dat), 1, 1)
 For Jj = 0 To 7
   If Weekday(DauNam + Jj) = 1 Then Exit For
 Next Jj
 SoNgay = Dat - DauNam - Jj
 GPEWeekNum = SoNgay \ 7 + IIf(SoNgay < 0, 1, 2)
[B]End Function[/B]
Lưu ý hàm WEEKNUM còn có tham số thứ 2 cho phép quy định ngày đầu tuần là thứ 2 hay CN...
Em làm vầy:
PHP:
Function WeekNumUDF(DateValue As Date, Optional TypeValue As Byte = 1) As Long
  Dim FirstDay As Date
  If TypeValue > 0 And TypeValue < 3 Then
    FirstDay = DateSerial(Year(DateValue), 1, 1)
    WeekNumUDF = Int((DateValue - FirstDay - Weekday(DateValue - (2 - TypeValue) * 6, 2) + 8) / 7) - (Weekday(FirstDay) <> TypeValue)
  End If
End Function
Đúng y chang hàm WEEKNUM luôn (về cách dùng)
Ngoài ra em nghĩ code của sư phụ có thể bỏ vòng lập được đấy:
PHP:
Function GPEWeekNum(Dat As Date) As Integer
 Dim DauNam As Date, SoNgay As Integer
 DauNam = DateSerial(Year(Dat), 1, 1)
 SoNgay = Dat - DauNam + Weekday(DauNam, 2) - 7
  GPEWeekNum = SoNgay \ 7 + IIf(SoNgay < 0, 1, 2)
End Function
 

File đính kèm

  • WeekNum.rar
    22.2 KB · Đọc: 210
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom