Страницы: 1
RSS
Подставить время начала работы после завершения предыдущей относительно выбранного сотрудника.
 
Необходимо подставить время начала следующей работы (лист «Анализ» столбец "C") равное времени окончания предыдущей работы (лист «Анализ» столбец "D") время затрачиваемое на работу вычисляется отдельно.

Идея в том, что выбрав исполнителя (Лист «Анализ" столбец "E") из выпадающего списка в ячейке столбца "C" строки в которой выбран исполнитель появляется время когда он закончил ранее взятые на себя обязательства. Для этой цели время его освобождения от этих обязательств записывается в ячейке напротив его имени (Лист «Анализ» столбец "I").

Для этой цели был написан следующий макрос
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a
    If Target.Cells.Count > 1 Then Exit Sub
    If Target = Empty Then Exit Sub
    If Intersect(Target, Range("e2:e150")) Is Nothing Then Exit Sub
    a = Range("E2:E150").Value
    For i = 1 To UBound(a, 1)
    If a(i, 1) = Cells(2, 8) Then Cells(2, 9) = Cells(i + 1, 4).Value Else
    If a(i, 1) = Cells(3, 8) Then Cells(3, 9) = Cells(i + 1, 4).Value
    Next
    If Intersect(Target, Range("d2:d150")) Is Nothing Then Exit Sub
    For i = 1 To UBound(a, 1)
    If a(i, 1) = Cells(2, 8) And Cells(i + 1, 3).Value < Cells(2, 9) Then Cells(i + 1, 3).Value = Cells(2, 9) Else
    If a(i, 1) = Cells(3, 8) And Cells(i + 1, 3).Value < Cells(3, 9) Then Cells(i + 1, 3).Value = Cells(3, 9)
    Next
End Sub
Но ожидаемый результат не получается. Прошу скорректировать макрос или предложить другой вариант решения задачи
Изменено: alex_j - 08.10.2021 16:13:12
 
)
т.е. предыдущая, закрытая тема ничему не научила?
Изменено: Ігор Гончаренко - 09.10.2021 09:15:19
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
alex_j, я не понял, что Вы хотите получить. Попробуйте сформулировать Вашу потребность и объяснить стороннему человеку (жене/маме/папе/брату/сестре/другу/подруге/соседу/соседке...), не имеющему понятия, чем Вы занимаетесь. И если он/она/они Вас поймут, то смело выкладывайте понятную другим формулировку на форум.
Я прекрасно понимаю, что код написать может не получаться, но описать доступным языком действия человека, которые Вы пытаетесь автоматизировать, Вам должно быть под силу. Потому что описанное Вами нам надо будет объяснить экселю на языке  VBA.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
попробую описать пример ожидаемой работы макроса
В файле на листе «Анализ» в столбце Е пользователь, из выпадающего списка выбирает имя (предположим это происходит в строке 6 выбрал имя «Аналитик_1» макрос должен сопоставить выбранное имя с данными в столбце Н и в ячейку С6 (строка в которой выбрано имя) подставить значение из ячейки I2 (значение из столбца I соответствующее выбранному имени) после этого значение в ячейке I2 должно стать равным значению ячейки D6 (вычисленному времени окончания работы).
Макрос должен работать из модуля листа, а не по кнопке. (желательно). Если имя меняется то цепочка действий повторяется с учетом изменений а значение в ячейке I2 меняется на то, которое было ранее.
 
Уже лучше, но:
Цитата
alex_j написал: D6 (вычисленному времени окончания работы)
Вы на писали как именно должно вычисляться значение для D6. Если тупо протянуть формулу выше, то будет НД.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, значение вычисляется по функции ВПН подтягивается значение времени запланированного на работу по признаку номера задачи. Этого макрос вычислять не должен.
Изначально планировал организовать всю математику за счет простых функций т.к. далее этот шаблон могут применить для реализации на интернет ресурсе, но столкнулся с циклическими ссылками: у меня вычислялось значение окончания загрузки ресурса и постоянно обновлялось вычисляемое значение эти привело к фиаско идеи реализовать формулами. Попробовал реализовать вариант с макросом определялось изменение значения исполнитель (столбец Е) и в случае изменения в этом столбце производился перерасчет в строке где произошло изменение - что меняет значение в столбце D (т.к. освобождение нового исполнителя от ранее запланированных работ редко может совпадать с первым, и даже при одинаковой длительности работы срок ее окончания будет отличатся). Параллельно проверялись изменения значений в столбце D и время освобождения ресурса перезаписывалось. Проблема в том что работает все это не корректно. Я мог лажануться в коде. Зато теперь повышаю опыт в общении и донесении идей :)
 
