Your presumption that For Each is faster than For 1 To is wrong. Both loop through a set of numbers which they can do at identical speed.
In the For Each variant the number identifies objects in a collection, such as Sheets(1), Sheets(2), Sheets(3) etc. These sheets aren't loaded or even accessed in the loop. They are just referenced.
By comparison, For i = 1 to 3: Set Ws = Sheets(i) would just create references to the sheets.
Accordingly, a difference develops from what you do with the referenced objects, not from the way you reference them. For Each often appears as the somewhat simpler code. But if you wish to refer to ActiveSheet.Cells(3) you do need to know whether this will be C1 or A3 and the apparent greater ease of coding comes at the cost of transparency. I treat it as a matter of taste.
Dim Arr As Variant
Dim R As Long
Arr = Range("A1:A20")
For R = 1 To UBound(Arr)
Debug.Print Arr(R, 1)
Next R
is much faster than
Dim Rng As Range
Dim Cell As Range
Set Rng = Range("A1:A20")
For Each Cell in Rng
Debug.Print Cell.Value
Next Cell
But this is because the second code references the sheet 20 times against the first snippet's once. Perhaps it's this difference that you have been reading about.