Hàm về ngày tháng

  • Thread starter Thread starter morning
  • Ngày gửi Ngày gửi
Liên hệ QC

morning

Thành viên mới
Tham gia
25/8/11
Bài viết
5
Được thích
0
Các anh chị cho em hỏi một vấn đề như sau:

Dữ liệu trong ô A1 là ngày 10/12/2010, dữ liệu trong ô B1 là ngày 5/5/2011.

Trong Excel, có hàm hay công cụ nào tự động có thể giúp chúng ta phân khoảng thời gian trên làm 3 đoạn: từ 10/12/2010 đến 1/1/2011 có bao nhiêu ngày, từ 2/1/2011 đến 1/3/2011 có bao nhiêu ngày, từ 2/3/2011 đến 5/5/2011 có bao nhiêu ngày, hay không ạ?

Hay là đối với vấn đề trên, mình phải viết macro?

Cám ơn các anh chị.
 
Bạn thử dùng hàm này xem thế nào!
--------------
Function DayToDay(a As Date, b As Date)
Dim thang1 As Integer, thang2 As Integer
Dim ngay1 As Integer, ngay2 As Integer
Dim nam1 As Integer, nam2 As Integer
Dim sothang As Integer
Dim thang(1 To 10000) As Integer
Dim sonam As Integer
Dim nam(1 To 10000) As Integer
Dim songay As Integer
Dim i As Integer
If a > b Then
DayToDay = "Ngay dau phai nho hon ngay cuoi"
Exit Function
End If
ngay1 = Day(a)
thang1 = Month(a)
nam1 = Year(a)
ngay2 = Day(b)
thang2 = Month(b)
nam2 = Year(b)
'Tinh so nam
sonam = nam2 - nam1
'Tinh so thang
If sonam = 0 Then
sothang = thang2 - thang1
End If
If sonam = 1 Then
sothang = 13 - thang1 + thang2
End If
If sonam > 1 Then
sothang = 13 - thang1 + thang2 + (sonam - 1) * 12
End If
'Tinh so ngay
If sothang = 0 Then
DayToDay = ngay2 - ngay1
Exit Function
End If


If sothang > 0 Then
For i = 1 To sothang
thang(i) = thang1 + i - 1 - Int((thang1 + i - 2) / 12) * 12
Next i
songay = ngaythang(thang1, nam1) - ngay1 + ngay2 + 1
For i = 2 To sothang - 1
songay = songay + ngaythang(thang(i), nam1 + Int((thang(1) + i - 1) / 12))
Next i
End If
DayToDay = songay
End Function
-------------------
Function ngaythang(a As Integer, b As Integer)
If a = 1 Or a = 3 Or a = 5 Or a = 7 Or a = 8 Or a = 10 Or a = 12 Then
ngaythang = 31
End If
If a = 4 Or a = 6 Or a = 9 Or a = 11 Then
ngaythang = 30
End If
If b / 4 = Int(b / 4) Then
If a = 2 Then
ngaythang = 29
End If
End If
If b / 4 <> Int(b / 4) Then
If a = 2 Then
ngaythang = 28
End If
End If
End Function
-------------------
Hàm dùng là DaytoDay
Trong đó, có 2 tham số cần nhập là ngày đầu và ngày cuối. Hàm sẽ tính ra khoảng thời gian giữa 2 ngày (tính được cho cả trường hợp khác tháng, khác năm...)
 
Bạn thử dùng hàm này xem thế nào!
..................................
Hàm dùng là DaytoDay
Trong đó, có 2 tham số cần nhập là ngày đầu và ngày cuối. Hàm sẽ tính ra khoảng thời gian giữa 2 ngày (tính được cho cả trường hợp khác tháng, khác năm...)
Xin lỗi, tôi cũng đang học lập trình nhưng tôi không biết có cần phải dùng hàm của bạn hay không nữa?
Nếu có ngày tháng a và ngày tháng b... Để tính giữa 2 thời điểm ấy có bao nhiêu ngày, tôi lấy b - a cũng được vậy
Phép cộng trừ bình thường mà không cần phải VBA gì cả
 
