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

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

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

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: 6
[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)
 

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

Back
Top Bottom