Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 След.
PQ: Исключение из итоговой таблицы всех значений, для которых верно условие
 
surkenny, вы правы, я недоглядел и выделил не всё.
Спасибо за помощь, это то, что нужно.
PQ: Исключение из итоговой таблицы всех значений, для которых верно условие
 
Добрый день, коллеги,

Имеется таблица с большим количеством столбцов.
В ней имеется ключевой столбец (допустим, Doc.No) - содержит номера документов, номера могут повторяться.
Также имеется столбец с номером счета (допустим, Acc.No) - значение в нем может повторяться, или вовсе отсутствовать.
Имеется дополнительный запрос со списком (list) значений для Acc.No.

Нужно: исключить из итоговой таблицы все Doc.No, для которых хотя бы один из соответствующих Acc.No равен значению из list.
Файл с примером во вложении (красным выделено то, что должно быть исключено из итоговой таблицы, т.к. хотя бы одно значение для соответствующего Doc.No было найдено в list).
PQ: Правильное использование Table.Buffer
 
PooHkrd, да, спасибо, практическим путем удалось выяснить, что конкретно в моем случае, буферизация не подходит. А вообще очень помогла информация из тем, в обсуждении которых вы непосредственно участвовали.
PQ: Правильное использование Table.Buffer
 
Zagadka, спасибо, принял к сведению эту информацию, но все равно пока не пойму, что делать: сначала объединить все нужное в один запрос, забуферить, после чего фильтровать это все по разным условиям, либо сначала частично отфильтровать, забуферить отфильтрованное до, после чего продолжить видоизменять промежуточный результат.  
PQ: Правильное использование Table.Buffer
 
Коллеги, добрый вечер,

Ситуация следующая: есть один основной запрос, и три дополнительных, из которых я в основной запрос тяну данные с помощью Merged, после чего провожу манипуляции: фильтрация по одному или нескольким признакам, создание условных столбцов, замена значений в столбцах (некоторые - по условию), изменения формата данных, перестанока, переименование, удаление столбцов, сортировка. Основной запрос и один из трех дополнительных тянутся из CSV файлов, примерно от 90-220 тысяч строк каждый.

Вопрос: имеет ли смысл использовать в моем случае Table.Buffer, или нет?

Изучал тут, тут и тут. Понимаю смысл самой функции, но не могу понять, как её применить в моем случае: например, лучше будет сперва отmerge-ить все доп. запросы, закинуть таблицу в буфер, после чего проводить все манипуляции, либо сначала отфильтровать все, потом буфер, потом все остальное, либо вообще оставить всё как есть.

Код главного запроса, на всякий случай:
Скрытый текст
Изменено: Framed - 18.06.2022 20:13:33
PQ: Конвертация столбцов с датами и суммами с разными форматами в один общий
 
mechanix 85, вероятно, мы так и сделаем в конечном итоге, согласен с вами. Файлов сейчас: около 40.
PQ: Конвертация столбцов с датами и суммами с разными форматами в один общий
 
PooHkrd,

В теории могут быть любыми.
Практически встречал пока только три варианта (они ниже), в т.ч. американский (данных по американскому формату больше всего):

1. dd.mm.yyyy;
2. m/d/yyyy;
3. dd-mm-yyyy.

Добавлю, что в одном файле присутствует лишь один формат; смешения не замечено.
Изменено: Framed - 17.06.2022 02:39:35
PQ: Конвертация столбцов с датами и суммами с разными форматами в один общий
 
PooHkrd,

Столбцы с суммами - DMBTR, WRBTR
Даты - AUGDT, ZFBDT
Изменено: Framed - 16.06.2022 23:25:54
PQ: Конвертация столбцов с датами и суммами с разными форматами в один общий
 
Коллеги, добрый вечер,

Ситуация следующая: коллеги прислали набор файлов 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, но возникают ошибки, а способ выше не стал применять пока что.

Посоветуйте варианты, спасибо заранее.
PQ: Преобразование каждой второй строки таблицы в дополнительные столбцы
 
Коллеги, доброе утро,