Các anh chị cho em hỏi một vấn đề như sau:

Dữ liệu trong ô A1 là ngày 10/12/2010, dữ liệu trong ô B1 là ngày 5/5/2011.

Trong Excel, có hàm hay công cụ nào tự động có thể giúp chúng ta phân khoảng thời gian trên làm 3 đoạn: từ 10/12/2010 đến 1/1/2011 có bao nhiêu ngày, từ 2/1/2011 đến 1/3/2011 có bao nhiêu ngày, từ 2/3/2011 đến 5/5/2011 có bao nhiêu ngày, hay không ạ?
Hay là đối với vấn đề trên, mình phải viết macro?
Cám ơn các anh chị.
Quét chọn C1:C4, trên thanh công thức nhập:

Mã:
=FREQUENCY(ROW(INDIRECT("1:"&($B$1-$A$1+1)))+$A$1-1,{40544,40603})

Kết thúc bằng Ctrl-shift-Enter
 

File đính kèm

Lần chỉnh sửa cuối:
chào các bạn ! mình muốn viết ngày tháng năm trong bảng tính luôn cập nhật ngày hiện tại . nhưng không phải viết liền mà viết ngày ở một ô, tháng ở một ô , năm ở một ô . như vậy mình phải dùng hàm gì để có thể viết được như vậy . bạn nào hãy giúp mình với nhé .
 
chào các bạn ! mình muốn viết ngày tháng năm trong bảng tính luôn cập nhật ngày hiện tại . nhưng không phải viết liền mà viết ngày ở một ô, tháng ở một ô , năm ở một ô . như vậy mình phải dùng hàm gì để có thể viết được như vậy . bạn nào hãy giúp mình với nhé .
- Lấy ngày hiện tại =DAY(TODAY())
- Lấy tháng hiện tại =MONTH(TODAY())
- Lấy năm hiện tại =YEAR(TODAY())
 
- Lấy ngày hiện tại =DAY(TODAY())
- Lấy tháng hiện tại =MONTH(TODAY())
- Lấy năm hiện tại =YEAR(TODAY())
Thầy em có hàm này nè thầy xem sao:
tại ô A1 ta có ngày 10/12/2010
ô A2 ta có ngày 5/5/2011
Công thức=DATEDIF(A1,B1,"d") cho ra 146 ngày còn nếu ta thay thế "d"="m" thì cho kết quả là 4.Như vậy ta tính tháng nhẫm là 4 tháng 25 ngày nếu như các tháng trên đủ 30 ngày/tháng.vậy thầy có cách nào ra kết quả như vậy dựa theo công thức trên
 
Thầy em có hàm này nè thầy xem sao:
tại ô A1 ta có ngày 10/12/2010
ô A2 ta có ngày 5/5/2011
Công thức=DATEDIF(A1,B1,"d") cho ra 146 ngày còn nếu ta thay thế "d"="m" thì cho kết quả là 4.Như vậy ta tính tháng nhẫm là 4 tháng 25 ngày nếu như các tháng trên đủ 30 ngày/tháng.vậy thầy có cách nào ra kết quả như vậy dựa theo công thức trên
Có phải là bạn muốn làm sao để ra số 25 như trên? Thực chất thì với số liệu như vậy, đây phải là 26 mới đúng. Đã biết hàm DATEDIF thì bạn chú ý thêm một chút nữa tại tham số thứ 3 là OK thôi:
"y": Số năm từ A1 đến B1
"m": Số tháng từ A1 đến B1
"d": Số ngày từ A1 đến B1
"ym": Số tháng lẻ từ A1 đến B1 (sau khi đã trừ số năm tròn = 12 tháng)
"md": Số ngày lẻ từ A1 đến B1 (sau khi đã trừ số tháng tròn)
Như vậy, bạn chỉ cần chọn tham số thứ 3 là "md" là được.
 
Web KT

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

Back
Top Bottom