surkenny, вы правы, я недоглядел и выделил не всё.
Спасибо за помощь, это то, что нужно.
Спасибо за помощь, это то, что нужно.
18.06.2022 22:48:43
Zagadka, спасибо, принял к сведению эту информацию, но все равно пока не пойму, что делать: сначала объединить все нужное в один запрос, забуферить, после чего фильтровать это все по разным условиям, либо сначала частично отфильтровать, забуферить отфильтрованное до, после чего продолжить видоизменять промежуточный результат.
|
|
|
18.06.2022 20:09:29
Коллеги, добрый вечер,
Ситуация следующая: есть один основной запрос, и три дополнительных, из которых я в основной запрос тяну данные с помощью Merged, после чего провожу манипуляции: фильтрация по одному или нескольким признакам, создание условных столбцов, замена значений в столбцах (некоторые - по условию), изменения формата данных, перестанока, переименование, удаление столбцов, сортировка. Основной запрос и один из трех дополнительных тянутся из CSV файлов, примерно от 90-220 тысяч строк каждый. Вопрос: имеет ли смысл использовать в моем случае Table.Buffer, или нет? Изучал Код главного запроса, на всякий случай:
Изменено: |
|||||
|
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. Добавлю, что в одном файле присутствует лишь один формат; смешения не замечено.
Изменено: |
|
|
02.06.2022 07:55:36
Коллеги, доброе утро,
Имеется большая таблица данных, преобразованная в PQ. Особенность её в том, что, условно - ячейки каждых двух строк первых трех столбцов дублируют друг-друга (первый столбец содержит ключи), а, скажем 4-7 столбцы содержат в себе значения, которые могут и не дублироваться. Задача в том, чтобы преобразовать каждые две строки в одну таким образом, чтобы информация, содержащаяся в ячейках каждой второй строки столбцов 4-7 перенеслась вправо в новые столбцы, дублирующие (само собой, со знаком отличия) названия столбцов-исходников. Также: таблица преобразованна таким образом, что каждого ключа в ней по 2 шт., это строгое правило. Немного запутано объяснил, но я прикладываю пример с описанием, думаю, там видно лучше. Помогите, пожалуйста, советом: нужно решить с помощью PQ, при этом не дублируя уже существующий запрос для его последующего преобразования и объединения с копией (т.к. они действительно очень большие). Может, есть шанс решить это транспонированием или группировкой? Спасибо заранее.
Изменено: |
|
|
13.01.2022 14:00:56
Коллеги, добрый день,
Имеется источник данных - файл с проектами. С помощью PQ источник разделяется на несколько одинаковых по структуре файлов, каждый из которых предназначен для одного конкретного админа (т.е. каждый админ видит только те проекты, которые к нему относятся). В массиве данных( в файлах админов) каждый проект повторяется 12 раз (по разу в месяц), а админы вносят в соседние колонки информацию по проекту для каждого месяца. Специфика в следующем: админам могут эти проекты переназначать друг-другу в любом месяце. И, сейчас происходит так: допустим, в июле у конкретного проекта сменился админ (например Иван передал проект Дмитрию), соответствующие изменения вносятся в источник. После обновления данных у Дмитрия пропадает этот проект со всей внесенной до этого информацией, у Дмитрия проект появляется как надо. Проблема: потеря данных, необходимость постоянно согласовывать заранее изменения в проектах и также заранее переносить информацию. Что нужно - построить запрос таким образом, чтобы: 1. Если в течение всего года админ не менялся, то ничего; 2. Если в течение года админ хотя бы раз менялся, то: 2.1 Для передающего (т.е. для Ивана) проект оставался в его файле после обновления вплоть до месяца, в котором произошло изменение (например, Иван передал проект в августе, значит должен видеть в своем файле январь-июль этого проекта, а после - не видеть); 2.2 Получающий проект (т.е. Дмитрий) после изменения мог видеть как остаток года (август -декабрь), так и период январь-июль (главное, чтобы появились строки с проектами, даже без информации, которую Иван заполнял в течение этого периода), т.к. однозначно может возникнуть ситуация, когда понадобится предоставить информацию по предыдущим периодам; 3. Если проект передался третьему (4-ому, 5-ому, и т.д) админу, то правило, в целом, то же: новый админ видит все месяцы последующие месяцы и предыдущие, а старый - всё до месяца передачи. Отвечу на любые вопросы по теме, если они будут. Приложил порезаные, но рабочие файлы, со всеми запросами и структурой.
Изменено: |
|
|
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 18:51:47
PooHkrd, к сожалению, так и есть. Конечные пользователи абсолютно не умеют обращаться с этим тулом, но при этом хотят иметь возможность прямо влиять на определенные вещи, к примеру, изменять порядок столбцов в шаблоне, менять их название, прописывать формулы и т.д.
Изменено: |
|
|
22.09.2020 16:16:08
Михаил Витальевич С.,
1. Требование заказчика; 2. Мне проще ссылаться на диапазоны в VBA, в столбцах с формулами, и т.д.; Ну и ряд мелких преимуществ вроде встроенных сабтоталов, а также несколько решений, которые я реализовал с помощью умных таблиц. |
|
|
21.02.2020 15:12:06
Коллеги, добрый день,
Подскажите, пожалуйста, советами или конкретным решением. Имеется две книги, в первой находится отсортированный список вопросов, в другой: такой же список вопросов, но без сортировки, а также во второй книге находятся ответы. Задача: притянуть ответы по каждому вопросу в первую книгу. Сложность в том, что ответы это не просто текст в ячейке: это может быть текст, может быть изображение, а может быть несколько чекбоксов со значением True или элементы ActiveX Control. В общем, как корретно это все перенести по ключам? С помощью какого инструмента?
Изменено: |
|
|
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 и поэтому мы просто её отключили. Пишу этот пункт для инфы, вдруг дело в этом. Пожалуйста, если есть идеи, как это исправить, поделитесь. |
|||
|