surkenny, вы правы, я недоглядел и выделил не всё.
Спасибо за помощь, это то, что нужно.
Спасибо за помощь, это то, что нужно.
|
05.07.2022 17:42:46
surkenny, вы правы, я недоглядел и выделил не всё.
Спасибо за помощь, это то, что нужно. |
|
|
|
|
|
20.06.2022 23:18:41
PooHkrd, да, спасибо, практическим путем удалось выяснить, что конкретно в моем случае, буферизация не подходит. А вообще очень помогла информация из тем, в обсуждении которых вы непосредственно участвовали.
|
|
|
|
|
|
18.06.2022 22:48:43
Zagadka, спасибо, принял к сведению эту информацию, но все равно пока не пойму, что делать: сначала объединить все нужное в один запрос, забуферить, после чего фильтровать это все по разным условиям, либо сначала частично отфильтровать, забуферить отфильтрованное до, после чего продолжить видоизменять промежуточный результат.
|
|
|
|
|
|
17.06.2022 10:53:48
mechanix 85, вероятно, мы так и сделаем в конечном итоге, согласен с вами. Файлов сейчас: около 40.
|
|
|
|
|
|
17.06.2022 01:16:38
PooHkrd,
В теории могут быть любыми. Практически встречал пока только три варианта (они ниже), в т.ч. американский (данных по американскому формату больше всего): 1. dd.mm.yyyy; 2. m/d/yyyy; 3. dd-mm-yyyy. Добавлю, что в одном файле присутствует лишь один формат; смешения не замечено.
Изменено: - 17.06.2022 02:39:35
|
|
|
|
|
|
16.06.2022 18:26:21
Коллеги, добрый вечер,
Ситуация следующая: коллеги прислали набор файлов csv с 2019-2022 год, попросили обработать. Каждый файл - это конкретный месяц конкретного года с набором данных. Проблема в том, что в исходниках разные форматы: в январском файле дата выглядит как 05-09-2022, в февральском - 9\5\2022, ну и так далее. Аналогичная ситуация с суммами - в одних файлах формат, в котором тысячный разделитель это точка, а десятичный - запятая (например 56.233,71), а в других - наоборот. Встречается что-то вроде такого: 21,76,65,678.22 Нужно: привести все даты любого формата из исходного состояния к формату ru-RU; а суммы - к формату, в котором тысячного разделителя не будет, а десятичный - это запятая. Уточнение: если это вообще возможно средствами PQ, без вмешательства в исходники. Что пробовал: 1) с суммами - находить в каждой ячейке столбцов с суммами (их всего два пока что) знак с помощью Text.Middle и Text.Length, и в зависимости от знака проводить манипуляции с Replace.Text каждой ячейки. Работает, но прям сильно-сильно медленнее стало подгружать; 2) с датами - использовать Convert to Local, но возникают ошибки, а способ выше не стал применять пока что. Посоветуйте варианты, спасибо заранее. |
|
|
|
|
|
02.06.2022 07:55:36
Коллеги, доброе утро,
Имеется большая таблица данных, преобразованная в PQ. Особенность её в том, что, условно - ячейки каждых двух строк первых трех столбцов дублируют друг-друга (первый столбец содержит ключи), а, скажем 4-7 столбцы содержат в себе значения, которые могут и не дублироваться. Задача в том, чтобы преобразовать каждые две строки в одну таким образом, чтобы информация, содержащаяся в ячейках каждой второй строки столбцов 4-7 перенеслась вправо в новые столбцы, дублирующие (само собой, со знаком отличия) названия столбцов-исходников. Также: таблица преобразованна таким образом, что каждого ключа в ней по 2 шт., это строгое правило. Немного запутано объяснил, но я прикладываю пример с описанием, думаю, там видно лучше. Помогите, пожалуйста, советом: нужно решить с помощью PQ, при этом не дублируя уже существующий запрос для его последующего преобразования и объединения с копией (т.к. они действительно очень большие). Может, есть шанс решить это транспонированием или группировкой? Спасибо заранее.
Изменено: - 02.06.2022 08:06:14
|
|
|
|
|
|
13.01.2022 14:00:56
Коллеги, добрый день,
Имеется источник данных - файл с проектами. С помощью PQ источник разделяется на несколько одинаковых по структуре файлов, каждый из которых предназначен для одного конкретного админа (т.е. каждый админ видит только те проекты, которые к нему относятся). В массиве данных( в файлах админов) каждый проект повторяется 12 раз (по разу в месяц), а админы вносят в соседние колонки информацию по проекту для каждого месяца. Специфика в следующем: админам могут эти проекты переназначать друг-другу в любом месяце. И, сейчас происходит так: допустим, в июле у конкретного проекта сменился админ (например Иван передал проект Дмитрию), соответствующие изменения вносятся в источник. После обновления данных у Дмитрия пропадает этот проект со всей внесенной до этого информацией, у Дмитрия проект появляется как надо. Проблема: потеря данных, необходимость постоянно согласовывать заранее изменения в проектах и также заранее переносить информацию. Что нужно - построить запрос таким образом, чтобы: 1. Если в течение всего года админ не менялся, то ничего; 2. Если в течение года админ хотя бы раз менялся, то: 2.1 Для передающего (т.е. для Ивана) проект оставался в его файле после обновления вплоть до месяца, в котором произошло изменение (например, Иван передал проект в августе, значит должен видеть в своем файле январь-июль этого проекта, а после - не видеть); 2.2 Получающий проект (т.е. Дмитрий) после изменения мог видеть как остаток года (август -декабрь), так и период январь-июль (главное, чтобы появились строки с проектами, даже без информации, которую Иван заполнял в течение этого периода), т.к. однозначно может возникнуть ситуация, когда понадобится предоставить информацию по предыдущим периодам; 3. Если проект передался третьему (4-ому, 5-ому, и т.д) админу, то правило, в целом, то же: новый админ видит все месяцы последующие месяцы и предыдущие, а старый - всё до месяца передачи. Отвечу на любые вопросы по теме, если они будут. Приложил порезаные, но рабочие файлы, со всеми запросами и структурой.
Изменено: - 13.01.2022 14:05:06
|
|
|
|
|
|
24.09.2020 10:07:35
Дмитрий(The_Prist) Щербаков,
Разбиение не установлено. Сам автофильтр стоит в каждой таблице, конечно же, но по нему ничего не отфильтровано. Группировка есть, как по столбцам, так и по строкам, до второго уровня (по строкам скрыты некоторые ключи, о которых я подробнее напишу ниже, по столбцам - некоторые малозначимые колонки). Переносится ~15000 строк, столбцов ~35. На всякий случай, ниже пишу детально о переносе информации. Вообще, как переносится всё: во второй строке каждого листа, в соответствующих каждому столбцу таблицы ячейках прописан ключ - название столбца таблицы источника (эта таблица находится в этой же книге, на отдельном листе). Соответственно, один массив я заполняю единожды - это названия столбцов источника; второй массив заполняется ключами из листа, на который я хочу перенести данные. Плюс, по определенным правилам, автоматически определяется по источнику, какие листы вообще заполняются, а какие нет. Когда все исходные условия определены, я запускаю цикл по каждому листу, который должен заполняться, внутри которого каждый раз, опять-таки, с помощью циклов For... Next сравниваются ключи по двум первым массивам. Если есть совпадение, то уже в третий массив я загоняю все данные столбца (например, arrTransfer = tblSource.ListColumns(n).DataBodyRange.Value) и осуществляю .Resize. Перед тем, как цикл перейдет к обработке следующего листа, я стираю второй масив ключей, первый и третий не трогаю. |
|
|
|
|
|
22.09.2020 19:20:47
Дмитрий(The_Prist) Щербаков,
Я пробовал всё. Стандартно ставлю везде: Application.ScreenUpdate = False Application.EnableEvents = False Application.Calculation = xlCalculationManual. Условного форматирования нет вообще. По F8 прогонял, никаких событий нет до момента отключения total row в умной таблице (это первое событие, которое приводит к тому, что, если файл большой, то он зависает минуты на 2-3). Еще, из того, что удалось обнаружить: например, если я заполняю таблицы по порядку, начиная с нулевого листа (~15000 строк), то первая таблица заполняется за 10 секунд, следующие заполняются - 1-2 минуты. При этом, у меня реализована возможность с помощью чекбоксов выбрать, какие именно таблицы заполнять. Так вот, если разрушить эту цепочку, и заполнять не по порядку, а, скажем, первый лист, потом третий, потом пятый, то время заполнения каждой таблицы будет 10-15 секунд; т.е., я хочу сказать, что процесс пойдет гораздо быстрее. Еще: при условии, что все таблицы заполнены информацией, то видно, что самый долгий отклик на событие у нулевого листа, а самый быстрый - у последнего листа, что, наверное, логично. И еще: насколько я понял, любое событие на листе заставляет Excel пересчитывать все формулы. Например, даже если я удаляю пустую строку вне заполненной умной таблицы текущего листа (пускай это будет нулевой лист, самый долгий), или отключаю или включаю сабтотал у второй умной таблицы, которая вообще пустая, то файл дико виснет. Чем дальше я от нулевого листа, тем быстрее все это происходит. xlCalculationManual не помогает здесь вообще, почему, я не знаю. Сейчас, т.к. в текущей версии я потер все формулы, каждый лист заполняется за 12-18 секунд.
Изменено: - 22.09.2020 19:24:46
|
|
|
|
|
|
22.09.2020 18:51:47
PooHkrd, к сожалению, так и есть. Конечные пользователи абсолютно не умеют обращаться с этим тулом, но при этом хотят иметь возможность прямо влиять на определенные вещи, к примеру, изменять порядок столбцов в шаблоне, менять их название, прописывать формулы и т.д.
Изменено: - 22.09.2020 19:02:35
|
|
|
|
|
|
22.09.2020 16:35:09
В общем, удалось методом тыка определить очаг проблемы. На всякий случай рассказываю:
В файле, помимо всего прочего, есть 13 определенных листов, каждый из которых содержит по 2 умные таблицы. Все эти таблицы одинаковой структуры, изначально все пустые. В определенных столбцах каждой таблицы (всего таких столбцов 5 шт.) прописаны формулы. На нулевом листе (самом первом по списку) в эти столбцы подтягиваются определенные данные из другой таблицы, которая очень редко изменятся (раз в год) и сама по себе не очень большая. Формулы в аналогичных столбцах таблиц следующих листов (1-12) сперва ссылаются на предыдущую таблицу, проверяя по ключу, существовал ли он там ранее, и, в зависимости от этого, показывают определенный результат. Если короче, суть в том, что все таблицы связаны через формулы, и это очень сильно влияет на определенные события в книге, например, удаление строк, выключение сабтоталов (причем, неважно, удаляю я строки внутри или вне таблицы, или же выключаю/включаю сабтотал в таблице, в которой вообще нет ничего - все равно файл будет виснуть), и так далее, и чем больше файл (~ больше строк в таблицах), тем медленнее эти события реализуются. Пока решение принял следующее: просто поубирал все формулы, которые ссылаются на предыдущий объект. Сами формулы и подобные столбцы - требование заказчика. |
|
|
|
|
|
22.09.2020 16:16:08
Михаил Витальевич С.,
1. Требование заказчика; 2. Мне проще ссылаться на диапазоны в VBA, в столбцах с формулами, и т.д.; Ну и ряд мелких преимуществ вроде встроенных сабтоталов, а также несколько решений, которые я реализовал с помощью умных таблиц. |
|
|
|
|
|
18.09.2020 09:36:05
Коллеги, добрый день,
Проконсультируйте, пожалуйста. Имеется файл. Если коротко: он весит 17 мб, формат .xlsx, в нем очень много формул и умных таблиц. Проблема конкретно с умными таблицами, в которых ~15 тысяч строк. Суть проблемы: если включить/выключить у таблицы указанного размера строку итогов, то это происходит ну прям очень долго, а файл в это время в состоянии not responding. Причем, что вручную, что с помощью VBA, результат один. Application.Calculation = xlManual не помогает. Вопрос: почему это происходит (очень долгая реакция на выключение total row) и можно ли это как-нибудь вылечить (кроме как отказом от умных таблиц), потому что таких таблиц, теоретически, может быть 26, а мой макрос не может разнести каких-то жалких 600 строк между 4 таблицами даже за полчаса из-за этого. Важное уточнение: вполне возможно, что дело не только в выключении/включении строки итогов, а вообще в любых манипуляциях с умной таблицей: далее, мой макрос должен будет полностью удалить все строки в таблице с помощью .DataBodyRange.Rows.Delete, а потом перенести новую информацию из источника, и я вполне допускаю, что на данном этапе тоже будет похожая проблема. Очень жду советов, спасибо. |
|
|
|
|
|
21.02.2020 15:12:06
Коллеги, добрый день,
Подскажите, пожалуйста, советами или конкретным решением. Имеется две книги, в первой находится отсортированный список вопросов, в другой: такой же список вопросов, но без сортировки, а также во второй книге находятся ответы. Задача: притянуть ответы по каждому вопросу в первую книгу. Сложность в том, что ответы это не просто текст в ячейке: это может быть текст, может быть изображение, а может быть несколько чекбоксов со значением True или элементы ActiveX Control. В общем, как корретно это все перенести по ключам? С помощью какого инструмента?
Изменено: - 21.02.2020 15:14:47
|
|
|
|
|
|
18.02.2020 16:31:16
Коллеги, добрый день,
Заранее прошу прощения, я знаю, что таких тем миллион: я поиском пользоваться умею и смотрел предложенные варианты, но все равно хочу спросить здесь. Дано: есть надстройка, которая периодически пополняется новыми кнопками и около 30 пользователей. Нужно: чтобы надстройка (.xlam), после того, как пользователь дважды кликнет на неё, попала в дефолтную папку для надстроек и установилась пользователю в ленту. Само собой, если такая уже есть и она активна, нужно проверочное условие. Главное отличие от всех способов, которые я встречал: то, что я открываю не вспомогательный файл с кодом, а саму надстройку; для меня это принципиальный момент. Соответственно, меня в принципе интересует, возможно ли практически сделать так, как я описал выше, и если да, то как? Ниже код, который у меня есть на данный момент, он расположен в ThisWorkbook надстройки. На этапе FileCopy ругается ошибкой (Permission denied)
|
|||
|
|
|
|
22.01.2020 12:37:48
Vladimir Chebykin, я изучу, но мне все-таки нужен способ выделить промежуточные итоги другим способом, потому что сводная таблица создается каждый раз, и каждый раз надо подсвечивать, а создавать с помощью VBA для этого отдельный стиль каждый раз кажется мне слегка перебором
|
|
|
|
|
|
20.12.2019 15:46:45
Ігор Гончаренко, спасибо, помогло. Символы не лишние, все верно.
|
|
|
|
|
|
20.12.2019 15:10:10
Коллеги, добрый день,
Пожалуйста, подскажите решение; я начну немного издалека. Имеется форма VBA, с помощью которой пользователь должен выбрать 5 разных файлов, после чего, нажав кнопку "ОК", макрос обработает данные в этих файлах и сформирует отчет из нескольких листов в определенной форме. Соответственно, в макросе несколько модулей, но основной механизм простой: каждый файл открывается с помощью GetObject, оттуда берется информация (иногда она сразу заносится в массив, а иногда я использую просто VLOOKUP), и все переносится в отдельно созданный файл, после чего файл-исходник закрывается без сохранения. В чем проблема: в том, что в некоторых файлах-исходниках есть умная таблица, плюс они огромные по объему (20к+ строк и около 20 столбцов). В файле-отчете, куда переносится информация, тоже используются умные таблицы. В результате, я решил, что в таких случаях буду применять обычный VLOOKUP, т.к. способом сделать перенос информации быстрее я не владею. Таким образом, с помощью VBA, я просто в первую ячейку нужного мне столбца умной таблицы прописываю формулу VLOOKUP; т.к. это умная таблица, то остальные ячейки столбца также заполняются данными, и я просто следующим шагом превращаю все это в значения. Часть кода:
Проблема: - если у файла имя односложное, без определенных символов, то формула нормально срабатывает и подтягивает данные, но! - если у файла имя, например, "SQ01_2019_12-1_structure", то формула получается =VLOOKUP([@[Pers.'#]];SQ01_2019_12-'1_structure.XLSX'!Str[#Data];5;0), и она уже не срабатывает (добавляются лишние символы ') - результат формулы #NAME? Как обойти/решить эту проблему? Я старался максимально понятно изложить проблему, но если возникнут вопросы, то предоставлю дополнительную информацию. |
|||
|
|
|
|
04.12.2019 17:14:34
Коллеги, добрый вечер,
Подскажите, пожалуйста, как пересохранить xlsx в txt таким образом, чтобы в txt формате информация не "съезжала"? То есть, если в моем исходном файле под, например, столбцом "C" вся соответствующая этому столбцу информация, то в txt формате все съезжает в зависимости от названий столбцов (если я правильно понял причину). В общем, как конвертировать так, чтобы сохранилась наглядная структура? Спасибо. |
|
|
|
|
|
01.11.2019 15:24:14
Коллеги, добрый день,
Подскажите, пожалуйста, теорию. Допустим, у меня есть два массива, ну допустим, двумерных. В первом у меня содержатся ключи, во втором - значения, которые я хочу извлечь по ключам. Подскажите, пожалуйста, как мне это сделать так, чтоб побыстрее? Сейчас использую:
Как ускорить? |
|||
|
|
|
|
30.09.2019 13:20:25
Дмитрий(The_Prist) Щербаков, понял.
Версия офиса: MO 365 ProPlus, v. 1902 (Build 11328.20420); GetObject должен запустить обычный excel файл формата .XLSX С кодом да, сложнее, не знаю, как его выложить сюда и показать именно часть с ошибкой. В теории, я могу просто попробовать вручную подключить MISSING библиотеку, но надстройкой пользуются человек 20, и просто хотелось бы избежать вот этих ручных манипуляций. |
|
|
|
|
|
30.09.2019 13:01:07
Дмитрий(The_Prist) Щербаков, я убрал, как раз библиотека с названием из п.4 и была MISSING. Но не помогло, да.
|
|
|
|
|
|
30.09.2019 12:53:21
Коллеги, добрый день,
В офисе происходит постепенная миграция на Windows 10 с Windows 7. Надстройка, которой пользуются коллеги, работала на семерке без проблем, а на десятке стали возникать проблемы: 1. Run-time error '432', когда компилятор пытается выполнить, например, Set x = GetObject("PathName");
2. Компилятор не выполняет код, если какие-то переменные не объявлены, хотя Require Variable Declaration не активно. Возникает ошибка "Can't find project or library"; 3. Функции Trim и Mid также не распознаются, пока не исправил на VBA.Trim и VBA.Mid, иначе ошибка из п.2; 4. Microsoft Common Dialog Control 6.0 (SP6) больше не активно; это логично, потому что, насколько мне известно, эта библиотека не входит в пакет Windows 10 и поэтому мы просто её отключили. Пишу этот пункт для инфы, вдруг дело в этом. Пожалуйста, если есть идеи, как это исправить, поделитесь. |
|||
|
|
|