Working from the inside out, we first "normalize" row numbers to begin with 1 using the ROW function and an offset:
In this case, the first row of data is in row 5, so we use an offset of 4:
ROW()-4 // 1 in row 5 ROW()-4 // 2 in row 6 ROW()-4 // 3 in row 7 etc.
The result goes into the CEILING function, which rounds incoming values up to a given multiple of n. Essentially, the CEILING function counts by a given multiple of n:
This count is then divided by n to count by groups of n, starting with 1:
Finally, the ISEVEN function is used to force a TRUE result for all even row groups, which triggers the conditional formatting.
Odd row groups return FALSE so no conditional formatting is applied.
Shade first group
To shade rows starting with the the first group of n rows, instead of the second, replace ISEVEN with ISODD: