



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
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 emPHP: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
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


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 GBạ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


Đúng là vậy,Công thức tại [F16] sẽ là
=TinhNgay(,G16,H16)




Lẽ ra ngay bài 1 bạn nói luônÝ em không phải là vậy. em muôn nó tự tính giống như select change vậy
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 ơiLẽ 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
Nhờ anh xem giúp emCells(Target.Row, 6).Resize(, 3) = arr