Имеется большая таблица данных, преобразованная в PQ. Особенность её в том, что, условно - ячейки каждых двух строк первых трех столбцов дублируют друг-друга (первый столбец содержит ключи), а, скажем 4-7 столбцы содержат в себе значения, которые могут и не дублироваться.
Задача в том, чтобы преобразовать каждые две строки в одну таким образом, чтобы информация, содержащаяся в ячейках каждой второй строки столбцов 4-7 перенеслась вправо в новые столбцы, дублирующие (само собой, со знаком отличия) названия столбцов-исходников.
Также: таблица преобразованна таким образом, что каждого ключа в ней по 2 шт., это строгое правило.

Немного запутано объяснил, но я прикладываю пример с описанием, думаю, там видно лучше.

Помогите, пожалуйста, советом: нужно решить с помощью PQ, при этом не дублируя уже существующий запрос для его последующего преобразования и объединения с копией (т.к. они действительно очень большие). Может, есть шанс решить это транспонированием или группировкой?

Спасибо заранее.
Изменено: Framed - 02.06.2022 08:06:14
PQ: Фильтрация итогового массива данных в зависимости от множества условий
 
Спасибо, помогло.
PQ: Фильтрация итогового массива данных в зависимости от множества условий
 
Коллеги, добрый день,

Имеется источник данных - файл с проектами.
С помощью PQ источник разделяется на несколько одинаковых по структуре файлов, каждый из которых предназначен для одного конкретного админа (т.е. каждый админ видит только те проекты, которые к нему относятся).
В массиве данных( в файлах админов) каждый проект повторяется 12 раз (по разу в месяц), а админы вносят в соседние колонки информацию по проекту для каждого месяца.

Специфика в следующем: админам могут эти проекты переназначать друг-другу в любом месяце. И, сейчас происходит так: допустим, в июле у конкретного проекта сменился админ (например Иван передал проект Дмитрию), соответствующие изменения вносятся в источник. После обновления данных у Дмитрия пропадает этот проект со всей внесенной до этого информацией, у Дмитрия проект появляется как надо.

Проблема: потеря данных, необходимость постоянно согласовывать заранее изменения в проектах и также заранее переносить информацию.

Что нужно - построить запрос таким образом, чтобы:

1. Если в течение всего года админ не менялся, то ничего;
2. Если в течение года админ хотя бы раз менялся, то:
   2.1 Для передающего (т.е. для Ивана) проект оставался в его файле после обновления вплоть до месяца, в котором произошло изменение (например, Иван передал проект в августе, значит должен видеть в своем файле январь-июль этого проекта, а после  - не видеть);
   2.2 Получающий проект (т.е. Дмитрий) после изменения мог видеть как остаток года (август -декабрь), так и период январь-июль (главное, чтобы появились строки с проектами, даже без информации, которую Иван заполнял в течение этого периода), т.к. однозначно может возникнуть ситуация, когда понадобится предоставить информацию по предыдущим периодам;
3. Если проект передался третьему (4-ому, 5-ому, и т.д) админу, то правило, в целом, то же: новый админ видит все месяцы последующие месяцы и предыдущие, а старый - всё до месяца передачи.

Отвечу на любые вопросы по теме, если они будут.

Приложил порезаные, но рабочие файлы, со всеми запросами и структурой.
Изменено: Framed - 13.01.2022 14:05:06
Включение и выключение итоговой строки в умных таблицах
 
Дмитрий(The_Prist) Щербаков,

Разбиение не установлено.
Сам автофильтр стоит в каждой таблице, конечно же, но по нему ничего не отфильтровано.
Группировка есть, как по столбцам, так и по строкам, до второго уровня (по строкам скрыты некоторые ключи, о которых я подробнее напишу ниже, по столбцам - некоторые малозначимые колонки).
Переносится ~15000 строк, столбцов ~35. На всякий случай, ниже пишу детально о переносе информации.

