1. В диапазоне $LT5:$MO5 22 столбца. Желтых по 4 столбца, а белых по 2, всего 4+2=6 2. СТОЛБЕЦ($A:$V) - дает массив 1; 2; ...; 22. СТОЛБЕЦ($A:$V)-1 - 0;1;...;21 3. ОСТАТ(СТОЛБЕЦ($A:$V)-1;6) - остаток от деления п.2 на 6, дает 0;1;2;3;4;5;0;1;... 0-3 - желтые столбцы, 4-5 - белые 4. ЕСЛИ(ОСТАТ(СТОЛБЕЦ($A:$V)-1;6)<4;$LT5:$MO5) - если столбцы желтые, то значения из $LT5:$MO5, если белые, то ЛОЖЬ 5. ЕСЛИОШИБКА(ПОИСКПОЗ($LT5:$MO5; п.4 ;);"") - ищем номер вхождения (номер первой по порядку встречающейся ячейки с нужным значением, см. *) значений из $LT5:$MO5 в полученном в п.4 (то есть в желтых значениях из $LT5:$MO5). Если не находим (это некоторые белые), то "" * Например, ПОИСКПОЗ({5;6;222;6;"";5};{5;6;ЛОЖЬ;6;"";5};) даст массив {1;2;Н/Д;2;5;1} 6. СТОЛБЕЦ($A:$V)*($LT5:$MO5<>"") - даст массив 1;2;... (см. п.2) только для тех случаев, когда в $LT5:$MO5 не пусто 7. ЕСЛИОШИБКА(ПОИСКПОЗ($LT5:$MO5;ЕСЛИ(ОСТАТ(СТОЛБЕЦ($A:$V)-1;6)<4;$LT5:$MO5););"")=СТОЛБЕЦ($A:$V)*($LT5:$MO5<>"") - сравниваем массивы, полученные в п. 5 и в п.6, получаем ИСТИНА только для тех элементов массива, где $LT5:$MO5 не пустые и встречаются в первый раз 8. ЕСЛИ( п.7 ;СТОЛБЕЦ($LT:$MO)) - если в массиве, полученном в п.7, у нас ИСТИНА, то дает номер соответствующего столбца, иначе - ЛОЖЬ 9. СТОЛБЕЦ(A5) - дает номер столбца ячейки А5 - 1. При смещении формулы вправо ссылка на А5 тоже будет смещаться (станет В5, С5, ...) и даст 2, 3, ... 10. НАИМЕНЬШИЙ( п.8 ; п.9 ) - вынимает из массива п.8 то наименьшее значение, которое мы получили в п.9. 11. ИНДЕКС(5:5; п.10 ) - из строки 5 вынимает значение той ячейки, номер столбца которой мы нашли в п.10 12. ЕСЛИОШИБКА( п.11 ; "" ) - когда уникальные кончились, НАИМЕНЬШИЙ даст ошибку. Вместо нее пишем ""
1. В диапазоне $LT5:$MO5 22 столбца. Желтых по 4 столбца, а белых по 2, всего 4+2=6 2. СТОЛБЕЦ($A:$V) - дает массив 1; 2; ...; 22. СТОЛБЕЦ($A:$V)-1 - 0;1;...;21 3. ОСТАТ(СТОЛБЕЦ($A:$V)-1;6) - остаток от деления п.2 на 6, дает 0;1;2;3;4;5;0;1;... 0-3 - желтые столбцы, 4-5 - белые 4. ЕСЛИ(ОСТАТ(СТОЛБЕЦ($A:$V)-1;6)<4;$LT5:$MO5) - если столбцы желтые, то значения из $LT5:$MO5, если белые, то ЛОЖЬ 5. ЕСЛИОШИБКА(ПОИСКПОЗ($LT5:$MO5; п.4 ;);"") - ищем номер вхождения (номер первой по порядку встречающейся ячейки с нужным значением, см. *) значений из $LT5:$MO5 в полученном в п.4 (то есть в желтых значениях из $LT5:$MO5). Если не находим (это некоторые белые), то "" * Например, ПОИСКПОЗ({5;6;222;6;"";5};{5;6;ЛОЖЬ;6;"";5};) даст массив {1;2;Н/Д;2;5;1} 6. СТОЛБЕЦ($A:$V)*($LT5:$MO5<>"") - даст массив 1;2;... (см. п.2) только для тех случаев, когда в $LT5:$MO5 не пусто 7. ЕСЛИОШИБКА(ПОИСКПОЗ($LT5:$MO5;ЕСЛИ(ОСТАТ(СТОЛБЕЦ($A:$V)-1;6)<4;$LT5:$MO5););"")=СТОЛБЕЦ($A:$V)*($LT5:$MO5<>"") - сравниваем массивы, полученные в п. 5 и в п.6, получаем ИСТИНА только для тех элементов массива, где $LT5:$MO5 не пустые и встречаются в первый раз 8. ЕСЛИ( п.7 ;СТОЛБЕЦ($LT:$MO)) - если в массиве, полученном в п.7, у нас ИСТИНА, то дает номер соответствующего столбца, иначе - ЛОЖЬ 9. СТОЛБЕЦ(A5) - дает номер столбца ячейки А5 - 1. При смещении формулы вправо ссылка на А5 тоже будет смещаться (станет В5, С5, ...) и даст 2, 3, ... 10. НАИМЕНЬШИЙ( п.8 ; п.9 ) - вынимает из массива п.8 то наименьшее значение, которое мы получили в п.9. 11. ИНДЕКС(5:5; п.10 ) - из строки 5 вынимает значение той ячейки, номер столбца которой мы нашли в п.10 12. ЕСЛИОШИБКА( п.11 ; "" ) - когда уникальные кончились, НАИМЕНЬШИЙ даст ошибку. Вместо нее пишем ""_Boroda_
Ах, - это массив! А я, почему-то, в упор этого не видел и не осознал. Соответственно, вся конструкция ОСТАТ(СТОЛБЕЦ($A:$V)-1;6) воспринималась совершенно таинственной. Спасибо! Теперь в общих чертах стало понятно, почему старая формула давала ошибку на белых. Но пока не понял, почему она не заработала, ведь все операторы те же самые и "" проверялся? Кстати, там в формуле есть ПОИСКПОЗ(-$LT6:$MO6;-$LT6:$MO6;). Что дают эти минусы перед диапазонами?
Ещё, когда сам пытался что-то соорудить, возникла идея использовать массив констант. То есть напрямую указать в формуле что-то типа {1;2;3;4;7;8;9;10;13;14;15;16;19;20;21;22} в качестве целевых ячеек, или даже сразу номера столбцов {332;333;334;335;338;339;340;341;344;345;346;347;350;351;352;353}, но не получилось, а разобраться не успел. Вообще возможна ли такая конструкция? Ну, чисто теоретически и в познавательных целях?
Ух-ты! Спасибо, большое! Теперь всё гораздо понятнее стало!
Ах, - это массив! А я, почему-то, в упор этого не видел и не осознал. Соответственно, вся конструкция ОСТАТ(СТОЛБЕЦ($A:$V)-1;6) воспринималась совершенно таинственной. Спасибо! Теперь в общих чертах стало понятно, почему старая формула давала ошибку на белых. Но пока не понял, почему она не заработала, ведь все операторы те же самые и "" проверялся? Кстати, там в формуле есть ПОИСКПОЗ(-$LT6:$MO6;-$LT6:$MO6;). Что дают эти минусы перед диапазонами?
Ещё, когда сам пытался что-то соорудить, возникла идея использовать массив констант. То есть напрямую указать в формуле что-то типа {1;2;3;4;7;8;9;10;13;14;15;16;19;20;21;22} в качестве целевых ячеек, или даже сразу номера столбцов {332;333;334;335;338;339;340;341;344;345;346;347;350;351;352;353}, но не получилось, а разобраться не успел. Вообще возможна ли такая конструкция? Ну, чисто теоретически и в познавательных целях?Kaktus8
1. В старой формуле результаты ПОИСКПОЗ без ограничений на желтые сравнивались с номерами столбцов с ограничениями. И во второй строке конечно же для двойки ничего не получалось - она же первая белая, а не желтая 2. Попробуйте для случая, когда не ="", а просто пустая ячейка, написать без минусов. Там, где пусто, Вы получите НД. А минусы пустую ячейку преобразуют в ноль и тогда ПОИСКПОЗ отрабатывает нормально 3. Да, можно и так
1. В старой формуле результаты ПОИСКПОЗ без ограничений на желтые сравнивались с номерами столбцов с ограничениями. И во второй строке конечно же для двойки ничего не получалось - она же первая белая, а не желтая 2. Попробуйте для случая, когда не ="", а просто пустая ячейка, написать без минусов. Там, где пусто, Вы получите НД. А минусы пустую ячейку преобразуют в ноль и тогда ПОИСКПОЗ отрабатывает нормально 3. Да, можно и так