Nhờ anh chị hỗ trợ về hàm tự tạo bằng VBA, xác định ngày theo chu kỳ trong tương lai đáp ứng điều kiện

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

ntquocsy

Thành viên mới
Tham gia
26/8/08
Bài viết
12
Được thích
0
Kính chào các anh chị, chúc các anh chị sức khỏe.
Em là người mới học về Excel VBA, chủ yếu là thông qua các bài mẫu để chỉnh sửa và sử dụng chứ cũng chưa tự viết được hàm hoàn chỉnh.
Hôm nay, em có viết 1 hàm tự tạo bằng VBA để:
"Xác định 1 ngày kiểm tra trong tương lai theo chu kỳ là 3 tháng với điều kiện là ngày trong tương lai sẽ lớn hơn 1 ngày được xác định (ví dụ ngày điều kiện là 15/05/2023)"
Ví dụ:
Ngày tại ô B1 là 21/06/2018, chu kỳ là 3 tháng phải đánh giá lại 1 lần thì theo xác định tay thì nó sẽ là ngày 21/06/2023.
Khi em dùng vòng lặp để tạo công thức thì không hiểu vì sao kết quả lại ra con số khác. (chỉ có 2,3 dòng lệnh nhưng em ko biết vì sao ra kết quả sai, em cũng không hiểu được cách VBA vận hành)
Mong các anh chị giúp đỡ, em có Upfile đính kèm.
Cảm ơn các anh chị rất nhiều ạ.Untitled.png
Mã:
Function ngay_tdls(ngay As Date)
    Dim i As Integer
    Dim ngay_bd As Date
        i = 0
        ngay_tdls = ngay
        ngay_bd = DateSerial(Month:=5, Day:=15, Year:=2023)
        Do While ngay_tdls < ngay_bd
            i = i + 3
            ngay_tdls = DateAdd("m", i, ngay_tdls)
        Loop
End Function
 

File đính kèm

  • hoc vba2.xls
    73.5 KB · Đọc: 3
Lần chỉnh sửa cuối:
Giải pháp
Function ngay_tdls(ngay As Date)
Dim i As Integer
Dim ngay_bd As Date
i = 0
ngay_tdls = ngay
ngay_bd = DateSerial(Month:=5, Day:=15, Year:=2023)
Do While ngay_tdls < ngay_bd
i = i + 3
ngay_tdls = DateAdd("m", i, ngay_tdls)
Loop
End Function
Sửa dòng: ngay_tdls = DateAdd("m", i, ngay_tdls)

thành: ngay_tdls = DateAdd("m", 3, ngay_tdls)

Dòng nảy dài: ngay_bd = DateSerial(Month:=5, Day:=15, Year:=2023)

Ngắn hơn một chút: ngay_bd = DateSerial(2023, 5, 15)
Function ngay_tdls(ngay As Date)
Dim i As Integer
Dim ngay_bd As Date
i = 0
ngay_tdls = ngay
ngay_bd = DateSerial(Month:=5, Day:=15, Year:=2023)
Do While ngay_tdls < ngay_bd
i = i + 3
ngay_tdls = DateAdd("m", i, ngay_tdls)
Loop
End Function
Sửa dòng: ngay_tdls = DateAdd("m", i, ngay_tdls)

thành: ngay_tdls = DateAdd("m", 3, ngay_tdls)

Dòng nảy dài: ngay_bd = DateSerial(Month:=5, Day:=15, Year:=2023)

Ngắn hơn một chút: ngay_bd = DateSerial(2023, 5, 15)
 
Upvote 0
Giải pháp
Sửa dòng: ngay_tdls = DateAdd("m", i, ngay_tdls)

thành: ngay_tdls = DateAdd("m", 3, ngay_tdls)

Dòng nảy dài: ngay_bd = DateSerial(Month:=5, Day:=15, Year:=2023)

Ngắn hơn một chút: ngay_bd = DateSerial(2023, 5, 15)
Cảm ơn anh chị rất rất nhiều, code đã chạy được rồi ạ, em đã hiểu rồi
 
Lần chỉnh sửa cuối:
Upvote 0
Ngắn hơn một chút: ngay_bd = DateSerial(2023, 5, 15)
Nếu nó là hằng thì chỉ như vầy:
ngay_bd = #2023-05-14#
(cả 3 tham số của bạn đều là hằng, như vậy kết quả coi như hằng)

Compiler tự tính ra, không cần phải gọi hàm DateSerial
 
Upvote 0
Web KT

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

Back
Top Bottom