в модуль листа Анализ (код с комментариями)
Можно короче, но я предпочитаю понятней для чтения. Всё что лишнее на Ваш взгляд - убирайте.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, Супер!!!! Огромное спасибо. Работает более чем великолепно. И моих скудных познаний хватит для корректировки формулы расчета.
Огромное человеческое спасибо!
 
JayBhagavan, У меня только 1 вопрос:
из беклога автоматически подтягиваются данные для расчета времени окончания работы но моя попытка применения того же принципа для подтягивания других данных из беклога ни к чему не привела :( подозреваю что опять чего то не то делаю. Вот код который я пробовал
Код
Const s_NAME_TASK As String = "B"

Код
With Cells(lCurRow, s_COL_TAB1_PLANNED_END_DATE)
                    .FormulaR1C1 = _
                        s_FORMULA_TAB1_PLANNED_END_DATE
                    .Calculate: DoEvents
                    Cells(lCurRow, s_NAME_TASK)
                   .FormulaR1C1 = _
                       s_FORMULA_name_task
                   .Calculate: DoEvents
                    Cells(rngCell.Row, s_COL_TAB2_REST_DATE).Value = _
                        .Value
                End With
 
извините за идиотский вопрос
а беклог - это что за зверь? он допускает ковариантные ситуации? (понимаете, наличие в тексте "умных" слов автоматически не делает этот текст высоко интеллектуальным, а часто - наоборот)))
чем проще рассказ о задаче, тем больше людей ее смогут понять, из всех понявших кто-то даже сможет захотеть ее решить
Изменено: Ігор Гончаренко - 10.10.2021 20:04:44
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, Ігор Гончаренко, к теме приложен файл в котором есть лист с названием "беклог" в этом листе находится список задач с оценками трудозатрат на каждый из этапов их решения (анализ / разработка /  тестирование) Идея в том что можно рассчитать время полного цикла с учетом распределения задач по исполнителям (есть некоторое количество аналитиков, некоторое количество разработчиков, некий набор тестировщиков) в каждом листе происходит расчет внутри этапа задачи. Переход задачи между этапами должен быть линейным (закончился анализ задачу может брать разработчик, закончил разработчик задачу может взять тестировщик). Соответственно код который, который сделан для аналитика. В листе разработчика должен будет получить дополнительную проверку: помимо данных о освобождении разработчика от загрузки возникает дата о готовности задачи к этапу разработки. это можно решить двумя способами:
1) сравнение времени освобождения разработчика с моментом поступления задачи на разработку
2) первоначальному заполнению времени выхода задачи из анализа (просто до заполнения времени начала и конца работ, при заполнении номера задачи (столбец А) происходит первичное заполнение поля начала работы по задаче разработчиком. Далее пользователь выбирая исполнителя ориентируется на время освобождения разработчика выводимое в столбце I.
При втором способе нет необходимости вмешиваться в код JayBhagavan, но первый вариант может быть востребовал для листа "тестирование" т.к. в командах, обычно, один тестировщик.

Надеюсь, что мне удалось объяснить. По факту это вариант прогнозирования времени исполнения задач командами относительно времени протухания задачи при использовании аджайл как системы управления. То что корявят сейчас в компании крайне далеко от моего понимания систем планирования. Особенно если выполняемые работы позволяют делать именно линейное планирование, где каждая следующая задача может приниматься к следующему этапу только после полного окончания предыдущего. В файле предусмотрен лист "План работ", в этот лист наследуется информация с прочих листов и позволяет как определить конечное время выхода задачи из всего цикла процессов (с учетом распределения работ внутри команды) сравнение со временем "протухания задачи" так и построить диаграму Ганта на основании данных по времени каждого из этапов.
Изменено: alex_j - 10.10.2021 20:39:39 (дополнил)
 
alex_j, в блоке With Вы какую-то ерунду написали. 5я строка: написано ячейка такая-то и что? 6 и 7 строки - в ячейку Cells(lCurRow, s_COL_TAB1_PLANNED_END_DATE) Вы новую формулу вносите и пересчитываете. Я догадываюсь, что Вы хотели сделать, но Вы уж постарайтесь самостоятельно разберитесь, что такое With. Остальное читать не намерен - задача решена, а все хотелки решаем самостоятельно или в разделе "работа". Всё валить в одну тему негоже.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, большое спасибо
Страницы: 1
Читают тему (гостей: 1)
Наверх