Chào mừng đến với Diễn đàn Dân Kế Toán - Kế toán tổng hợp thực tế.
Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 16
  1. #1
    Ngày tham gia
    Aug 2015
    Bài viết
    0

    Trong Excel làm cách nào đếm đươc tháng hiện tại có bao nhiêu ngày thứ hai,

    Bất kỳ ngôn ngữ lập trình nào cũng có thể giúp bạn giải quyết vấn đề này, ở đây là đếm số ngày thứ hai, thứ ba,... chủ nhật trong tháng hiện tại. Điều cốt lõi là giải thuật đếm ngày trong tháng, nếu bạn đã biết giải thuật thì chỉ cần miêu tả giải thuật bằng ngôn ngữ ưa thích. Trong Excel, bạn có thể dùng VBA để viết macro giải quyết vấn đề nào đó. Thí dụ đoạn macro sau sẽ giải quyết vấn đề của bạn:

    Option Explicit
    ‘ Khai báo kiểu chứa thông tin thời gian
    Private Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
    End Type
    ‘ Khai báo hàm API của Windows
    Private Declare Sub GetLocalTime Lib “kernel32” (lpSystemTime As SYSTEMTIME)
    ‘ Khai báo biến cần dùng
    Dim Days(0 To 6) As Integer
    Dim MinDay As Integer
    Dim MaxDay As Integer
    ‘ Macro đếm ngày
    Sub DayCount()
    Dim lpSystemTime As SYSTEMTIME
    Dim iday As Integer
    Dim idayofweek As Integer
    ‘ Khởi động counter ban đầu
    For idayofweek = 0 To 6
    Days(idayofweek) = 0
    Next
    ‘ đọc thông tin ngày hiện tại
    GetLocalTime lpSystemTime
    ‘ Tìm ngày nhỏ nhất và lớn nhất trong tháng
    MinDay = 1
    If (lpSystemTime.wMonth = 2) Then
    MaxDay = 28
    ‘ Nên kiểm tra thêm năm nhuần, có 29 ngày
    ElseIf (lpSystemTime.wMonth < 8 And lpSystemTime.wMonth Mod 2) Then
    MaxDay = 31
    ElseIf (lpSystemTime.wMonth > 7 And (lpSystemTime.wMonth Mod 2) = 0) Then
    MaxDay = 31
    Else
    MaxDay = 30
    End If
    ‘ Tính số ngày trong tuần của tháng hiện tại
    iday = lpSystemTime.wDay
    idayofweek = lpSystemTime.wDayOfWeek
    While (iday <= MaxDay)
    Days(idayofweek) = Days(idayofweek) + 1
    iday = iday + 1
    idayofweek = (idayofweek + 1) Mod 7
    Wend
    iday = lpSystemTime.wDay
    idayofweek = lpSystemTime.wDayOfWeek
    Days(idayofweek) = Days(idayofweek) - 1
    While (iday >= MinDay)
    Days(idayofweek) = Days(idayofweek) + 1
    iday = iday - 1
    If (idayofweek = 0) Then
    idayofweek = 6
    Else
    idayofweek = idayofweek - 1
    End If
    Wend
    ‘ Hiển thị kết quả
    MsgBox (“C.Nhat:” & Days(0) & “, T.Hai:” & Days(1) & “, T.Ba:” & Days(2) & “, T.Tu:” & Days(3) & “, T.Nam:” & Days(4) & “, T.Sau:” & Days(5) & “, T.Bay:” & Days(6))
    End Sub

  2. #2
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Một số ý kiến thêm về việc đếm ngày trong một tháng

    Không nhất thiết phải sử dụng tới hàm của Windows API đâu bạn AnhExcel à.
    Chúng ta có thể tận dụng những gì của Excel và VBA cung cấp là được.

    'Để lấy số ngày trong một tháng:
    Dim ngaydauthang, ngaycuoithang, ngaydauthangsau, songaytrongthang

    ngaydauthang = DateSerial(Year(Date), Month(Date), 1)
    ngaydauthangsau = DateSerial(Year(Date)+IIf(Month(Date)=12, 1, 0) , IIf(Month(Date) = 12, 1, Month(Date) + 1) , 1)
    ngaycuoithang = ngaydauthangsau - 1

    songaytrongthang = Day(ngaycuoithang)

    ' Để coi trong tháng có bao nhiêu ngày thứ hai, thứ ba, ...
    Dim ngay(6) as integer, sttngaytrongtuan
    Dim i as Integer

    For i = 1 to songaytrongthang
    sttngaytrongtuan = Weekday(ngaydauthang + i - 1)
    ngay(sttngaytrongtuan - 1) = ngay(sttngaytrongtuan - 1) + 1
    Next

    Như thế là có được cái mình cần rồi.

  3. #3
    Ngày tham gia
    Nov 2015
    Bài viết
    2
    Thấy mấy bạn trả lời cao siêu quá, đâu cần phải dùng VBA hay... chỉ cần kết hợp các hàm if, choose, weekday và int là tìm ra 1 tháng có bao nhiêu thứ mấy thôi mà

  4. #4
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    Trích dẫn Gửi bởi ThuNghi
    Thấy mấy bạn trả lời cao siêu quá, đâu cần phải dùng VBA hay... chỉ cần kết hợp các hàm if, choose, weekday và int là tìm ra 1 tháng có bao nhiêu thứ mấy thôi mà
    Hi Thu Nghi,

    thật sự ra các hàm trong excel cũng rất mạnh và nếu có sự kết hợp khéo léo những hàm này thì sẽ giải quyết được nhiều vấn đề. Tuy nhiên nó sẽ tuyệt vời hơn khi chúng ta khai thác được những tính năng của VBA cho những yêu cầu của cviệc

    Chào mừng bạn đã gia nhập gia đình dân kế toán.

    :laugh:

  5. #5
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Mình mới tham gia xin góp 1 công thức tính mỗi tháng có bao nhiêu thứ hai, mong các bạn đóng góp, dùng hàm match, weekday và if
    1/ A1: ngày đầu tháng cần tính tháng có ??? Mon
    Days: =DAY(DATE(YEAR(Sheet3!$A$1),MONTH(Sheet3!$A$1)+1,1 )-1) trả về tháng đó có bao nhiêu ngày
    FiDayOfMonth=WEEKDAY(DATE(YEAR(Sheet3!$A$1),MONTH( Sheet3!$A$1),1))
    Là thứ của ngày đầu tháng
    ???Mon=IF(OR(AND(Days>28,FiDayOfMonth=2),AND(Days> 29,TYPE(MATCH(FiDayOfMonth,{1;2},0))<>16),AND(Days >30,NOT(ISNA(MATCH(FiDayOfMonth,{7;1;2},0))))),5,4 )
    2/ Ngày thứ hai đầu của tháng A2=$A$1+CHOOSE(WEEKDAY($A$1),1,0,6,5,4,3,2))
    A3=IF(MONTH(DATE(YEAR(A2),MONTH(A2),DAY(A2)+28-))<>MONTH(A1),4,5)
    Trả về số ngày thứ hai của mỗi tháng
    Thân

  6. #6
    Ngày tham gia
    Dec 2015
    Bài viết
    4
    Thực ra dùng VA rất hay, giải quyết được nhiều vấn đề như là liệt kê... còn hàm thì chỉ cho ra kết quả tại Cell nào đó thôi. Tôi thử đưa ra các công thức như vậy để anh em cùng nghiên cứu cho vui chớ chẳng có ý gì đâu. Thấy 4R này có nhiều chuyên mục khá hay. Các Mod và Admin cứ tiếp tục phát triển, 4R nào ban đầu cũng thể thôi hơi đâu mà nghe người ta nói này nọ. Bữa sau, nếu trích dẫn thì thêm câu "cám ơn tất cả các bạn và tất cả other 4R đã giúp tôi" là không ai nói gì cả. Hình như post lộn nơi. Xin đưa về đúng vị trí.
    Chúc cho danketoan ngày càng lớn mạnh.

  7. #7
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Trong Excel làm cách nào đếm đươc tháng hiện tại có bao nhiêu ngày thứ hai,




    Trích dẫn Gửi bởi ThuNghi
    Mình mới tham gia xin góp 1 công thức tính mỗi tháng có bao nhiêu thứ hai, mong các bạn đóng góp, dùng hàm match, weekday và if
    1/ A1: ngày đầu tháng cần tính tháng có ??? Mon
    Days: =DAY(DATE(YEAR(Sheet3!$A$1),MONTH(Sheet3!$A$1)+1,1 )-1) trả về tháng đó có bao nhiêu ngày
    FiDayOfMonth=WEEKDAY(DATE(YEAR(Sheet3!$A$1),MONTH( Sheet3!$A$1),1))
    Là thứ của ngày đầu tháng
    ???Mon=IF(OR(AND(Days>28,FiDayOfMonth=2),AND(Days> 29,TYPE(MATCH(FiDayOfMonth,{1;2},0))<>16),AND(Days >30,NOT(ISNA(MATCH(FiDayOfMonth,{7;1;2},0))))),5,4 )
    2/ Ngày thứ hai đầu của tháng A2=$A$1+CHOOSE(WEEKDAY($A$1),1,0,6,5,4,3,2))
    A3=IF(MONTH(DATE(YEAR(A2),MONTH(A2),DAY(A2)+28-))<>MONTH(A1),4,5)
    Trả về số ngày thứ hai của mỗi tháng
    Thân
    =DAY(DATE(YEAR(Sheet3!$A$1),MONTH(Sheet3!$A$1)+1,1 )-1)
    Nếu tháng đó là 12 thì sao? Về luận lý thì như vậy chưa chặt, tuy nhiên nó vẫn ra là 31 ngày, nếu tháng cần tính là 12.

  8. #8
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Trong Excel làm cách nào đếm đươc tháng hiện tại có bao nhiêu ngày thứ hai,

    đúng là những cao thu excel! nhu cac anh em lam sao ma theo nổi chứ! cac pro ơi cho em hỏi cái em mới học excel thui các pro khuyên em nên học trong sách nào chỉ cho em với:banghead:

  9. #9
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Trong Excel làm cách nào đếm đươc tháng hiện tại có bao nhiêu ngày thứ hai,




    Trích dẫn Gửi bởi phatnq2002
    =DAY(DATE(YEAR(Sheet3!$A$1),MONTH(Sheet3!$A$1)+1,1 )-1)
    Nếu tháng đó là 12 thì sao? Về luận lý thì như vậy chưa chặt, tuy nhiên nó vẫn ra là 31 ngày, nếu tháng cần tính là 12.
    Nó cũng vẫn chặt như thường.
    VD =date(2008,13,1) sẽ cho ra ngày 1/1/2009.

  10. #10
    Ngày tham gia
    Nov 2015
    Bài viết
    50
    Ðề: Trong Excel làm cách nào đếm đươc tháng hiện tại có bao nhiêu ngày thứ hai,

    Công thức ngắn hơn nữa:
    Giã sử
    - tại A1 ta gõ vào chỉ số năm (ví dụ là 2008-)
    - tại B1 ta gõ vào chỉ số tháng (ví dụ là 1)
    Vậy ta có các công thức sau:
    1> Tính số ngày thứ 2:



    =INT((DATE($A1,$B1+1,0)-DATE($A1,$B1,1)-WEEKDAY(DATE($A1,$B1+1,0),2)+8-)/7)
    2> Tính số ngày thứ 3:



    =INT((DATE($A1,$B1+1,0)-DATE($A1,$B1,1)-WEEKDAY(DATE($A1,$B1+1,0)-1,2)+8-)/7)
    3> Tính số ngày thứ 4:



    =INT((DATE($A1,$B1+1,0)-DATE($A1,$B1,1)-WEEKDAY(DATE($A1,$B1+1,0)-2,2)+8-)/7)
    4> Tính số ngày thứ 5:



    =INT((DATE($A1,$B1+1,0)-DATE($A1,$B1,1)-WEEKDAY(DATE($A1,$B1+1,0)-3,2)+8-)/7)
    5> Tính số ngày thứ 6:



    =INT((DATE($A1,$B1+1,0)-DATE($A1,$B1,1)-WEEKDAY(DATE($A1,$B1+1,0)-4,2)+8-)/7)
    6> Tính số ngày thứ 7:



    =INT((DATE($A1,$B1+1,0)-DATE($A1,$B1,1)-WEEKDAY(DATE($A1,$B1+1,0)-5,2)+8-)/7)
    7> Tính số ngày CN:



    =INT((DATE($A1,$B1+1,0)-DATE($A1,$B1,1)-WEEKDAY(DATE($A1,$B1+1,0)-6,2)+8-)/7)
    Tổng quát: Với 2 thời điểm X và Y cho trước (X < Y) thì
    1> Tổng số ngày thứ 2 giữa 2 thời điểm X và Y



    =INT((Y-X-WEEKDAY(Y,2)+8-)/7)
    2>Tổng số ngày thứ 3 giữa 2 thời điểm X và Y



    =INT((Y-X-WEEKDAY(Y-1,2)+8-)/7)
    3>Tổng số ngày thứ 4 giữa 2 thời điểm X và Y



    =INT((Y-X-WEEKDAY(Y-2,2)+8-)/7)
    4>Tổng số ngày thứ 5 giữa 2 thời điểm X và Y



    =INT((Y-X-WEEKDAY(Y-3,2)+8-)/7)
    5>Tổng số ngày thứ 6 giữa 2 thời điểm X và Y



    =INT((Y-X-WEEKDAY(Y-4,2)+8-)/7)
    6>Tổng số ngày thứ 7 giữa 2 thời điểm X và Y



    =INT((Y-X-WEEKDAY(Y-5,2)+8-)/7)
    7>Tổng số ngày CN giữa 2 thời điểm X và Y



    =INT((Y-X-WEEKDAY(Y-6,2)+8-)/7)
    --------------------------
    (ThuNghi: Tên này nghe quen quen há)

 

 
Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •