Tìm số ngày nghỉ liền nhau 2 ngày trở lên (2 người xem)

  • Thread starter Thread starter nvh611
  • Ngày gửi Ngày gửi
Liên hệ QC

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

Cảm ơn bạn @phuocam liệu 2 hàm này ghép với nhau được không bạn?
Bạn xem code đúng không nhé.
Mã:
Function solan(ByVal mang As Range, Optional ByVal so As Integer = 2) As String
         Dim arr, i As Long, j As Long, a As Long, n As Long, tong As Integer, max As Integer
         arr = mang.Value
          n = UBound(arr, 1)
         For j = 1 To UBound(arr, 2)
             a = 0
             For i = 1 To n
                 If UCase(arr(i, j)) = "X" Then
                    a = a + 1
                    If a >= so Then tong = tong + 1
                Else
                    If a >= max Then max = a
                    a = 0
                 End If
             Next i
        Next j
       solan = tong & ";" & max
End Function
Mã:
=solan(C5:F27,3)
 
Nhờ các bạn trên diễn đàn giúp đỡ như file đính kèm
Cảm ơn các bạn
Dùng công thức cho trường hợp n ngày liên tiếp:
=SUM(IFERROR(SQRT(FREQUENCY(ROW(C5:F28)+(COLUMN(C5:F28)-1)*ROWS(C5:C28),IF(C5:F28<>"x",ROW(C5:F28)+(COLUMN(C5:F28)-1)*ROWS(C5:C28)))-2)^2,""))
Bấm Ctrl+Shift+Enter!
Muốn thay đổi số ngày liên tiếp khác thì sửa số -2 thành -3 hoặc-4... Muốn tìm ngày liên tiếp lớn nhất thì sửa Sum thành Max là được.
 
Dùng công thức cho trường hợp n ngày liên tiếp:
=SUM(IFERROR(SQRT(FREQUENCY(ROW(C5:F28)+(COLUMN(C5:F28)-1)*ROWS(C5:C28),IF(C5:F28<>"x",ROW(C5:F28)+(COLUMN(C5:F28)-1)*ROWS(C5:C28)))-2)^2,""))
Bấm Ctrl+Shift+Enter!
Muốn thay đổi số ngày liên tiếp khác thì sửa số -2 thành -3 hoặc-4... Muốn tìm ngày liên tiếp lớn nhất thì sửa Sum thành Max là được.
Cảm ơn bạn công thức
Siêu đẳng
Bài đã được tự động gộp:

Bạn xem code đúng không nhé.
Mã:
Function solan(ByVal mang As Range, Optional ByVal so As Integer = 2) As String
         Dim arr, i As Long, j As Long, a As Long, n As Long, tong As Integer, max As Integer
         arr = mang.Value
          n = UBound(arr, 1)
         For j = 1 To UBound(arr, 2)
             a = 0
             For i = 1 To n
                 If UCase(arr(i, j)) = "X" Then
                    a = a + 1
                    If a >= so Then tong = tong + 1
                Else
                    If a >= max Then max = a
                    a = 0
                 End If
             Next i
        Next j
       solan = tong & ";" & max
End Function
Mã:
=solan(C5:F27,3)
Cảm ơn bạn @snow25 công thức quá hay và quá tuyệt vời
Ý tưởng của mình là khác
(Nhưng bạn làm như này thì hay hơn tuyệt vời hơn vì nó luôn luôn báo trước cho số ngày nghỉ liên tiếp lớn nhất)
Cảm ơn rất nhiều.
 
Lần chỉnh sửa cuối:
Bạn xem code đúng không nhé.
Mã:
Function solan(ByVal mang As Range, Optional ByVal so As Integer = 2) As String
         Dim arr, i As Long, j As Long, a As Long, n As Long, tong As Integer, max As Integer
         arr = mang.Value
          n = UBound(arr, 1)
         For j = 1 To UBound(arr, 2)
             a = 0
             For i = 1 To n
                 If UCase(arr(i, j)) = "X" Then
                    a = a + 1
                    If a >= so Then tong = tong + 1
                Else
                    If a >= max Then max = a
                    a = 0
                 End If
             Next i
        Next j
       solan = tong & ";" & max
End Function
Mã:
=solan(C5:F27,3)
Chào bạn @snow25 để công thức tiện xử dụng bạn có thể sửa giúp mình thêm 1 hằng số được không
=solan(C5:F27,3) tức là khi tìm bất kỳ hằng số nào đó không phải là X
If UCase(arr(i, j)) = "X" Then
Thì bạn thêm =solan("Y";C5:F27,3) thì bạn thêm hằng số "Y' vào biểu thức
Cảm ơn bạn!
 
Chào bạn @snow25 để công thức tiện xử dụng bạn có thể sửa giúp mình thêm 1 hằng số được không
=solan(C5:F27,3) tức là khi tìm bất kỳ hằng số nào đó không phải là X
If UCase(arr(i, j)) = "X" Then
Thì bạn thêm =solan("Y";C5:F27,3) thì bạn thêm hằng số "Y' vào biểu thức
Cảm ơn bạn!
Đây bạn xem.Mặc định của nó là "X" nếu bạn không chọn gì.
Mã:
=solan(B4:B8,2,"x")
Mã:
Function solan(ByVal mang As Range, Optional ByVal so As Integer = 2, Optional ByVal dk As String = "X") As String
         Dim arr, i As Long, j As Long, a As Long, n As Long, tong As Integer, max As Integer
         arr = mang.Value
          n = UBound(arr, 1)
         For j = 1 To UBound(arr, 2)
             a = 0
             For i = 1 To n
                 If UCase(arr(i, j)) = UCase(dk) Then
                    a = a + 1
                    If a >= so Then tong = tong + 1
                Else
                    If a >= max Then max = a
                    a = 0
                 End If
             Next i
        Next j
       solan = tong & ";" & max
End Function
 
Đây bạn xem.Mặc định của nó là "X" nếu bạn không chọn gì.
Mã:
=solan(B4:B8,2,"x")
Mã:
Function solan(ByVal mang As Range, Optional ByVal so As Integer = 2, Optional ByVal dk As String = "X") As String
         Dim arr, i As Long, j As Long, a As Long, n As Long, tong As Integer, max As Integer
         arr = mang.Value
          n = UBound(arr, 1)
         For j = 1 To UBound(arr, 2)
             a = 0
             For i = 1 To n
                 If UCase(arr(i, j)) = UCase(dk) Then
                    a = a + 1
                    If a >= so Then tong = tong + 1
                Else
                    If a >= max Then max = a
                    a = 0
                 End If
             Next i
        Next j
       solan = tong & ";" & max
End Function
Cảm ơn bạn @snow25
 
Web KT

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

Back
Top Bottom