Tính số ngày của 1 tháng trong khoảng thời gian cho trước (2 người xem)

Người dùng đang xem chủ đề này

  • Tôi tuân thủ nội quy khi đăng bài
    Có

    quocanh.x20

    Thành viên mới
    Tham gia
    17/4/08
    Bài viết
    8
    Được thích
    4
    Các Anh chị cho hỏi công thức tính số ngày của 1 tháng xác định trong 1 khoảng thời gian cho trước.
    VD: cho từ ngày 01/01/2026 đến 23/2/2026. Tính số ngày thuộc tháng 1, số ngày thuộc tháng 2 trong khoảng thời gian trên.
    XIn chân thành cám ơn!
     
    công thức tính số ngày
    Nếu Office của bạn 2019 trở về trước:
    Viết 1 function ( Nhờ Bing trợ giúp ) và áp vào file...
    Mã:
    Function DaysPerMonth(StartDate As Date, EndDate As Date) As String
        Dim d As Date
        Dim dict As Object
        Dim key As String
        Dim result As String
        
        ' Create dictionary
        Set dict = CreateObject("Scripting.Dictionary")
        
        ' Loop through each day
        For d = StartDate To EndDate
            key = Year(d) & " " & Format(d, "mmm")
            If dict.Exists(key) Then
                dict(key) = dict(key) + 1
            Else
                dict.Add key, 1
            End If
        Next d
        
        ' Build result string in one row
        Dim k As Variant
        For Each k In dict.Keys
            result = result & k & ": " & dict(k) & " days, "
        Next k
        
        ' Remove trailing comma and space
        If Len(result) > 2 Then
            result = Left(result, Len(result) - 2)
        End If
        
        DaysPerMonth = result
    End Function
     

    File đính kèm

    • Untitled.png
      Untitled.png
      85.8 KB · Đọc: 8
    [Copilot]
    Bạn có thể viết một hàm VBA tự tạo trong Excel để trả về mảng như bạn mô tả. Dưới đây là đoạn code hoàn chỉnh:

    PHP:
     Function SoNgay(Date1 As Date, Date2 As Date) As Variant
        Dim arr(1 To 2, 1 To 2) As Variant
        Dim m1 As Integer, m2 As Integer
        Dim d1 As Integer, d2 As Integer
        ' Lấy tháng và ngày từ 2 giá trị'
        m1 = Month(Date1)
        d1 = Day(Date1)
        m2 = Month(Date2)
        d2 = Day(Date2)  
    ' Tính số ngày còn lại của tháng trước'
        arr(1, 1) = m1
        arr(1, 2) = Day(DateSerial(Year(Date1), m1 + 1, 0)) - d1 + 1
        ' Tính số ngày đã qua của tháng sau'
        arr(2, 1) = m2
        arr(2, 2) = d2
        SoNgay = arr
    End Function

    Giải thích:​

    • DateSerial(Year(Date1), m1 + 1, 0) trả về ngày cuối cùng của tháng m1.
    • Day(...) lấy số ngày trong tháng đó.
    • Dòng đầu tiên của mảng: [tháng trước, số ngày còn lại].
    • Dòng thứ hai: [tháng sau, số ngày đã qua].

    Ví dụ:​

    Trong Excel, nhập công thức:
    =SoNgay(DATE(2026,6,28), DATE(2026,7,2))<br>
    Sau đó nhấn Ctrl+Shift+Enter (để công thức mảng hoạt động), bạn sẽ nhận được:
    6 3
    7 2
    Bạn có muốn mình viết thêm một phiên bản trả về trực tiếp dưới dạng bảng động (Dynamic Array) để không cần Ctrl+Shift+Enter, chỉ cần Enter là ra kết quả không?[/php]
     
    Các Anh chị cho hỏi công thức tính số ngày của 1 tháng xác định trong 1 khoảng thời gian cho trước.
    VD: cho từ ngày 01/01/2026 đến 23/2/2026. Tính số ngày thuộc tháng 1, số ngày thuộc tháng 2 trong khoảng thời gian trên.
    XIn chân thành cám ơn!
    Ngày đầu ở B2, ngày cuối ở B3, D3 là tháng
    Số ngày = MAX(MIN($B$3,DATE(2026,D3+1,1)-1)-MAX($B$2,DATE(2026,D3,1))+1,0)
     

    File đính kèm

    1782091040311.png
    Thử công thức sau nhé
    Mã:
    D3=SUM(N(MONTH(ROW(INDIRECT($A3&":"&$B3)))=D$2))

    Hoặc nếu dùng Office365
    Mã:
    =DROP(REDUCE(0,B3:B7,LAMBDA(s,r,VSTACK(s,LET(a,SEQUENCE(r-@+A7:r+1,,r,-1),IFNA(VLOOKUP(D2:H2,GROUPBY(MONTH(a),a,ROWS,,0),2,),""))))),1)
     
    View attachment 311885
    Thử công thức sau nhé
    Mã:
    D3=SUM(N(MONTH(ROW(INDIRECT($A3&":"&$B3)))=D$2))

    Hoặc nếu dùng Office365
    Mã:
    =DROP(REDUCE(0,B3:B7,LAMBDA(s,r,VSTACK(s,LET(a,SEQUENCE(r-@+A7:r+1,,r,-1),IFNA(VLOOKUP(D2:H2,GROUPBY(MONTH(a),a,ROWS,,0),2,),""))))),1)
    Nhờ bác xem giúp công thức của bác tôi sai khúc nào mà kết quả không đúng. Đa tạ
     

    File đính kèm

    Excel cho rằng tháng 2 năm 1900 có 29 ngày
    Nến chắc các công thức trên đem tính cho giữa tháng 2 & tháng 3 của năm đó chắc sai!
    $$$$@
     

    Bài viết mới nhất

    Back
    Top Bottom