Option Explicit
Const Cot = 102
Const Dong = 966748
Const k = 20000
Dim Arr()
Dim ArrNoData(), ArrData()
Sub xyz(ByVal FirstRow&, ByVal LastRow&)
Dim n&, i&, j&, MaxData&, MaxNoData&, CurrentData&, CurrentNoData&
Arr = Range("E" & FirstRow, "DB" & LastRow).Value2
n = LastRow - FirstRow + 1
For i = 1 To n
MaxData = 0
MaxNoData = 0
CurrentData = 0
CurrentNoData = 0
For j = 1 To Cot
If Arr(i, j) > 0 Then
If CurrentNoData > MaxNoData Then MaxNoData = CurrentNoData
CurrentNoData = 0
CurrentData = CurrentData + 1
Else
If CurrentData > MaxData Then MaxData = CurrentData
CurrentData = 0
CurrentNoData = CurrentNoData + 1
End If
Next
If MaxData = 0 Then MaxData = CurrentData
If MaxNoData = 0 Then MaxNoData = CurrentNoData
ArrNoData(i, 1) = MaxNoData
ArrData(i, 1) = MaxData
Next
Range("B" & FirstRow, "B" & LastRow) = ArrNoData
Range("D" & FirstRow, "D" & LastRow) = ArrData
End Sub
Sub xxx()
Dim i&, t
Application.ScreenUpdating = False
t = Timer
i = 4
ReDim ArrNoData(1 To k, 1 To 1)
ReDim ArrData(1 To k, 1 To 1)
Do
If i + k - 1 > Dong Then
xyz i, Dong
GoTo Thoat
End If
xyz i, i + k - 1
i = i + k
Loop
Thoat:
Application.ScreenUpdating = True
MsgBox Timer - t
End Sub