sotnikov, очень круто и работает! Прочел описание Table.Last и Table.LastN, понял, почему вы использовали эту функцию. Осталось с остальным разобраться, как и почему это работает. Особенно, любимая тема продвинутых пользователей - (x)=>. Уже много раз натыкался на этот способ, но так и не разобрался до конца в нём.
НО, есть один нюанс, ваш код не учитывает Сквозной номер, поэтому, когда я добавил этот столбец {"Сквозной номер","Цех"}, все стало работать так, как нужно. Кстати, как оказалось, моим способом через индекс эта колонка тоже не учитывается. Скорость явно возросла! Спасибо!
PooHkrd, добрый день! использовал ваш старый способ через индексы для решения своей задачи, но при кол-ве строчек ~300К очень долго работает, даже переведя источник на csv. У меня цель - отфильтровать в рамках одного сквозного номера и убрать повторяющиеся подряд цеха, оставив только строчку с последней датой окончания перед следующим цехом.
Приложил пример, где показал, как есть, как должно быть и как сделал я. Интересно новое решение, про которое вы упоминали, возможно оно будет быстрее работать.
Stanislavsky7 написал: чтобы макрос дожидался обновления всей Книги и только после этого шел дальше по шагам.
Спасибо большое, код отлично отрабатывает, но есть вопрос. Все работает, данные обновляются, но все равно в списке запросов пишет с восклицательным знаком, что Загрузка не была завершена, хотя это не так. У вас так же?
Garrys, спасибо, работает! и код на сточку короче получился. пытаюсь разобраться, как работает.
по сути, у нас с ним одинаковые таблицы, только у него еще есть столбец с ФИО. если удалить его, то будут аналогичные таблицы, которые мы и пытались преобразовать через Столбец сведения. аналогичным способом можно и автору же сделать, только подправив код, учитывая еще один столбец?
upd спасибо еще раз! ваш код для меня оказался лучшим выбором. функция из этого кода отрабатывает четко из-за того, что в коде не прописаны наименования столбцов, а т.к. не в каждом году есть рабочие субботы, то нет ошибок, что не может найти соответствующий столбец.
у меня точно такая же проблема, но воспользоваться индексом я не смог, потому что строки не повторяются с одинаковой кратностью.
Я правильно понимаю, что в моем случае, кнопками решить данную задачу не получится? У меня получилось только прописав код вручную из вашего последнего поста.
Только вместо null в аргументах функции List.Accumulate указал другой столбец, откуда брать данные, если ничего не находит. Осталось понять почему так и как?
Alien Sphinx, только в коде столбца индекса пришлось убрать тип - Int64.Type - иначе была ошибка. Видать несовместимость версий. После этого все заработало.
Понял, что вы создали функцию и уже с помощью нее переделали таблицу. Круто и интересно, спасибо! Но для меня сложновато, будем разбираться, для общего развития. Очень жалко, что такой мощный инструмент поддерживает мало "кнопок".
Wild.Godlike, за "кнопки" большое спасибо! так же, пошел изучать.
Тема избита, вроде как, но ответа так и не нашел. Зашел в тупик и никак не могу выбраться.
Есть данные со СКУДа в вертикаль, а надо определенным образом перевести в горизонталь. Возможно ли это силами PQ?
На первом листе - TDSheet - исходные данные со СКУДа. На следующих - то, к чему я пришел. Но в обоих случаях у меня получается полумера. Проблема в том, что мне нужно повернуть/свести два столбца. На последнем - по сути, вид после предварительной обработки и что должно по итогу получиться. Показалось, что так будет нагляднее.
Естественно, я пробовал разные варианты, крутил в разные стороны, но все приводило к первоначальному виду, либо вообще портило таблицу.
Пожалуйста, подскажите.
Буду признателен, если подскажете макрос для обработки начального варианта или, возможно, промежуточного. Может так будет намного проще... Просто интересно было все это сделать в рамках PQ. Варианты с формулами тоже интересны. Возможно полноценно в PQ это сделать не просто как кажется и потребуется доп обработка на каком-то этапе.
Антон, вот это действительно шикарно! Спасибо, очень упростит работу! Я правильно понял, что эта часть (x)=> try Number.From(x) это компонент (?), который с помощью функции Number.From преобразует значения каждый ячейки в определенном столбце в число. дальше включается обработчик ошибок - otherwise, который, если есть ошибка, заменяет на значение по умолчанию, если нет - использует функцию Number.From.
Поправьте/прокомментируйте пожалуйста грамотным языком, не могу правильно описать.
Суть такова, что в исходной таблице есть колонка (№ заказа) со смешанными данными, типа 222555_2 (текст) и 333666 (число). Но частенько бывает так, что данные типа 333666 имеют текстовый формат, что не допустимо.
Можно ли как-то только в рамках PQ исправить формат подобных данных? Как если бы я прогнал в Excell по этой колонке функцией - Текст по столбцам.
В конечно итоге, после PQ таблица должна содержать колонку с корректными форматами в соответствии с данными ячейки. Это все нужно, чтобы потом ВПР корректно мог работать.
Пробовал очистку формата в PQ, но тогда все данные становятся текстом.
Подскажите пожалуйста, как протянуть формулу по горизонтали с шагом.
Разные ответы находил, пытался использовать ИНДЕКС, но знаний не хватает. Не понимаю, как скрести ИНДЕКС и мою формулу.
описание
исходные данные состоят из дней месяца. каждый день разделен на три столбца: вход, выход, присутствие. моя формула в конце считает сколько сотрудник пробыл на территории, с учетом того, что рабочий день начинается с 8, обед - пол часа и продолжительность самого рабочего дня - 8 часов.
иногда политика меняется и приходится считать отработанное время по другому, приходится каждый раз редактировать формулу вручную на все дни.
Хочу поблагодарить за этот ресурс, очень много нового и полезного для себя открыл.
Поиском много чего нашел, но в каждом из случаев были либо другие, либо дополнительные критерии/условия. По итогу, под себя никак не могу подобрать, либо не могу разобраться в коде.
Суть При заполнении ячейки в последней строке 2 столбца листа журнал регистрации (в примере - B11), нужно, чтобы в конце таблицы появлялась пустая строка. Для удобства людей, далеких от excel, что бы они видели, куда дальше заполнять.
Я попробовал, но по итогу у меня при любом действии создается новая строка.
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Long
i = Cells(Rows.Count, 2).End(xlUp).Row
If i > 0 Then
Selection.ListObject.ListRows.Add AlwaysInsert:=True
End If
End Sub
Пока писал, понял, что условие в моем коде - сравнение с количеством строк в листе, а не со значением последней ячейки в столбце.
Подскажите пжл правильный код. Чувствую, что я ошибся с выбором - Cells(Rows.Count, 2).End(xlUp).Row
p.s. пару часов назад первый раз в жизни открыл VBA в excel. )) Знаний нет.