Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/График дежурства автоматический и циклическая ссылка - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
График дежурства автоматический и циклическая ссылка
карандаш Дата: Четверг, 14.02.2013, 11:25 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
Задача не представляет практического интереса (можно ручками график поправить, если что), но и в раздел "мозгового штурма" не подходит из-за свое простоты

график дежурства, где каждый день новый дежурный следующий
плюсик - дежурство, минус - отсутствие человека, значит дежурит следующий
на первом листе строится график по простой формуле, имеющий недостатки "размножения" плюсиков при наличия не одного минусика

на втором листе удалось победить размножение (но не до конца)

не получилось закольцевать дежурство - эксел жалуется на кольцевую ссылку
как сделать из кольца спираль?

вторая подзадача - если человека нет один день (или два), то он не должен пропускать дежурство, а должен отдежурить вне очереди, отодвинув следующего в сдвинутом из-за его отсутствия графике. т.е. его плюсик в день его выхода после прогула

приложенный файл приложен в качестве иллюстрации
К сообщению приложен файл: gd-cl-01.rar (19.7 Kb)


Сообщение отредактировал карандаш - Пятница, 15.02.2013, 07:15
 
Ответить
СообщениеЗадача не представляет практического интереса (можно ручками график поправить, если что), но и в раздел "мозгового штурма" не подходит из-за свое простоты

график дежурства, где каждый день новый дежурный следующий
плюсик - дежурство, минус - отсутствие человека, значит дежурит следующий
на первом листе строится график по простой формуле, имеющий недостатки "размножения" плюсиков при наличия не одного минусика

на втором листе удалось победить размножение (но не до конца)

не получилось закольцевать дежурство - эксел жалуется на кольцевую ссылку
как сделать из кольца спираль?

вторая подзадача - если человека нет один день (или два), то он не должен пропускать дежурство, а должен отдежурить вне очереди, отодвинув следующего в сдвинутом из-за его отсутствия графике. т.е. его плюсик в день его выхода после прогула

приложенный файл приложен в качестве иллюстрации

Автор - карандаш
Дата добавления - 14.02.2013 в 11:25
Serge_007 Дата: Четверг, 14.02.2013, 23:15 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Задача непонятна
Можете написать где именно и что сделать?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеЗадача непонятна
Можете написать где именно и что сделать?

Автор - Serge_007
Дата добавления - 14.02.2013 в 23:15
карандаш Дата: Пятница, 15.02.2013, 07:00 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
описание сути задачи
попытка номер раз

есть список сотрудников - по вертикали
есть список дней (исключая выходные) - по горизонтали
клетки диапазона [сотрудники, дни] может принимать три значения:
- пусто - сотрудник на работе
- плюс - сотрудник дежурит
- минус - сотрудник отсутствует в этот день по какой-либо причине и поэтому дежурить не может