Вообще, как переносится всё: во второй строке каждого листа, в соответствующих каждому столбцу таблицы ячейках прописан ключ - название столбца таблицы источника (эта таблица находится в этой же книге, на отдельном листе). Соответственно, один массив я заполняю единожды - это названия столбцов источника; второй массив заполняется ключами из листа, на который я хочу перенести данные. Плюс, по определенным правилам, автоматически определяется по источнику, какие листы вообще заполняются, а какие нет. Когда все исходные условия определены, я запускаю цикл по каждому листу, который должен заполняться, внутри которого каждый раз, опять-таки, с помощью циклов For... Next сравниваются ключи по двум первым массивам. Если есть совпадение, то уже в третий массив я загоняю все данные столбца (например, arrTransfer = tblSource.ListColumns(n).DataBodyRange.Value) и осуществляю .Resize. Перед тем, как цикл перейдет к обработке следующего листа, я стираю второй масив ключей, первый и третий не трогаю.
Включение и выключение итоговой строки в умных таблицах
 
Дмитрий(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 секунд.
Изменено: Framed - 22.09.2020 19:24:46
Включение и выключение итоговой строки в умных таблицах
 
PooHkrd, к сожалению, так и есть. Конечные пользователи абсолютно не умеют обращаться с этим тулом, но при этом хотят иметь возможность прямо влиять на определенные вещи, к примеру, изменять порядок столбцов в шаблоне, менять их название, прописывать формулы и т.д.
Изменено: Framed - 22.09.2020 19:02:35
Включение и выключение итоговой строки в умных таблицах
 
В общем, удалось методом тыка определить очаг проблемы. На всякий случай рассказываю:

В файле, помимо всего прочего, есть 13 определенных листов, каждый из которых содержит по 2 умные таблицы. Все эти таблицы одинаковой структуры, изначально все пустые. В определенных столбцах каждой таблицы (всего таких столбцов 5 шт.) прописаны формулы. На нулевом листе (самом первом по списку) в эти столбцы подтягиваются определенные данные из другой таблицы, которая очень редко изменятся (раз в год) и сама по себе не очень большая. Формулы в аналогичных столбцах таблиц следующих листов (1-12) сперва ссылаются на предыдущую таблицу, проверяя по ключу, существовал ли он там ранее, и, в зависимости от этого, показывают определенный результат.

Если короче, суть в том, что все таблицы связаны через формулы, и это очень сильно влияет на определенные события в книге, например, удаление строк, выключение сабтоталов (причем, неважно, удаляю я строки внутри или вне таблицы, или же выключаю/включаю сабтотал в таблице, в которой вообще нет ничего - все равно файл будет виснуть), и так далее, и чем больше файл (~ больше строк в таблицах), тем медленнее эти события реализуются.

Пока решение принял следующее: просто поубирал все формулы, которые ссылаются на предыдущий объект.
Сами формулы и подобные столбцы - требование заказчика.
Включение и выключение итоговой строки в умных таблицах
 
Михаил Витальевич С.,

1. Требование заказчика;
2. Мне проще ссылаться на диапазоны в VBA, в столбцах с формулами, и т.д.;

Ну и ряд мелких преимуществ вроде встроенных сабтоталов, а также несколько решений, которые я реализовал с помощью умных таблиц.
Включение и выключение итоговой строки в умных таблицах
 
Коллеги, добрый день,

Проконсультируйте, пожалуйста.
Имеется файл. Если коротко: он весит 17 мб, формат .xlsx, в нем очень много формул и умных таблиц.

Проблема конкретно с умными таблицами, в которых ~15 тысяч строк. Суть проблемы: если включить/выключить у таблицы указанного размера строку итогов, то это происходит ну прям очень долго, а файл в это время в состоянии not responding. Причем, что вручную, что с помощью VBA, результат один. Application.Calculation = xlManual не помогает.

Вопрос: почему это происходит (очень долгая реакция на выключение total row) и можно ли это как-нибудь вылечить (кроме как отказом от умных таблиц), потому что таких таблиц, теоретически, может быть 26, а мой макрос не может разнести каких-то жалких 600 строк между 4 таблицами даже за полчаса из-за этого.

Важное уточнение: вполне возможно, что дело не только в выключении/включении строки итогов, а вообще в любых манипуляциях с умной таблицей: далее, мой макрос должен будет полностью удалить все строки в таблице с помощью .DataBodyRange.Rows.Delete, а потом перенести новую информацию из источника, и я вполне допускаю, что на данном этапе тоже будет похожая проблема.

Очень жду советов, спасибо.
VBA: Поиск и перенос объекта по ключу
 
Коллеги, добрый день,

Подскажите, пожалуйста, советами или конкретным решением.

Имеется две книги, в первой находится отсортированный список вопросов, в другой: такой же список вопросов, но без сортировки, а также во второй книге находятся ответы.
Задача: притянуть ответы по каждому вопросу в первую книгу.

Сложность в том, что ответы это не просто текст в ячейке: это может быть текст, может быть изображение, а может быть несколько чекбоксов со значением True или элементы ActiveX Control. В общем, как корретно это все перенести по ключам? С помощью какого инструмента?
Изменено: Framed - 21.02.2020 15:14:47
VBA: Автоматическая проверка и установка надстройки в ленту без вспомогательных файлов
 
PooHkrd, да, так и есть, вообще странно, что сам не догадался, спасибо вам.
Alemox, попробовал, помогло, пошел работать дальше, спасибо.
VBA: Автоматическая проверка и установка надстройки в ленту без вспомогательных файлов
 
Коллеги, добрый день,

Заранее прошу прощения, я знаю, что таких тем миллион: я поиском пользоваться умею и смотрел предложенные варианты, но все равно хочу спросить здесь.

Дано: есть надстройка, которая периодически пополняется новыми кнопками и около 30 пользователей.
Нужно: чтобы надстройка (.xlam), после того, как пользователь дважды кликнет на неё, попала в дефолтную папку для надстроек и установилась пользователю в ленту. Само собой, если такая уже есть и она активна, нужно проверочное условие.

Главное отличие от всех способов, которые я встречал: то, что я открываю не вспомогательный файл с кодом, а саму надстройку; для меня это принципиальный момент. Соответственно, меня в принципе интересует, возможно ли практически сделать так, как я описал выше, и если да, то как?

Ниже код, который у меня есть на данный момент, он расположен в ThisWorkbook надстройки. На этапе FileCopy ругается ошибкой (Permission denied)

Код
Private Sub Workbook_Open()
    Dim sFullFileName$, sFolder$, sFileName$
    sFileName = ThisWorkbook.Name
    sFullFileName = ThisWorkbook.FullName
    sFolder = Application.UserLibraryPath
    If Len(Dir(sFolder & sFileName)) = 0 Then
        FileCopy sFullFileName, sFolder
    Else
        MsgBox False
    End If
End Sub
VBA: Выбор всех сабтоталов в сводной таблице
 
Vladimir Chebykin, я изучу, но мне все-таки нужен способ выделить промежуточные итоги другим способом, потому что сводная таблица создается каждый раз, и каждый раз надо подсвечивать, а создавать с помощью VBA для этого отдельный стиль каждый раз кажется мне слегка перебором :)
VBA: Выбор всех сабтоталов в сводной таблице
 
