Цитата |
---|
Сергей Евдокимов написал: поэтому и провожу декомпозицию проблемных моментов, постепенно их решая. |
это не всегда правильно, так как подход может отличатся и целиком задачу решить проще чем соединить.
Так как периоды не пересекаются, то уникальность нас не интересует
берем укороченный мной вариант
=SMALL(--TEXT(TEXT(MOD(COLUMN(A:S);2)*ROW(INDEX(A:A;MIN(2:2)):INDEX(A:A;MAX(2:2)));"[>="&A2:S2&"]0;1\E9");"[<="&B2:T2&"]0;1\E9");ROW(A1:INDEX(A:A;SUM((B2:T2-A2:S2+1)*MOD(COLUMN(A:S);2)))))
1.ну то что период дней для проверки это от MIN(2:2) до MAX(2:2) - ROW(INDEX(A:A;MIN(2:2)):INDEX(A:A;MAX(2:2))) формирует строчную последовательность целых чисел равных датам.
2 MOD(COLUMN(A:S);2)* нужно для того чтоб отсечь проверку с четными парами диапазонов как , так как это столбцы то получаем при перемножении двумерный массив.
4 далее Андрей напомнил мне использование фомата условного
сперва число, а это целое число в нечетном столбце или ноль в четном форматируется по правилу [>="&A2:S2&"]0;1\E9" в результате будет или само число если оно больше значени A2:S2 , правда записанное текстом или 1E9, то есть 10^9 что больше дат на многие года. напоминаю на входе двумерный массив образно
1 0 1 0...
2 0 2 0 ...
3 0 3 0 ...
4 0 4 0 ...
первый столбец сравнивается с A второй с B..... и на выходе если A2 = 2 например
1E9 1E9 1E9 1E9
2 1E9 1E9 1E9
3 1E9 1E9 1E9
4 1E9 1E9 1E9
это снова форматируется [<="&B2:T2&"]0;1\E9" и если b2 например 3 то
получаем
1E9 1E9 1E9 1E9
2 1E9 1E9 1E9
3 1E9 1E9 1E9
1E9 1E9 1E9 1E9
5. далее все просто берутся по порядку от меньшего к большему SMALL( ...... . а ROW(A1:INDEX(A:A;SUM((B2:T2-A2:S2+1)*MOD(COLUMN(A:S);2)))) формирует последовательность от 1 до числа дней которое
SUM((B2:T2-A2:S2+1)*MOD(COLUMN(A:S);2)
количество дней всего будет равно сумме разности окончания периодов и их начала (B2:T2-A2:S2+1) , но так как массив выстроен строкой то берутся только разности нечетные по порядку MOD(COLUMN(A:S);2)
на выходе последовательность ваших дат. в примере это 2 и 3