необходимые условия:
- в один день дежурит только один сотрудник
- сотрудник дежурит не более "одного раз за круг". Т.е. отдежурив один день, он не дежурит пока не отдежурят остальные
- сотрудник дежурит не менее "одного раз за круг". Т.е. не может пропустить дежурство в круге. Если он пропустил назначенный ему день по какой-то причине (в клетке стоит минус), то он дежурит как только выходит на работу (если длина его прогула в днях больше, чем кол-во сотрудников (т.е. пока его не было один круг дежурства прошëл), то он дежурит по обычной схеме, т.е. пропученные дежурства не накапливаются, т.е. пропустив два круга он потом по выходе на работу не имеет долга в два дежурства.
(условие дежурит не менее 1 раза за круг можно видоизменить для более общего решения на "не менее 1 раза за полкруга" (или 5 дней), например. Ведь если сотрудника не было, то он не пользовался плодами дежурства других, значит не имеет перед ними обязательств, значит может не отрабатывать пропущенное дежурство по выходу на работу)

пуск задачи:
- выставляем + в любой ячейке первого столбца диапазона и остальные автоматом заполняются

эксплуатаци графика:
- ставим минус в некоторый день для некоторого сотрудника и если минус стоит там, где расчитался плюс-дежурство, то график автомтически переставляет плюсики
(регенерация поврежденных участков - если надо убрать минусы (сотрудник все же решил выйти на работу), то можно
* - просто скопировать пустые ячейки с формулой на место минусов
** - можно стереть минусы, а затем запустить макрос, который проверит все клетки диапазона и заполнит пустые ячейки формулой алгоритма)
---------------------------------------------

все

проблемы:
- первая и главная (даже без прогулов-минусов) - замкнуть круг дежурства - т.е. назначить дежурным первого по списку сотрудника после дня дежурства последнего
(это борьба с цикличностью ссылки)
- при долгом отсутствии сотрудников двух рядом "плюсики" разможаются (в том алгоритме, что в приложенном файле)

В принципе, было бы логично написать макрос для диапазона (а не формулу в каждую ячейку)
а в диапазоне допустить пользователя только ставить и стирать только минусы - остальную картинку пусть рисует макрос каждый раз после внесения изменения
(кликнул в пустую ячейку мышой - поставил минус, кликнул в ячейку с минусом - убрал его)


Сообщение отредактировал карандаш - Пятница, 15.02.2013, 07:14
 
Ответить
Сообщениеописание сути задачи
попытка номер раз

есть список сотрудников - по вертикали
есть список дней (исключая выходные) - по горизонтали
клетки диапазона [сотрудники, дни] может принимать три значения:
- пусто - сотрудник на работе
- плюс - сотрудник дежурит
- минус - сотрудник отсутствует в этот день по какой-либо причине и поэтому дежурить не может

необходимые условия:
- в один день дежурит только один сотрудник
- сотрудник дежурит не более "одного раз за круг". Т.е. отдежурив один день, он не дежурит пока не отдежурят остальные
- сотрудник дежурит не менее "одного раз за круг". Т.е. не может пропустить дежурство в круге. Если он пропустил назначенный ему день по какой-то причине (в клетке стоит минус), то он дежурит как только выходит на работу (если длина его прогула в днях больше, чем кол-во сотрудников (т.е. пока его не было один круг дежурства прошëл), то он дежурит по обычной схеме, т.е. пропученные дежурства не накапливаются, т.е. пропустив два круга он потом по выходе на работу не имеет долга в два дежурства.
(условие дежурит не менее 1 раза за круг можно видоизменить для более общего решения на "не менее 1 раза за полкруга" (или 5 дней), например. Ведь если сотрудника не было, то он не пользовался плодами дежурства других, значит не имеет перед ними обязательств, значит может не отрабатывать пропущенное дежурство по выходу на работу)

пуск задачи:
- выставляем + в любой ячейке первого столбца диапазона и остальные автоматом заполняются

эксплуатаци графика:
- ставим минус в некоторый день для некоторого сотрудника и если минус стоит там, где расчитался плюс-дежурство, то график автомтически переставляет плюсики
(регенерация поврежденных участков - если надо убрать минусы (сотрудник все же решил выйти на работу), то можно
* - просто скопировать пустые ячейки с формулой на место минусов
** - можно стереть минусы, а затем запустить макрос, который проверит все клетки диапазона и заполнит пустые ячейки формулой алгоритма)
---------------------------------------------

все

проблемы:
- первая и главная (даже без прогулов-минусов) - замкнуть круг дежурства - т.е. назначить дежурным первого по списку сотрудника после дня дежурства последнего
(это борьба с цикличностью ссылки)
- при долгом отсутствии сотрудников двух рядом "плюсики" разможаются (в том алгоритме, что в приложенном файле)

В принципе, было бы логично написать макрос для диапазона (а не формулу в каждую ячейку)
а в диапазоне допустить пользователя только ставить и стирать только минусы - остальную картинку пусть рисует макрос каждый раз после внесения изменения
(кликнул в пустую ячейку мышой - поставил минус, кликнул в ячейку с минусом - убрал его)

Автор - карандаш
Дата добавления - 15.02.2013 в 07:00
Serge_007 Дата: Пятница, 15.02.2013, 09:33 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Даже читать не стал

карандаш, Вы догадываетесь зачем нужен файл-пример?
Для того что бы видеть исходные данные и результат, которого необходимо достигнуть
В Вашем примере есть только исходные данные
Если Вам нужно решение, то необходимо видеть что должно быть в итоге
Этот итог Вы проставляете вручную, а мы пишем формулы/макросы для его достижения


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеДаже читать не стал

карандаш, Вы догадываетесь зачем нужен файл-пример?
Для того что бы видеть исходные данные и результат, которого необходимо достигнуть
В Вашем примере есть только исходные данные
Если Вам нужно решение, то необходимо видеть что должно быть в итоге
Этот итог Вы проставляете вручную, а мы пишем формулы/макросы для его достижения

Автор - Serge_007
Дата добавления - 15.02.2013 в 09:33
карандаш Дата: Пятница, 15.02.2013, 11:38 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
Serge_007,
файл-рисунок прикрепляю

рисунок может быть и другой и раскладка расписания дежурства тоже может быть иная
представление информации не ограничено
просто необходимо, чтобы выполнялись условия дежурства по порядку, а в случае пропуска должник отдежурил пропущенное дежурство
а будет это шахматка или ещ§ что-то - это не важно
К сообщению приложен файл: gd-cl-simple.xls (91.5 Kb)


Сообщение отредактировал карандаш - Пятница, 15.02.2013, 11:41
 
Ответить
СообщениеSerge_007,
файл-рисунок прикрепляю

рисунок может быть и другой и раскладка расписания дежурства тоже может быть иная
представление информации не ограничено
просто необходимо, чтобы выполнялись условия дежурства по порядку, а в случае пропуска должник отдежурил пропущенное дежурство
а будет это шахматка или ещ§ что-то - это не важно

Автор - карандаш
Дата добавления - 15.02.2013 в 11:38
Serge_007 Дата: Пятница, 15.02.2013, 12:04 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
карандаш, пробую в последний раз:
Цитата (Serge_007)
необходимо видеть что должно быть в итоге

Где ИТОГ в Вашем файле?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщениекарандаш, пробую в последний раз:
Цитата (Serge_007)
необходимо видеть что должно быть в итоге

Где ИТОГ в Вашем файле?

Автор - Serge_007
Дата добавления - 15.02.2013 в 12:04
карандаш Дата: Пятница, 15.02.2013, 13:55 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
Итог в моëм файле - это картинка из файла-примера gd-cl-simple.xls
если, как там нарисовано, поставить плюс в ячейку с желтым фоном (исходное, первое дежурство в произвольную дату произвольного человека), то алгоритм должен расставить зеленые плюсики поочередного дежурства. А если у него на пути появляются красные минусы (расставленные вручную), то он должен их обойти и расставить зелëные плюсы согласно логике рассуждения в задании.
Картинка - иллюстрация правильной работы алгоритма при входных условиях: один плюс (желтый) и какое угодно кол-во и расположение минусов в диапазоне {фамилии:дни}
программа должна сама нарисовать зеленые плюсы дежурства как на на картинке

я просто не понимаю как еще объяснить по другому
Словами написал, картинку приложил
моя программа не работает как надо и показать она ничего не может. Она в первом файле на первом листе. Работает по упрощ§нному алгоритму
на втором листе я попробовал еë усовершенствовать - не получилось, вообще сломалась
Требуемый результат нарисовал в файле примере.

Как и просили, нарисовал от руки итог - как должен выглядеть график, если бы алгоритм работал как описано словами в развернутом пояснении.

если не к месту - убейте тему
в описании задачи написал - Академический интерес
в первых же строках поста написал, что практического применения особого нет - если что, то ручками перерисовывают график, т.к. это проще, чем заставить комп как-то изголяться (точнее самому свернуть мозги, заставив комп правильно рисовать график)
 
Ответить
СообщениеИтог в моëм файле - это картинка из файла-примера gd-cl-simple.xls
если, как там нарисовано, поставить плюс в ячейку с желтым фоном (исходное, первое дежурство в произвольную дату произвольного человека), то алгоритм должен расставить зеленые плюсики поочередного дежурства. А если у него на пути появляются красные минусы (расставленные вручную), то он должен их обойти и расставить зелëные плюсы согласно логике рассуждения в задании.
Картинка - иллюстрация правильной работы алгоритма при входных условиях: один плюс (желтый) и какое угодно кол-во и расположение минусов в диапазоне {фамилии:дни}
программа должна сама нарисовать зеленые плюсы дежурства как на на картинке

я просто не понимаю как еще объяснить по другому
Словами написал, картинку приложил
моя программа не работает как надо и показать она ничего не может. Она в первом файле на первом листе. Работает по упрощ§нному алгоритму
на втором листе я попробовал еë усовершенствовать - не получилось, вообще сломалась
Требуемый результат нарисовал в файле примере.

Как и просили, нарисовал от руки итог - как должен выглядеть график, если бы алгоритм работал как описано словами в развернутом пояснении.

если не к месту - убейте тему
в описании задачи написал - Академический интерес
в первых же строках поста написал, что практического применения особого нет - если что, то ручками перерисовывают график, т.к. это проще, чем заставить комп как-то изголяться (точнее самому свернуть мозги, заставив комп правильно рисовать график)

Автор - карандаш
Дата добавления - 15.02.2013 в 13:55
Serge_007 Дата: Пятница, 15.02.2013, 14:07 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Цитата (карандаш)
не понимаю как еще объяснить по другому

Пример:
"В приложенном файле на листе 1 в А1:А2 (10 и 15) - исходные данные, в В1 (25) - результат, потому что А1 и А2 надо сложить между собой"

Что мешает Вам нормально объяснять?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Цитата (карандаш)
не понимаю как еще объяснить по другому

Пример:
"В приложенном файле на листе 1 в А1:А2 (10 и 15) - исходные данные, в В1 (25) - результат, потому что А1 и А2 надо сложить между собой"

Что мешает Вам нормально объяснять?

Автор - Serge_007
Дата добавления - 15.02.2013 в 14:07
карандаш Дата: Суббота, 16.02.2013, 22:59 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
Цитата (Serge_007)
В приложенном файле на листе 1 в А1:А2 (10 и 15) - исходные данные, в В1 (25) - результат, потому что А1 и А2 надо сложить между собой"

Что мешает Вам нормально объяснять?


это невозможно (по крайней мере, для меня)
у меня не получается рассуждать в категориях содержимого ячеек, если неясен сам алгоритм
я не могу сказать, что должно быть в ячейке В1, потому, что его содержимое зависит от содержимого столбца, в котором находится эта ячейка и от содержимого столбцов, которые предшествовали по дате данную ячейку
вариантов очень много и описать их в категории содержимого ячеек я не знаю как.
поэтому попробовал объяснить "правила расчета" в "общем виде" и проиллюстрировал "итог" картинкой, где запечатлена некая ситуация, по которой можно понять суть алгоритма (если можно, конечно, понять)

но я попробую


Сообщение отредактировал карандаш - Суббота, 16.02.2013, 23:16
 
Ответить
Сообщение
Цитата (Serge_007)
В приложенном файле на листе 1 в А1:А2 (10 и 15) - исходные данные, в В1 (25) - результат, потому что А1 и А2 надо сложить между собой"

Что мешает Вам нормально объяснять?


это невозможно (по крайней мере, для меня)
у меня не получается рассуждать в категориях содержимого ячеек, если неясен сам алгоритм
я не могу сказать, что должно быть в ячейке В1, потому, что его содержимое зависит от содержимого столбца, в котором находится эта ячейка и от содержимого столбцов, которые предшествовали по дате данную ячейку
вариантов очень много и описать их в категории содержимого ячеек я не знаю как.
поэтому попробовал объяснить "правила расчета" в "общем виде" и проиллюстрировал "итог" картинкой, где запечатлена некая ситуация, по которой можно понять суть алгоритма (если можно, конечно, понять)

но я попробую

Автор - карандаш
Дата добавления - 16.02.2013 в 22:59
Serge_007 Дата: Суббота, 16.02.2013, 23:05 | Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Цитата (карандаш)
если можно, конечно, понять

У меня не получилось...
Можа кто ещё?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Цитата (карандаш)
если можно, конечно, понять

У меня не получилось...
Можа кто ещё?

Автор - Serge_007
Дата добавления - 16.02.2013 в 23:05
карандаш Дата: Воскресенье, 17.02.2013, 01:49 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
попробую так:
имеем произвольный диапазон (например, R5C4:R24C120)
содержимое ячеек диапазона может принимать три состояния: +, -, пусто
+ должен быть только один в каждом столбце диапазона (если все ячейки столбца не заняты минусом) (кол-во 1 на один столбец диапазона)
- может быть в любой ячейке диапазона (кол-во не ограничено)
пусто может быть в любой ячейке диапазона (кол-во не ограничено)

- устанавливается и удаляется (заменяется на пусто) пользователем
+ устанавливается пользователем в произвольной (т.н. "начальной") ячейке только в крайнем левом (т.н. "начальном") столбце диапазона

"текущая" строка - строка, с которой производится действие. Соответственно именуется "текущим" столбец.
"следующая" строка - строка на один номер больше "текущей". Если "текущая" строка последняя в диапазоне, то "следующая" строка - первая строка диапазона. Т.к. строки замкнуты в "цикл"
"следующий" столбец - столбец на номер больше "текущего".
"следующая" ячейка - ячека на пересечении соответствующих столбца и строки.

Правило установки +:

[vba]
Код
если нет строк с "долгом",    
то
М:
       если "следующая ячейка"<> -    
           то
              "следующая ячейка"=+; перейти к следующему столбцу
           иначе    
              строка ="долг"+1
              "следующей ячейкой" становится ячейка на строку ниже (с учетом замкнутости строк по циклу)
               если "цикл" не закончился, то М:
               иначе перейти на следующий столбец и на М: (и так до конца диапазона)
иначе
       найти первую строку с долгом
N:
       если "ячейка"<> -    
           то
              "долг" списать;    
               если "долг">"долг макс"    
                   то перейти Н:
                   иначе  "ячейка"=+; перейти к следующему столбцу и на М:
           иначе
Н:
              найти следущую строку с "долгом"; перейти на N:
если не удалось списать "долг" ни с одной строки, то на перейти на М:
[/vba]

"долг" образуется при условии, когда надо в ячейку поставить плюс, а там стоит минус
"долг" наращивается при выполнении предыдущего условия и когда он достигает некоторого значения, то перестает быть долгом, т.е обнуляется

где-то так

прим.*** а может лт эксел послать сообщение в аську?


Сообщение отредактировал карандаш - Воскресенье, 17.02.2013, 23:41
 
Ответить
Сообщениепопробую так:
имеем произвольный диапазон (например, R5C4:R24C120)
содержимое ячеек диапазона может принимать три состояния: +, -, пусто
+ должен быть только один в каждом столбце диапазона (если все ячейки столбца не заняты минусом) (кол-во 1 на один столбец диапазона)
- может быть в любой ячейке диапазона (кол-во не ограничено)
пусто может быть в любой ячейке диапазона (кол-во не ограничено)

- устанавливается и удаляется (заменяется на пусто) пользователем
+ устанавливается пользователем в произвольной (т.н. "начальной") ячейке только в крайнем левом (т.н. "начальном") столбце диапазона

"текущая" строка - строка, с которой производится действие. Соответственно именуется "текущим" столбец.
"следующая" строка - строка на один номер больше "текущей". Если "текущая" строка последняя в диапазоне, то "следующая" строка - первая строка диапазона. Т.к. строки замкнуты в "цикл"
"следующий" столбец - столбец на номер больше "текущего".
"следующая" ячейка - ячека на пересечении соответствующих столбца и строки.

Правило установки +:

[vba]
Код
если нет строк с "долгом",    
то
М:
       если "следующая ячейка"<> -    
           то
              "следующая ячейка"=+; перейти к следующему столбцу
           иначе    
              строка ="долг"+1
              "следующей ячейкой" становится ячейка на строку ниже (с учетом замкнутости строк по циклу)
               если "цикл" не закончился, то М:
               иначе перейти на следующий столбец и на М: (и так до конца диапазона)
иначе
       найти первую строку с долгом
N:
       если "ячейка"<> -    
           то
              "долг" списать;    
               если "долг">"долг макс"    
                   то перейти Н:
                   иначе  "ячейка"=+; перейти к следующему столбцу и на М:
           иначе
Н:
              найти следущую строку с "долгом"; перейти на N:
если не удалось списать "долг" ни с одной строки, то на перейти на М:
[/vba]

"долг" образуется при условии, когда надо в ячейку поставить плюс, а там стоит минус
"долг" наращивается при выполнении предыдущего условия и когда он достигает некоторого значения, то перестает быть долгом, т.е обнуляется

где-то так

прим.*** а может лт эксел послать сообщение в аську?

Автор - карандаш
Дата добавления - 17.02.2013 в 01:49
M73568 Дата: Понедельник, 25.03.2013, 08:22 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 197
Репутация: 46 ±
Замечаний: 0% ±

2007-2013
Если не вводить пропуски вручную в сам график, то можно сделать где-то так.

ЗЫ Расчёт дат отработки не закончил, их пока проще вручную внести
ЗЗЫ Сильно не критикуйте это мой пробный шар
К сообщению приложен файл: test25_.rar (87.0 Kb)


Сообщение отредактировал M73568 - Понедельник, 25.03.2013, 13:43
 
Ответить
СообщениеЕсли не вводить пропуски вручную в сам график, то можно сделать где-то так.

ЗЫ Расчёт дат отработки не закончил, их пока проще вручную внести
ЗЗЫ Сильно не критикуйте это мой пробный шар

Автор - M73568
Дата добавления - 25.03.2013 в 08:22
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!