Упрощение
Используйте Long для строк и Integer для столбцов.
Когда вы пишете With Sheet1
везде, где вы должны написать Sheet1
, например, Sheet1.Range(whatever)...
, вместо этого вы можете написать просто .Range(whatever)
, пока не закроете Конец .
Выход для выходит только из цикла For Loop, где он находится. Таким образом, он делает именно то, что вы делаете с вашей линией Goto , но вы используете строку больше.
Когда вы используете Sheet1 или Sheet2и т. д. вы фактически используете имена кодов, поэтому вы можете изменить имена на вкладке, и код все равно будет выполняться.
Подсчет в обратном направлении обычно используется при удалении строки за строкой, поэтому в этом нет необходимости, посколькуты только считаешь.
Option Explicit
Sub CheckDates()
Dim dataCount As Long
Dim i As Long
Dim j As Integer
Dim lastrow As Long
With Sheet1
lastrow = .Cells(.Rows.count, "B").End(xlUp).Row
'have to keep data in a table for this to actually work as it ctrls+left
'to the table, which will end where the very last text of any row is
lastColumn = .Cells(1, .Columns.count).End(xlToLeft).Column
For i = 3 To lastrow
For j = 6 To lastColumn
If .Cells(i, j) < Sheet2.Cells(1, 1) And .Cells(i, j - 1) = "Reçu" Then
dataCount = dataCount + 1
Exit For
End If
Next
Next
End With
With Sheet2
.Cells(1, 7) = dataCount
.Select
End With
'Runs the DeleteSAC Macro
Call DeleteSAC
End Sub