Это проще всего сделать с помощью вспомогательного столбца
=if(B4=1,if(B3=0,0,mod(E3+1,4)),"")
, начиная с E4, затем
=if(E4<>"",index(A$4:A$7,E4+1),"")
, начиная с F4.
Вот один из способов сделать этоэто с одной формулой, не являющейся массивом:
=IF(B4=1,INDEX(A$4:A$7,MOD(SUM(B4:INDEX(B:B,MAX(INDEX(IF(B$4:B4=0,ROW(B$4:B4)),0)),0))-1,4)+1),"")
в (скажем) G4 и опущен вниз.
NB оба они предполагают, что последовательность в столбце B начинается с нуля и будетнужна корректировка, если это не так.
Возможна также формула массива:
=ArrayFormula(if(B4:B=1,vlookup(mod(sumif(row(B4:B),"<="&row(B4:B),B4:B)-sumif(row(B4:B),"<="&vlookup(row(B4:B),if(B4:B=0,row(B4:B)),1),B4:B)-1,4)+4,{row(4:7),A4:A7},2,false),""))
РЕДАКТИРОВАТЬ
Вероятно, самый простой способ заставить его работать, когда первая строка включенных / выключенных данных содержит 1, состоит в том, чтобы включить строку заголовка в столбец B и использовать n (), чтобы рассматривать его как ноль, так чтоформула вспомогательного столбца -
=if(B4=1,if(n(B3)=0,0,mod(E3+1,4)),"")
, а формула без массива -
=IF(B4=1,INDEX(A$4:A$7,MOD(SUM(B4:INDEX(B:B,MAX(INDEX(IF(n(B$3:B4)=0,ROW(B$3:B4)),0)),0))-1,4)+1),"")
Формула массива работает без каких-либо изменений.Это произошло по случайной причине: второй Vlookup завершится неудачно с # N / A, если в столбце B перед текущей строкой нет нулей, а когда он передан в Sumif, вы получите нулевой результат, который вам нужен.