Страницы: 1
RSS
Как определить сколько уроков необходимо ожидать учителю до определенного урока
 
Собственно, вопрос
Лист Расписание_уч - расписание учителей. На листе ПОИСК D5:D18 - это то, на какой урок нужна замена. На листе ФОРМУЛА - список свободных учителей на день и на номер урока. Вопрос по столбцу Е. Как определить сколько учителю ждать?
Например, возьмем Алееву
Согласно листу поиск нужно заменить уроки 1,2,3,4,5,6. Она свободна, согласно листу формула на уроках 1,2,3,4,5. Теперь ее расписание. Она занята на уроках 6,7,8. Значит, если нужно: заместить 1 (первый) урок, то ждать 5 уроков, заместить 2 (второй) урок, то ждать 4 урока, заместить 3 (третий) урок, то ждать 4 урока. Сложность в том, что если уроки не 1,2,3,4,5,6 были бы, а, скажем, что надо заместить 9,10,11. Как же это уместить в формуле, чтобы расчет был верный? Желательно в динамической т.к. я стараюсь для оптимизации их максимально использовать.
Если кто знает, пожалуйста, подскажите

Пример исправлен
Изменено: extrafant - 21.02.2024 18:25:22
 
отредактируйте пример. уберите ссылки . руками заполните что должно получиться.
тут "ПОИСК D5:D18 - это то, на какой урок нужна замена" у вас нет данных
Изменено: Vik_tor - 21.02.2024 17:36:43
 
Здравствуйте. Не уверен что правильно вас понял. Собрал что-то сумбурное. (формулы в зеленых ячейках Excel 2021+)
 
Добрый день! R091n!

Да, вроде, цифры я увидел правильные, но, если честно, у меня эксель чуть не полег от расчетов!
Можно ли оптимизировать формулу?
Я так понимаю (сейчас осознал), что столбец С можно вовсе убрать из расчетов. Он никакую функцию не несет
Самое главное, возможно ли сделать функцию динамический? Ведь на самом деле в A2 у меня динамическая функция и список этот меняется. Я в пример вставил обычную просто для примера
 
Если бы у вас все занятия (14 уроков) шли точно по порядку каждый день, для каждого учителя - было бы легче. Пока то что приходит в голову, попробовать в саму таблицу 2 добавить столбец с формулой, и уже из таблицы извлекать динамическими массивами.

Код
=МАКС(0;
      МИНЕСЛИ([Урок];[Учитель];[@Учитель];[День число];[@[День число]];[Предмет];"<>")-[@Урок];
      [@Урок]-МАКСЕСЛИ([Урок];[Учитель];[@Учитель];[День число];[@[День число]];[Предмет];"<>")
      )-1

(0-13) - это ожидание урока, (-1) - урок занят.
 
Я думаю, что сортировку в базовой входящей таблице можно сделать. Она берется из запроса PQ
Итак, нужна сортировка по дню, затем по учителю, потом по № уроку. Верно?
 
Цитата
extrafant написал:
дню, затем по учителю, потом по № уроку. Верно?
Так будет проще придумать что-то более производительное. Ну и попробуйте вариант с доп. столбцом без сортировки, насколько тормозит.
 
Лучше-производительное! лишние столбцы зачастую зло

Пример исправлен
Теперь сортировка по дню, затем по учителю, потом по № уроку
 
Посмотрите вариант. Формула гораздо быстрее прошлого варианта (не думаю, что это предел совершенства, но точно предел моей фантазии на сегодня). Не динамический массив. Значения: (0-13) - часы ожидания, (-1) значит попадание в свободный урок между занятиями, (урок занят) - попадание в уже поставленный урок, (свободный день) - в этот день нет уроков. Обязательно должны быть включены итоги на таблице 2 (так как для "облегчения" последнюю ячейку определял по ним).

Можно попробовать сделать всю эту таблицу на PQ на основе запроса для Таблицы 2.
Изменено: R091n - 22.02.2024 18:11:40
 
R091n спасибо за вариант!
Через PQ не получится т.к. работаю из он-лайн. Да, элементы PQ есть у меня, но только тогда, когда происходит обновление расписания. Далее работа только формулами. Все же можно было бы сделать это формулу динамической? Недостаточно ли будет просто сослаться на динамические диапазоны? Или так просто оно не сработает?

И еще самое главное! Почему-то на листе Определение замены строка 2 пишет, что урок занят, но согласно листу Учителя строке 10 - учитель свободен

П.с. фактически на листе Определение замены вы видите только свободных учителей. Там формула с применением фильтра стоит. Поэтому, определение свободен ли учитель или нет - избыточно

Хочу дополнить, что я, не понимая сложности задачи, сейчас очень удивлен насколько сложна формула для нахождения ближайшего этого числа "от ближайшего" урока по расписанию
Изменено: extrafant - 26.02.2024 12:16:32
 
Цитата
extrafant написал:
пишет, что урок занят
Диапазон был сдвинут на 1. Протестируйте такой вариант (в файле).

Как я понял, у вас Office 365. Там возможностей побольше. А может кто еще что подскажет.
Формула для 365 (динамический массив полностью вся ваша табличка):
Скрытый текст
Интересный опыт, так как в 365 не работал, практически. В этой формуле нет проверок пустого дня и если пустой урок попадает в зазор между уже имеющимися уроками, то выводится 0. Потестируйте.
Изменено: R091n - 26.02.2024 21:22:56
 
Уважаемый R091n
Я попробую адаптировать в свою таблицу формулу с LET. А нет ли на русском этой формулы? Я понимаю, что LET, Lambda - они такие, но вот CHOOSECOLS, FILTER, INDEX и др...а то я, боюсь, вообще не смогу ее адаптировать. Выглядит, конечно, очень круто
 
Прогнал через транслятор:
Скрытый текст
 
Через транслятор частично перевелись. А именованные диапазоны как можно понять к какой части таблицы их отнести?  
 
Приложил файл. Динамический массив в зеленных ячейках.
 
Огромное спасибо! Ушел пробовать
 
2R091n
Функция на зеленом фоне - высший пилотаж! Я даже поверить не могу, что эксель может так быстро работать, но в ней что-то не так.
В строке 2 (столбец F) результате -1 (ждать -1 урок (что правильно), а на зеленом фоне в результате 0 (что не правильно)
И еще ко всему этому ABS можно будет добавить? А то ждать -1 как-то неправильно. Должно быть просто 1  
 
Цитата
extrafant написал:
результате -1
Если вы о том же примере, там у учителя 1-8 и 10 уроки. То есть 9 урок попадает между ними. (Что кстати означает ожидание 0 фактически а не 1) В первой моей функции для таких уроков проставлялось -1, а во второй(зеленое поле) 0, я об этом писал. Предложите способ как это должно считаться, посмотрю можно ли его реализовать. Для примера, у учителя 4 урока - 1,2 и 13,14. Как должно считаться ожидание для 5 и 9 уроков?
 
Пожалуй, 0 это хороший выход. Правильный.
Но, тогда, как показать тех, у кого нет уроков в этот день? Может, тогда цифра условная? 99?
 
Цитата
extrafant написал:
цифра условная? 99?
Можно и так.
Страницы: 1
Наверх