Hàm DATEDIF tự tạo

Liên hệ QC

Hoàng Trọng Nghĩa

Chuyên gia GPE
Thành viên BQT
Moderator
Tham gia
17/8/08
Bài viết
8,662
Được thích
16,717
Giới tính
Nam
Tối qua mò mẫm tự tạo cái hàm này, cũng tương tự hàm DATEDIF của Excel, nhưng vì WorksheetFunction không có nên làm hàm này. Mình muốn chia sẻ tí kiến thức. Mong được bổ sung góp ý.
PHP:
Option Explicit
Function TinhDate(NgayNho As Date, NgayLon As Date, txt As String) As Currency
  Dim NgL As Currency, NgN As Currency
  On Error Resume Next
  If txt = "d" Or txt = "D" Then
    NgL = Format(NgayLon, "0")
    NgN = Format(NgayNho, "0")
    TinhDate = NgL - NgN
  ElseIf txt = "m" Or txt = "M" Then
    NgL = Day(NgayLon) / 30 + Month(NgayLon) + Year(NgayLon) * 12
    NgN = Day(NgayNho) / 30 + Month(NgayNho) + Year(NgayNho) * 12
    TinhDate = Format(NgL - NgN, "0.0")
  ElseIf txt = "y" Or txt = "Y" Then
    NgL = Day(NgayLon) / 360 + Month(NgayLon) / 12 + Year(NgayLon)
    NgN = Day(NgayNho) / 360 + Month(NgayNho) / 12 + Year(NgayNho)
    TinhDate = Format(NgL - NgN, "0.0")
  End If
End Function
 

File đính kèm

  • HamDATEDIF.xls
    40.5 KB · Đọc: 65
Để học và thực hành thì không chọt nữa!
Có điều NgL và NgN dù khai báo kiểu gì nó cũng là số nguyên, vì

Function TinhDate(NgayNho As Date, NgayLon As Date, txt As String)

Ngày tháng trong Excel hay trong VBA khi tính toán đều bị coi là số cả. Mà biến Date thì sẽ luôn là số nguyên.

Quay lại code bài #1: nếu khai báo lại biến Currrency thành Long, sau khi tính toán ra số thập phân (vì bản chất các phép tính chia 30, chia 12, chia 360, sẽ ra kết quả thập phân), VBA sẽ làm tròn thành số nguyên tương tự dùng Round.
Kể cả khi dùng hàm format, format(5.26, "0.0") sẽ bằng 5.3 tương tự làm tròn 1 số thập phân bằng Round.

Trong khi DateDif không làm tròn mà cắt bỏ khúc đuôi, tương tự Roundown.

Thử thì biết, chứ nói suông có khi không tin.
 
Upvote 0
Nhờ các bác xem hàm dateif

Hiện tôi làm 1 file đếm năm có file kèm theo nhờ các bác chỉ giúp
 

File đính kèm

  • Ham dateif.xls
    16.5 KB · Đọc: 6
Upvote 0
Hiện tôi làm 1 file đếm năm có file kèm theo nhờ các bác chỉ giúp


1) Tại cột A; cột B phải nhập đủ ngày, tháng năm là tính đúng còn chỉ nhập năm là tính sai?

- Nếu gõ 1/1/2005 và 2005 là hoàn toàn khác, Excel tính 1 là 1 ngày và 2005 có nghĩa là 2005 ngày chứ không phải là năm như cái chúng ta nhìn thấy nó hiển thị. Thực sự 1/1/2005 chính là 38353 là giá trị thực sự của nó, vì vậy nó tính không như ta thấy, đương nhiên kết quả sẽ không đúng. Nếu muốn tính được, bạn cứ gõ 1/1/2005 rồi định dạng chúng kiểu yyyy trong format cells.

2) Hàm today() + thêm 1 năm ( Năm hiện tại + 1 năm) dùng hàm gì?

- Tôi nghĩ có thể bạn nên dùng công thức này:

PHP:
=DATE(YEAR(TODAY())+1;MONTH(TODAY());DAY(TODAY()))

3) Trong khi tôi dùng = DATEDIF(MAX(A9:B9);TODAY()+year(1) ;"Y") thì ra kết quả khác

Vì công thức của bạn chưa đúng nên không cho ra kết quả đúng (như câu 2).

Công thức sẽ là:

PHP:
=DATEDIF(MAX(A9:B9);DATE(YEAR(TODAY())+1;MONTH(TODAY());DAY(TODAY()));"Y")
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom