PDA

View Full Version : Hàm tính ngày đầu tháng và ngày cuối tháng



BNTT
08-10-07, 04:01 PM
Các bác ơi, vì tìm trong VBA của Excel 2003 không có hàm EoMonth (End of month - tính ngày cuối tháng) nên tui mạo muội chế ra cái hàm này, sẵn tiện làm luôn cái tính đầu tháng (SoMonth - Start of Month).

* HOMNAY = tính ngày cuối tháng (hay đầu tháng) từ cái ngày này, có thể gõ chuỗi dạng "dd/mm/yyyy" hay dùng các hàm như Now(), Today()...
* LECH = từ cái tháng của HOMNAY tính lệch đi bao nhiêu tháng, nếu tính ngược về trước thì gõ dấu âm.


Function EoMonth(HOMNAY As String, LECH As Integer)
XMONTH = Month(HOMNAY)
XYEAR = Year(HOMNAY)
If LECH >= 0 Then
XMONTH = XMONTH + LECH - 12 * Application.WorksheetFunction.Floor((XMONTH + LECH - 1) / 12, 1)
XYEAR = XYEAR - Application.WorksheetFunction.Floor((XMONTH + LECH - 1) / 12, 1)
Else
XMONTH = XMONTH + LECH + 12 * Application.WorksheetFunction.Floor(-(XMONTH + LECH - 12) / 12, 1)
XYEAR = XYEAR + Application.WorksheetFunction.Floor(-(XMONTH + LECH - 12) / 12, 1)
End If
If XMONTH = 1 Or XMONTH = 3 Or XMONTH = 5 Or XMONTH = 7 Or XMONTH = 8 Or XMONTH = 10 Or XMONTH = 12 Then xday = 31
If XMONTH = 4 Or XMONTH = 6 Or XMONTH = 9 Or XMONTH = 11 Then xday = 30
If XMONTH = 2 Then
If XYEAR \ 4 = 0 Then
xday = 29
Else: xday = 28
End If
End If
EoMonth = Application.WorksheetFunction.TEXT(xday & "/" & XMONTH & "/" & XYEAR, "dd/mm/yyyy")
End Function

Function SoMonth(HOMNAY As String, LECH As Integer)
XMONTH = Month(HOMNAY)
XYEAR = Year(HOMNAY)
If LECH >= 0 Then
XMONTH = XMONTH + LECH - 12 * Application.WorksheetFunction.Floor((XMONTH + LECH - 1) / 12, 1)
XYEAR = XYEAR - Application.WorksheetFunction.Floor((XMONTH + LECH - 1) / 12, 1)
Else
XMONTH = XMONTH + LECH + 12 * Application.WorksheetFunction.Floor(-(XMONTH + LECH - 12) / 12, 1)
XYEAR = XYEAR + Application.WorksheetFunction.Floor(-(XMONTH + LECH - 12) / 12, 1)
End If
xday = 1
SoMonth = Application.WorksheetFunction.TEXT(xday & "/" & XMONTH & "/" & XYEAR, "dd/mm/yyyy")
End Function

Phải chi mà VBA của Excel 2003 cũng có cái hàm EoMonth như Excel 2007 thì khỏe quá, khỏi làm cái chuyện này. Nhưng thôi, các bác xem và cho xin ý kiến nghe. Thanks.

TranThanhPhong
08-10-07, 04:12 PM
Hàm này có sẵn mà bạn.
Bạn vào Tools | Add-Ins | Analysis ToolPak | Ok

Sẽ có thêm một số hàm ngày tháng mới. Xem nhóm hàm Ngày tháng trong link dưới chữ ký của mình.

TP.

ThuNghi
08-10-07, 04:13 PM
Sao bạn không dùng hàm Excel
EOM: Date(Year(A1),Month(a1)+1,0) định dạng là d, thì có ngày cuối tháng A1. Khỏe hơn, trên GPE có bài nói về này, hình như của Đào Việt Cường, hay lắm.

Mr Okebab
08-10-07, 04:13 PM
Các bác ơi, vì tìm trong VBA của Excel 2003 không có hàm EoMonth (End of month - tính ngày cuối tháng) nên tui mạo muội chế ra cái hàm này, sẵn tiện làm luôn cái tính đầu tháng (SoMonth - Start of Month).
Phải chi mà VBA của Excel 2003 cũng có cái hàm EoMonth như Excel 2007 thì khỏe quá, khỏi làm cái chuyện này. Nhưng thôi, các bác xem và cho xin ý kiến nghe. Thanks.

Có đấy bạn ạ. Nó nằm trong Addin Analysis Toolpak

Thân!

BNTT
08-10-07, 05:31 PM
Hàm này có sẵn mà bạn.
Bạn vào Tools | Add-Ins | Analysis ToolPak | Ok

