My concern here is that if we use Dave's second submitted code which the OP say works if we change Tcnt to (tcnt-1) in line 11.
Sub Test2()
Dim ws As Worksheet, LastRow As Integer, Cnt As Integer, Tcnt As Integer
Set ws = ThisWorkbook.Sheets("Sheet1")
With ws
LastRow = .Range("I" & .Rows.Count).End(xlUp).Row
.Range(.Cells(1, 2), .Cells(LastRow, 2)).ClearContents
End With
For Cnt = 1 To LastRow
Tcnt = Tcnt + 1
If ws.Cells(Cnt, "I") >= ws.Cells(1, "D") Then
ws.Cells(Cnt, "B") = Tcnt
Tcnt = 0
End If
Next Cnt
End Sub
In this code we are setting Tcnt to 1
Why isn't Tcnt set to zero initially? If we follow the OP's suggestion of amending the following line to this
ws.Cells(Cnt, "B") = (Tcnt - 1)
You are setting the value back to Zero if it finds a value greater than or equal to the value in cell D1, which means it doesn't count the find.