I have a simple rule for fast VBA: NEVER ACCESS THE WORKSHEET IN A LOOP.
Rules are made to be broken. Many times you can't use an array:
1. Formatting is required
2. Imperceptible performance improvements not work the complexity
3. Debugging is oft times easier on a WS
In OP's case, since there are formulas in row 6 being used, I don't think trying to use an array would be worth the trouble of using the formulas
However, if the computations can be incorporated into the macro instead of the WS formulas, then I think it would be worthwhile using arrays if there's lots of data
Option Explicit
Sub test()
Dim ws As Worksheet
Dim rData As Range
Dim aryData As Variant
Dim r As Long
Application.ScreenUpdating = False
Set ws = Worksheets("main workbook")
'row 6 formulas cleared
Set rData = ws.Cells(7, 1).CurrentRegion
aryData = rData.Value
For r = LBound(aryData, 1) + 1 To UBound(aryData, 1)
If aryData(r, 1) > 0 Then
aryData(r, 2) = 100
aryData(r, 7) = 1600
aryData(r, 8) = 1500
aryData(r, 11) = 100
aryData(r, 15) = "Very Good"
aryData(r, 18) = 500
aryData(r, 154) = 100
aryData(r, 156) = "Wonderful"
End If
Next r
rData.Value = aryData
Application.ScreenUpdating = True
End Sub