Sẽ có thêm một số hàm ngày tháng mới. Xem nhóm hàm Ngày tháng trong link dưới chữ ký của mình.

TP.

Cám ơn bạn. Nhưng ý tui nói là trong VBA cơ. Đâu có hàm EoMonth trong đó. Ví dụ mình lập trình tìm ngày cuối tháng để đưa vào Sheet thì sao. Chứ còn ở ngoài bảng tính Excel thì có, tui thấy rồi.

Mr Okebab
08-10-07, 05:40 PM
Cám ơn bạn. Nhưng ý tui nói là trong VBA cơ. Đâu có hàm EoMonth trong đó. Ví dụ mình lập trình tìm ngày cuối tháng để đưa vào Sheet thì sao. Chứ còn ở ngoài bảng tính Excel thì có, tui thấy rồi.

Bác xem hàm nhé :


Public Function Emo(Ngay As Date) As Date
Emo = DateSerial(Year(Ngay), Month(Ngay) + 1, 0)
End Function


Thân!

BNTT
08-10-07, 06:13 PM
Bác xem hàm nhé :


Public Function Emo(Ngay As Date) As Date
Emo = DateSerial(Year(Ngay), Month(Ngay) + 1, 0)
End Function


Thân!
Hay quá! Tui chưa bao giờ rờ đến cái hàm DateSerial này. Cám ơn bác nhiều và xin chỉ giáo thêm cách dùng hàm này. Nhân tiện cho tui hỏi thêm:
- Muốn dời tới dời lui vài tháng như tham số "months" của hàm EoMonth ngoài Excel thì sao?
- Tính ngày đầu tháng?
Cám ơn Mr Okebab nhiều.

Mr Okebab
08-10-07, 06:23 PM
Hay quá! Tui chưa bao giờ rờ đến cái hàm DateSerial này. Cám ơn bác nhiều và xin chỉ giáo thêm cách dùng hàm này. Nhân tiện cho tui hỏi thêm:
- Muốn dời tới dời lui vài tháng như tham số "months" của hàm EoMonth ngoài Excel thì sao?
- Tính ngày đầu tháng?
Cám ơn Mr Okebab nhiều.

Bác xem hàm nhé :

Public Function Emo(Ngay As Date, i As Integer) As Date
Emo = DateSerial(Year(Ngay), Month(Ngay) + 1 + i, 0)
End Function

- Tính ngày đầu tháng????????????? cho VD được không?????????

thân!

BNTT
08-10-07, 06:30 PM
Ý tui là: Tui muốn tính số lượng phát sinh trong một quý chẳng hạn, thì phải có ngày đầu của tháng đầu quý (là ngày 1 đó), ví dụ mình đang ở tháng 9/2007 (quý III), thì tui muốn có một kết quả là từ ngày 01/7/2007 đến ngày 30/9/2007.
Cảm ơn bác.

Mr Okebab
08-10-07, 07:10 PM
Ý tui là: Tui muốn tính số lượng phát sinh trong một quý chẳng hạn, thì phải có ngày đầu của tháng đầu quý (là ngày 1 đó), ví dụ mình đang ở tháng 9/2007 (quý III), thì tui muốn có một kết quả là từ ngày 01/7/2007 đến ngày 30/9/2007.
Cảm ơn bác.
Bác xem nhé :
Tính ngày Đầu quý :

Public Function SQu(Ngay As Date, i As Integer) As Date
Dim Mo As Byte
Mo = WorksheetFunction.RoundUp(Month(Ngay) / 3, 0) + i
SQu = DateSerial(Year(Ngay), Mo * 3 - 2, 1)
End Function
Tính ngày Cuối qúy :

Public Function EQu(Ngay As Date, i As Integer) As Date
Dim Mo As Byte
Mo = WorksheetFunction.RoundUp(Month(Ngay) / 3, 0) + i
EQu = DateSerial(Year(Ngay), Mo * 3 + 1, 0)
End Function
Tham số i : Tăng(giảm) thêm mấy quý nữa.

Thân!

BNTT
08-10-07, 07:31 PM
Cảm ơn bác đã chỉ giáo. Lỡ rồi làm tới luôn đi bác, từ đầu năm (nào đó) đến cuối năm (nào đó) thì mần răng?

Mr Okebab
08-10-07, 07:40 PM
Cảm ơn bác đã chỉ giáo. Lỡ rồi làm tới luôn đi bác, từ đầu năm (nào đó) đến cuối năm (nào đó) thì mần răng?

Bác này hay thật, ai chẳng biết cuối năm là 31/12; Đầu năm là 1/1
Còn việc năm thì chỉ cẩn cộng năm thêm vào. Cái này có lẽ chẳng cần dùng hàm. Nhìn thấy ngay mà.

Tất nhiên nếu vẫn muốn dùng thì . . . cũng chẳng sao.

Thân!

BNTT
08-10-07, 07:42 PM
Hì hì... vui quá, cả tháng nay vật lộn với VBA hình như mình hơi bị tưng tưng rồi... Dù sao cũng cảm ơn bác, nhiều nhiều lắm.

Mr Okebab
08-10-07, 07:46 PM
Hì hì... vui quá, cả tháng nay vật lộn với VBA hình như mình hơi bị tưng tưng rồi... Dù sao cũng cảm ơn bác, nhiều nhiều lắm.

Rất vui mừng vì cái sự "lăn lộn" này.

Hy vọng GPE sẽ được bác chia sẻ nhiều kiến thức nữa.

Thân!

P/S : Làm mấy cái UF này quan trọng nhất là giải thuật. Có nó rồi thì viết code dễ như . . . bác mời em uống CF ????
Be be be!!!!!!

BNTT
08-10-07, 07:48 PM
Rất vui mừng vì cái sự "lăn lộn" này.

Hy vọng GPE sẽ được bác chia sẻ nhiều kiến thức nữa.

Thân!

P/S : Làm mấy cái UF này quan trọng nhất là giải thuật. Có nó rồi thì viết code dễ như . . . bác mời em uống CF ????
Be be be!!!!!!

Sẵn sàng thôi, chỉ sợ bác không đi tới đây để thưởng thức được. Tui ở Dalat.

Mr Okebab
08-10-07, 08:32 PM
Sẵn sàng thôi, chỉ sợ bác không đi tới đây để thưởng thức được. Tui ở Dalat.
Vậy hả, cách đây 3 năm thì được, còn bây giờ thì . . . . hơi khó.
Trước mình có 3 năm làm KTT trên đó. Thầy IT của mình cũng ở ĐL luôn.


ĐL có quán Valentine ở HV nhìn toàn thành phố mù sương, rất lãng mạn
ĐL có quán Valentine ở sau Bưu điện, nhìn thấy tháp truyền hình rực sáng trong sương, thật mơ màng
ĐL có quá Thiên Hà ở đương PĐP, 3 chị em đều xinh, đặc biệt cô em út vừa đàn vừa hát tiếng Anh và Pháp tuyệt vời.
ĐL có quán An Tiêm ở . . .. . khung cảnh độc đáo, đặc biệt là ly trà thơm
ĐL có quán Trung Nguyên ở PĐTV, ngồi trên tầng cao, nhìn các nữ sinh viên ĐH, lòng bỗng phủ mờ như sương.
ĐL có quán . . . đối diện Đệ Nhất Hotel, uống CF ngoài sân, thấy ánh trăng lấp ló trong sương mới thấy lòng se lạnh vì một mình.
ĐL có quá bà Năm ở PBC, vừa uống vừa chen chúc, tự tìm chỗ ngồi, 1 ly 2.000đ, uống CF ngon tuyệt, nóng, ấm và thơm. Vừa uống vừa xuýt xoa vì chè đặc, nóng. Mới hay mình đã già.
ĐL có quán Hồ Tây ven bờ hồ, khoảng 8h sáng ngồi uống CF, nhìn mặt hồ Xuân Hương, hệt như một tấm gương soi khổng lồ, không một vết gợn, nhìn từng đụn sương bốc lên từ mặt hồ ở độ cao 1503,5 m này mới thấy " mặt hồ khói tỏa ngàn sương" hay biết chứng nào.
ĐL có quá Song Vy ở gần chợ Phan Chu Trinh, cứ như 1 lâu đài. Vừa hiện đại vừa xa xưa. Chợt như "thấy bóng hoàng hôn bỗng nhớ nhà"
ĐL có quán . . . . . .
ĐL có quán . . . . .Chậm quá, tiếc thật.

Thôi, hẹn khi nào lên ĐL thì uống vậy.



be be be!!!!!!!!!!!!!!

BNTT
08-10-07, 08:42 PM
Trời, bác biết cafe Dalat còn nhiều hơn cả tui. Mà cũng dể hiểu thôi, thường du khách biết nhiều hơn dân địa phương. Biết đâu tui gặp bác ở Saigon trước thì sao, nói nhỏ nghe, dẫn tui tới chỗ nào có cái piano á, tui sẽ hậu tạ mấy cái vụ VBA bằng vài bài Sonate... được hông? Thôi, chuyện này có lẽ phải mang sang chuyên mục khác chứ ai mà nói ở đây.
Tui mới gửi thêm mấy cái vụ tính thùng viên, giúp với nha.

anhtuan1066
08-10-07, 09:26 PM
He... he... CẢNH CÁO... CẢNH CÁO... Bắp nhà ta spam tè le mà ko thấy ai nói gì... Thế mà mình nói có vài câu lại bị cảnh báo STOP.... Hic... Bất công quá