Code tính số ngày, ngày bắt đầu và kết thúc (1 người xem)

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

Excel365

Thành viên tích cực
Tham gia
29/10/10
Bài viết
865
Được thích
127
Giới tính
Nam
Nhờ các anh chị giúp em viết code để tính số ngày, ngày bắt đầu và kết thúc theo từng trường hợp.

Trân trọng cảm ơn
 

File đính kèm

Nhờ các anh chị giúp em viết code để tính số ngày, ngày bắt đầu và kết thúc theo từng trường hợp.

Trân trọng cảm ơn
PHP:
Sub test()
Dim arr(), i
arr = Range("E12", [E65536].End(3)).Resize(, 4).Value
For i = 1 To UBound(arr)
   If arr(i, 1) <> "" Then
      If arr(i, 2) = "" Then
         arr(i, 2) = arr(i, 4) - arr(i, 3) + 1
      ElseIf arr(i, 3) = "" Then
         arr(i, 3) = arr(i, 4) - arr(i, 2) + 1
      ElseIf arr(i, 4) = "" Then
         arr(i, 4) = arr(i, 3) + arr(i, 2) - 1
      End If
   End If
Next
[E12].Resize(i - 1, 4) = arr
End Sub
 
Upvote 0
PHP:
Sub test()
Dim arr(), i
arr = Range("E12", [E65536].End(3)).Resize(, 4).Value
For i = 1 To UBound(arr)
   If arr(i, 1) <> "" Then
      If arr(i, 2) = "" Then
         arr(i, 2) = arr(i, 4) - arr(i, 3) + 1
      ElseIf arr(i, 3) = "" Then
         arr(i, 3) = arr(i, 4) - arr(i, 2) + 1
      ElseIf arr(i, 4) = "" Then
         arr(i, 4) = arr(i, 3) + arr(i, 2) - 1
      End If
   End If
Next
[E12].Resize(i - 1, 4) = arr
End Sub
Code của anh tính kết quả như ý của em rồi, nhưng em muôn khi em nhập Số ngày, và ngày bắt đàu thì ô còn lại tự tính kết quả, .... (Không cần phải chay code) Anh có thể chỉnh lại dùm em
 
Upvote 0
Bạn xài hàm tự tạo sau:
PHP:
Option Explicit
Function TinhNgay(Optional SoNgay As Integer, Optional fDat As Date, Optional lDat As Date)
 
 If SoNgay = 0 Then TinhNgay = lDat - fDat
 If fDat = 0 Then TinhNgay = lDat - SoNgay
 If lDat = 0 Then TinhNgay = fDat + SoNgay

End Function

Lúc đó tại [G14] ta áp công thức =TinhNgay(F14, ,H14)
 
Upvote 0
Bạn xài hàm tự tạo sau:
PHP:
Option Explicit
Function TinhNgay(Optional SoNgay As Integer, Optional fDat As Date, Optional lDat As Date)
 
 If SoNgay = 0 Then TinhNgay = lDat - fDat
 If fDat = 0 Then TinhNgay = lDat - SoNgay
 If lDat = 0 Then TinhNgay = fDat + SoNgay

End Function

Lúc đó tại [G14] ta áp công thức =TinhNgay(F14, ,H14)
Nếu sử dụng hàm này, thì chỉ tính được ô G, ý của em là tùy theo điều kiện chứ không chỉ tính riêng theo điều kiện như cột G
 
Upvote 0
Nếu sử dụng hàm này, thì chỉ tính được ô G, ý của em là tùy theo điều kiện chứ không chỉ tính riêng theo điều kiện như cột G

Công thức tại [F16] sẽ là

=TinhNgay(,G16,H16)

 
Upvote 0
Công thức tại [F16] sẽ là

=TinhNgay(,G16,H16)
Đúng là vậy,
Nếu như
1/biết được số ngày, và ngày bắt đầu thì ngày kết thúc phải tự tính
2/biết được số ngày và ngày kết thúc thì ngày bắt đầu tự tính
3/Nếu biết ngày bắt đầu và kết thúc thì số ngày sẽ tự tính
Số ngày, ngày bắt đầu, ngày kết thúc, sẽ nhập trự tiếp trên 3 cột F;G;H
 
Upvote 0
(ông thức tại [H12] bạn tự suy ra không được sao?

Gợi í nha: =TinhNgay( [Ô cột F], [Ô cột G])
 
Upvote 0
Ý em không phải là vậy. em muôn nó tự tính giống như select change vậy
Lẽ ra ngay bài 1 bạn nói luôn
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [F12:H1000]) Is Nothing Then End
Application.EnableEvents = False
Dim arr()
arr = Cells(Target.Row, 6).Resize(, 3).Value
If arr(1, 1) = "" Then
   arr(1, 1) = arr(1, 3) - arr(1, 2) + 1
ElseIf arr(1, 2) = "" Then
   arr(1, 2) = arr(1, 3) - arr(1, 1) + 1
ElseIf arr(1, 3) = "" Then
   arr(1, 3) = arr(1, 2) + arr(1, 1) - 1
End If
 Cells(Target.Row, 6).Resize(, 3) = arr
Application.EnableEvents = True
End Sub
 
Upvote 0
Lẽ ra ngay bài 1 bạn nói luôn
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [F12:H1000]) Is Nothing Then End
Application.EnableEvents = False
Dim arr()
arr = Cells(Target.Row, 6).Resize(, 3).Value
If arr(1, 1) = "" Then
   arr(1, 1) = arr(1, 3) - arr(1, 2) + 1
ElseIf arr(1, 2) = "" Then
   arr(1, 2) = arr(1, 3) - arr(1, 1) + 1
ElseIf arr(1, 3) = "" Then
   arr(1, 3) = arr(1, 2) + arr(1, 1) - 1
End If
 Cells(Target.Row, 6).Resize(, 3) = arr
Application.EnableEvents = True
End Sub
Cám ơn anh nhiều nhưng nó phát sinh lỗi anh ơi
Trường hợp khi nhậpngày bắt đầu, Enter nó báo lỗi ngay dòng
Cells(Target.Row, 6).Resize(, 3) = arr
Nhờ anh xem giúp em
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom