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

Вход

Регистрация

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

 

= Мир MS Excel/Сокращение числа строк - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Сокращение числа строк
anty762 Дата: Воскресенье, 05.11.2023, 00:54 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Добрый день. Необходима формула для оптимизации количества смен. В каждой группе найти смены, имеющие "дыры" между окончанием одной смены и началом другой или такие смены, где окончание одной смены равно началу другой. В итоге хотелось бы получить: Группа/смена/кол-во часов/группа, которую можно оптимизировать. Данные на Лист1. На Лист 2 визуалитация того, что хотел получить, т.к. трудно сформулировать задание)









К сообщению приложен файл: list_microsoft_excel.xlsx (15.8 Kb)
 
Ответить
СообщениеДобрый день. Необходима формула для оптимизации количества смен. В каждой группе найти смены, имеющие "дыры" между окончанием одной смены и началом другой или такие смены, где окончание одной смены равно началу другой. В итоге хотелось бы получить: Группа/смена/кол-во часов/группа, которую можно оптимизировать. Данные на Лист1. На Лист 2 визуалитация того, что хотел получить, т.к. трудно сформулировать задание)










Автор - anty762
Дата добавления - 05.11.2023 в 00:54
AlienSphinx Дата: Понедельник, 06.11.2023, 11:25 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 6 ±
Замечаний: 0% ±

формулой, наверное, сложновато будет (хотя...). Вот вам вариант в PQ.
[vba]
Код
let
    Source = Excel.CurrentWorkbook(){[Name="смены"]}[Content],
    g = Table.Group(Source, "группа", {{"shifts", each Table.ToRecords(_)}}),
    fx = (lst as list) =>
        List.Transform(
            lst,
            (z) =>
                [a = List.Select(lst, (x) => z[конец смены] <= x[начало смены]),
                tx = List.Transform(
                    a,
                    (w) =>
                        z[группа] & "/" &
                        Text.From(z[смена]) & "/" &
                        Duration.ToText(Duration.From(w[начало смены] - z[конец смены])) & "/" &  
                        Text.From(w[смена])
                )][tx]
        ),
    tx = Table.TransformColumns(g, {"shifts", (h) => List.Combine(fx(h))}),
    sh = List.Combine(tx[shifts])
in
    sh
[/vba]
К сообщению приложен файл: 6187903.xlsx (24.8 Kb)
 
Ответить
Сообщениеформулой, наверное, сложновато будет (хотя...). Вот вам вариант в PQ.
[vba]
Код
let
    Source = Excel.CurrentWorkbook(){[Name="смены"]}[Content],
    g = Table.Group(Source, "группа", {{"shifts", each Table.ToRecords(_)}}),
    fx = (lst as list) =>
        List.Transform(
            lst,
            (z) =>
                [a = List.Select(lst, (x) => z[конец смены] <= x[начало смены]),
                tx = List.Transform(
                    a,
                    (w) =>
                        z[группа] & "/" &
                        Text.From(z[смена]) & "/" &
                        Duration.ToText(Duration.From(w[начало смены] - z[конец смены])) & "/" &  
                        Text.From(w[смена])
                )][tx]
        ),
    tx = Table.TransformColumns(g, {"shifts", (h) => List.Combine(fx(h))}),
    sh = List.Combine(tx[shifts])
in
    sh
[/vba]

Автор - AlienSphinx
Дата добавления - 06.11.2023 в 11:25
  • Страница 1 из 1
  • 1
Поиск:

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