Коллеги, добрый день,

Собственно, вопрос в названии темы: как с помощью VBA выбрать (или покрасить) строки, которые subtotals в любой сводной таблице?
Есть какой-нибудь метод, который мне выделит сразу все сабтоталы в сводной или надо выбирать по одному?

Спасибо.
VBA: Правильная ссылка на книгу в формуле VLOOKUP в ячейке умной таблицы
 
Ігор Гончаренко, спасибо, помогло. Символы не лишние, все верно.  
VBA: Правильная ссылка на книгу в формуле VLOOKUP в ячейке умной таблицы
 
Коллеги, добрый день,

Пожалуйста, подскажите решение; я начну немного издалека.

Имеется форма VBA, с помощью которой пользователь должен выбрать 5 разных файлов, после чего, нажав кнопку "ОК", макрос обработает данные в этих файлах и сформирует отчет из нескольких листов в определенной форме.

Соответственно, в макросе несколько модулей, но основной механизм простой: каждый файл открывается с помощью GetObject, оттуда берется информация (иногда она сразу заносится в массив, а иногда я использую просто VLOOKUP), и все переносится в отдельно созданный файл, после чего файл-исходник закрывается без сохранения.

В чем проблема: в том, что в некоторых файлах-исходниках есть умная таблица, плюс они огромные по объему (20к+ строк и около 20 столбцов). В файле-отчете, куда переносится информация, тоже используются умные таблицы. В результате, я решил, что в таких случаях буду применять обычный VLOOKUP, т.к. способом сделать перенос информации быстрее я не владею. Таким образом, с помощью VBA, я просто в первую ячейку нужного мне столбца умной таблицы прописываю формулу VLOOKUP; т.к. это умная таблица, то остальные ячейки столбца также заполняются данными, и я просто следующим шагом превращаю все это в значения.

Часть кода:
Код
<...>        
strStrFile = "" & Dir(frmUtl.txbStructure.Value) & "!" 'Здесь берется название файла, который выбрал пользователь в UserForm + "!" 
With .ListColumns("Department").DataBodyRange 
    .FormulaR1C1 = "=VLOOKUP([@[Pers.'#]]," & strStrFile & "Str[#Data],5,0)" 'Здесь я конструирую формулу в умной таблице
    .Cells.Value = .Cells.Value
End With
<...>

Проблема:

- если у файла имя односложное, без определенных символов, то формула нормально срабатывает и подтягивает данные, но!
- если у файла имя, например, "SQ01_2019_12-1_structure", то формула получается =VLOOKUP([@[Pers.'#]];SQ01_2019_12-'1_structure.XLSX'!Str[#Data];5;0), и она уже не срабатывает (добавляются лишние символы ') - результат формулы #NAME?

Как обойти/решить эту проблему?

Я старался максимально понятно изложить проблему, но если возникнут вопросы, то предоставлю дополнительную информацию.
Конвертирование .xlsx в .txt с сохранением табличной структуры
 
Коллеги, добрый вечер,

Подскажите, пожалуйста, как пересохранить xlsx в txt таким образом, чтобы в txt формате информация не "съезжала"? То есть, если в моем исходном файле под, например, столбцом "C" вся соответствующая этому столбцу информация, то в txt формате все съезжает в зависимости от названий столбцов (если я правильно понял причину).
В общем, как конвертировать так, чтобы сохранилась наглядная структура?
Спасибо.
VBA: Самый быстрый способ поиска значения в массиве по ключу
 
Коллеги, добрый день,

Подскажите, пожалуйста, теорию.
Допустим, у меня есть два массива, ну допустим, двумерных. В первом у меня содержатся ключи, во втором - значения, которые я хочу извлечь по ключам.
Подскажите, пожалуйста, как мне это сделать так, чтоб побыстрее?

Сейчас использую:
Код
WorksheetFunction.VLookUp(arr1(i,1), arr2, 2, False)
, но во втором массиве больше ста тысяч строк, процесс идет долго.
Как ускорить?
VBA: Не работает надстройка после перехода на Windows 10, Run-time error 432 и Can't find project or library
 
Дмитрий(The_Prist) Щербаков, понял.

Версия офиса: MO 365 ProPlus, v. 1902 (Build 11328.20420);
GetObject должен запустить обычный excel файл формата .XLSX

С кодом да, сложнее, не знаю, как его выложить сюда и показать именно часть с ошибкой.
В теории, я могу просто попробовать вручную подключить MISSING библиотеку, но надстройкой пользуются человек 20, и просто хотелось бы избежать вот этих ручных манипуляций.
VBA: Не работает надстройка после перехода на Windows 10, Run-time error 432 и Can't find project or library
 
Дмитрий(The_Prist) Щербаков, я убрал, как раз библиотека с названием из п.4 и была MISSING. Но не помогло, да.
VBA: Не работает надстройка после перехода на Windows 10, Run-time error 432 и Can't find project or library
 
Коллеги, добрый день,

В офисе происходит постепенная миграция на 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 и поэтому мы просто её отключили. Пишу этот пункт для инфы, вдруг дело в этом.

Пожалуйста, если есть идеи, как это исправить, поделитесь.
Страницы: 1 2 3 4 5 6 7 8 След.
Наверх