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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 403 След.
суп, эдо на vba
 
Иван Сергеевич, если вы предлагаете контракт с ВС в Алуште, то, определённо, стоит об этом прямо у теме писать. А вот чат удалять сразу — плохой знак...
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
"Статичный" фильтр. Как ускорить фильтрацию двумерного массива, Static Filter. How to SpeedUp Filter of 2D-Array
 
Цитата
bedvit: это уже реализованно в фильтре в нашей библе
ты лукавишь)
Понятно, что фильтр может возвратить отфильтрованный массив. А может вернуть индексы. А, также, индексы могут быть получены другим путём. Нет самого инструмента для пересбора. Отдельно. Мне кажется, на плюсах будет быстрее, чем на VBA. К тому же, можно добавить аргумент массива номеров столбцов и отобрать не только по строкам, а ещё и по столбцам (не все взять и/или в другом порядке и/или задублировать). Кстати, задублировать можно и строки, повторяя индексы.

Очень не хватает твоей реализации сцепки по условию. Я пока придумал только попутно со словарём собирать 2 одномерных массива (строковый для сцепок и лонг для последней заполненной позиции). Наполнить строковый буферными строками большой длины и заполнять их МИДом, запоминая последнюю позицию в лонг-массив. В конце, обрезать все строки по известную позицию. Тут демонстрировать не стал, а то и так непростой код.

Мне очень понравился мой вариант определения пересечения элементов массива — прямо здорово получилось  :)

А тест я, конечно, сделаю — мне и самому очень интересно.
Изменено: Jack Famous - 27.04.2024 21:50:42
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
"Статичный" фильтр. Как ускорить фильтрацию двумерного массива, Static Filter. How to SpeedUp Filter of 2D-Array
 
bedvit, привет и спасибо за внимание к теме!

1. Задача может быть решена с использованием библы или без неё. Без неё я показал. Наверняка, можно что-то ускорить, но кардинально отличаться может только другой подход.
С помощью твоего фильтра всё будет гораздо проще. Более того, на малых и средних объёмах он, скорее всего, будет быстрее. И уж точно удобнее и проще. Также, не нужно будет тратить время на подготовку данных и их обновление — всё будет браться актуальное. Всегда.
Однако, на больших объёмах он вполне может уступить (надо протестировать).
Есть такие задачи, когла временем подготовки данных можно пожертвовать или даже пренебречь — лишь бы потом можно было очень быстро по этим данным получать необходимую информацию. Такой была задача по словарю лемм (решилась с помощью твоего метода загрузки пар через одномерный массив). Такая задача и тут.

Если бы не волшебная комбинаторика, то задача свелась к бы к получению всех комбинаций (не хватает скорости плюсов, а у тебя нет ничего по этой теме) с номерами строк — в твоей карте. Но, боюсь, что количество комбинаций может быть просто невообразимо огромным и средняя ОЗУ просто не вывезет.
Нужно что-то другое.

2. Если просто повторить мой алгоритм, то скорость нужна в 3ёх местах:
- получение пар "критерий — массив номеров" (для каждого заданного поля.
- определение общих номеров (пересечения) из заданного массива массивов (номеров)
- быстрый пересбор двумерного массива по заданному списку строк. Кстати, вообще, такой инструмент пересбора был бы очень полезен. На твоей стороне это намного быстрее происходит.

Возможно, другой подход изменит и потребности.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Извлечь из исходной комбинации максимальных значений по заданным критериям., Пример: Извлечь из комбинации чисел 1 2 3 5 47 48 максимальных значений то есть 5 из 6
 
Цитата
Апострофф: я не помогаю желающим обмануть спортлото из голого альтруизма
практически, Робин Гуд  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
"Статичный" фильтр. Как ускорить фильтрацию двумерного массива, Static Filter. How to SpeedUp Filter of 2D-Array
 
Приветствую!
Заинтересовался такой задачей: как можно ускорить фильтрацию двумерного массива?
Далее под "фильтрацией таблицы" будет иметься в виду отбор строк двумерного массива, согласно критериев.
Давайте разбираться, что такое отбор/фильтрация на примере двумерного массива из таблицы

    Я решил разобрать [относительно] простой случай: Отбор не более, чем по одному значению — для каждого поля. Проверка осуществляется на строгое равенство, с учётом регистра. Алгоритм ускорения позволяет осуществить, также, проверку без учёта регистра и/или на НЕравенство, но в примере это не отражено.

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

    Слабые места алгоритма, которые я хотел бы ускорить (существующими методами или библой bedvit'а):
         • сцепка по ключу (не очень страшно и есть альтернативы).
    Чтобы собрать номера строк в массив я использую накопительную строку, формируемую по принципу s = s & sSep & iRow. Есть и другие варианты ( Mid$(s, …) = sSep & iRow кажется самым быстрым, но сложнее в реализации).
         • определение общих значений (отсортированные целые числа) для N массивов.
    Тут я применил всё, что знал. Используется массив в качестве "словаря" для быстрой проверки и используется самый малый по размеру массив (т.к. если в нём нет номера строки, то она уже никак не может быть общей для всех массивов). Описывать очень долго — кто в теме, тот поймёт. Какие-то моменты всегда можно спросить и я отвечу.
    Так вот, для этого процесса мне бы очень не помешал специальный инструмент из библы — такие штуки на плюсах должны быть сильно быстрее. Думаю, что его применение может быть довольно широким.

    Возможно, есть и другие способы, как ускорить отбор. Прошу поделиться  :idea:

    В файле 2 листа: исходная таблица для фильтрации и тестовый.
    В таблице можно добавлять/удалять строки. При уходе с листа произойдёт обновление.
    На тестовом можно выбрать от 1 до 4ёх критериев фильтра и нажать(даблклик) FILTER — справа выведется отфильтрованная таблица или сообщение, что под заданные параметры ничего не найдено.

Скрины
Файл
Код
Изменено: Jack Famous - 27.04.2024 17:26:11
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Как ускорить код, задающий параметры печати
 
testuser, твоё утверждение может быть верно для СОЗДАВАЕМЫХ файлов. А, насколько я понял (могу ошибаться), ТС меняет параметры СУЩЕСТВУЮЩИХ файлов, в которых могут стоять самые различные параметры печати.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Очередной элемент массива словарей заменяет все предыдущие на себя, Each new element of ArrayDictionary replaced all old elements with itself
 
Цитата
МатросНаЗебре: Так будет работать правильно.
благодарю!  :idea:
Сейчас протетстирую скорость 2ух подходов :D
UPD. По скорости — паритет. Тогда я выбираю вариант №2 (без посредников) ☺
Изменено: Jack Famous - 27.04.2024 15:31:42
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Очередной элемент массива словарей заменяет все предыдущие на себя, Each new element of ArrayDictionary replaced all old elements with itself
 
Приветствую!
Столкнулся со странным поведением массива словарей.
Добавление очередного элемента вызывает замещение предыдущих на него же.
Как обойти — показал, но, мне кажется, что заполнение словаря, как элемента массива будет дольше, ведь нужно постоянно обращаться к массиву.
Код
Почему так и как ещё можно побороть?
Судя по тестам, при Set aDic(1) = dic создаётся СВЯЗЬ между элементом массива и этим временным словарём, и, заполняя временный словарь, я сразу заполняю и элемент массива …
Изменено: Jack Famous - 27.04.2024 14:54:28
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Зачем сражаться за секунды выигрыша по скорости работы макроса?
 
Цитата
Счастливчик: Зачем ещё ускорять? Разве 3 секунды - это много?
иногда это просто интерес, какие подходы могут использоваться и/или какие условия должны быть соблюдены для большего ускорения.
Для кого-то 3 сек на 50 тыс строк это невероятно быстро, а для кого-то и 5 секунд на миллионе — это многовато.

Вот пример: я в надстройке на листе храню леммы (начальная форма) слов в виде пар "слово — лемма". Таких пар у меня 3,5 млн. Леммы используются в нескольких инструментах "нормализации" строк. Для работы каждого из них, все леммы нужно сначала загрузить в ОЗУ (в виде суперсловаря от bedvit'а). И вот, как вы думаете, что удобнее для пользователя — запустить нормализацию и уйти пить чай (3,5 млн / 50 тыс * 3 сек = 210 сек) или же подождать 3 секунды и получить результат? Вне зависимости от количества нормализуемых строк, леммы в словарь всегда грузятся ВСЕ. Или же пришлось бы сначала разбирать строки, собирая словарь слов, потом отбирать леммы только по этим словам и, только после этого, возвращаться к нормализации.

Скорость, которой достигаю я, обеспечивается глубокими исследованиями огромного количества вариантов.
А также библой bedvit'а  :D
Таким мало кто будет заниматься и часто — даже просто не поймёт, для чего это нужно. Ваша тема тому пример.
Изменено: Jack Famous - 27.04.2024 12:51:02
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
ВПР большого массива к большому массиву, Самы быстрый способ собрать данные между двумя большими массивами
 
voler83, ну, как-то вы прям необъективно подошли.
Да, в PQ можно путём [относительно] несложных манипуляций [практически только] одной мышью сделать N запросов для N листов с данными таблицы 1. Потом сделать запрос, объединяющий предыдущие N запросов в один. Потом сделать запрос ко 2ой таблице. Потом объединить 1ю и 2ю таблицу, причесать полученный результат и построить сводную на его основе.
Да, для человек, который полный ноль и в VBA, и PQ, вариант с PQ будет гораздо проще.

Но вы сильно преувеличиваете насчёт "будет летать на среднем ПК. Все делается за пару минут только мышкой".
Обновление запросов займёт от нескольких секунд до минут (зависит от множества факторов).
О "паре минут только мышкой" я написал выше.
Изменено: Jack Famous - 27.04.2024 12:09:25
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
ВПР большого массива к большому массиву, Самы быстрый способ собрать данные между двумя большими массивами
 
Starik19, поищите у меня, например (ссылка — не уверен, что сработает)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Зачем сражаться за секунды выигрыша по скорости работы макроса?
 
Цитата
nilske: теряется смысл в использовании  Option Explicit - можно просто её не использовать
я с вами спорить не буду (я не согласен, конечно), но вы так говорите, как будто с вас плату берут за использование этой опции. Это просто помощник, берущий на себя часть контроля и делающий это автоматически и безукоризненно.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
ВПР большого массива к большому массиву, Самы быстрый способ собрать данные между двумя большими массивами
 
Starik19, здравствуйте
Подтягивание или агрегация чего-то по ключу — это всегда история про словари/Dictionary (если мы про VBA) или их аналоги.
Штатным аналогом словарей является коллекция, но она сильно медленнее и не такая удобная.
Самый лучший вариант (для VBA) — использование суперсловаря/карты (UnOrdered Map) от bedvit. У него нет ограничения на количество ключей.
У штатного словаря такого ограничения [как бы] тоже нет, но замечено, что на 100 тыс ключей он начинает тормозить. Если использовать "обычные словари", то я бы сделал массив типа словарь (Dim aDic() As Dictionary), наполняя каждый элемент (словарь) до 80-100 тыс, и, при поиске искал бы в цикле по всем заполненным элементам массива словарей (словарям).

Так как словари это подключаемая штатная библиотека (Microsoft Scripting Runtime), я рекомендую раннее связывание (галочка в Tools → References) — скорость и удобство возрастут.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Зачем сражаться за секунды выигрыша по скорости работы макроса?
 
Цитата
МатросНаЗебре: в удобстве обратного вы меня не убедите
у меня аргумент один — удобно видеть все переменные в одном месте единым списком. Там их можно организовать по смыслу, убрать лишние, добавить новые.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Зачем сражаться за секунды выигрыша по скорости работы макроса?
 
Цитата
nilske: за такую  КРАСОТУ
про Conditional Compilation Arguments не знал, но, вроде, и не нужно это мне. Вообще, статья — полный скам и я бы такое никогда не посоветовал и, тем более, не назвал красотой.
     Улыбнулся, прочитав Это очень плохая практика – объявление всех переменных блоком в начале процедуры. Всегда лучше объявлять их непосредственно перед первым использованием.. Ну да, ну да  :D
Изменено: Jack Famous - 27.04.2024 10:02:42
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
ДР (ex HB)
 
Юрий М, с днём рождения, дорогой!
Крепкого здоровья тебе и финансового благополучия!
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Как ускорить код, задающий параметры печати
 
Цитата
Счастливчик: для этого нужно иметь хорошие знания в области макросов
достаточно нормально описать проблему. Вы создали тему Как ускорить код, задающий параметры печати и пишете Есть код, задающий параметры печати, но, при этом, приводите ВЕСЬ листинг с кучей строк, НИКАК не относящихся к параметрам печати.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Как ускорить код, задающий параметры печати
 
Цитата
Счастливчик: Добавил - код перестал работать
Цитата
ZVI: В начале кода добавьте эту строку:
ну, голову-то тоже не стоит выключать  :D Владимир имел в виду в начале/конце кода ВЫСТАВЛЕНИЯ ПАРАМЕТРОВ ПЕЧАТИ.
Цитата
Счастливчик: Подскажите, пожалуйста, как всё это сделать?
Вид — это кнопочки в правом нижнем углу перед ползунком масштаба. Их 3 и вам нужна первая/левая. Изменение вида и выбор принтера можете записать макрорекордером.
Изменено: Jack Famous - 26.04.2024 09:58:26
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Как ускорить код, задающий параметры печати
 
Счастливчик, здравствуйте
With и отключение событий, конечно, могут помочь, но я бы начал с замеров времени — действительно ли параметры печати замедляют…

Если они виноваты, то:
    • можно проверить, действительно ли ВСЕ эти параметры нужно задавать.
    • можно проверять параметр и не присваивать, если он уже нужный.
    • можно заменить Application.InchesToPoints() на заранее вычисленные значения или на свою, более шуструю, функцию.

Также, вполне возможно, что можно как-то задать шаблон, и, возможно, это будет быстрее, но тут не подскажу.
Изменено: Jack Famous - 25.04.2024 17:08:04
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Проверить содержит ли строка определённые символы, Формула проверка надежности пароля
 
alisa-gb, здравствуйте!
Цитата
alisa-gb: В своем выступлении о важности сложного пароля в современном цифровом пространстве он упомянул, что уже обладает знаниями, позволяющими взломать любой пароль, состоящий только из букв и цифр.
он, конечно, глубоко заблуждается.
Наличие спецсимволов, всего лишь, расширяет библиотеку [символов] для создания строки. Гораздо важнее длина пароля и его непредсказуемость, т.к. "Hello", "Password", многие другие и их вариации — "пробиваются" в 1ю очередь (даже сайты есть с такими подборками ненадёжных паролей).
Изменено: Jack Famous - 25.04.2024 15:15:07
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Есть толковый форум по Google Sheets и AppScript?
 
У Дмитрия Шербакова есть ветка по гуглолистам.
У друзей-соседей есть ветка.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Нанесение точек по координатам на рисунок карты на листе Excel, Требуется оффлайновый инструмент
 
deviceik, здравствуйте
Я такое в автокаде делал. Не уверен, что такое вообще возможно в Excel при текущих условиях.
Не претендую.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
При открытии двух файлов их значения становятся одинаковыми
 
djackson, здравствуйте.
Цитата
djackson: Проблему решить пока не удалось.
если вы ссылаетесь на ОДНО — откуда быть РАЗНОМУ результату???
Преобразуйте в значения, отключайте обновление ссылок — меняйте логику.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Можно убрать пробел только в конце значения ячейки?
 
Цитата
Jack Famous: Не слушайте бота  Savan  — чушь несёт (чат жпт работает или подобная шляпа с кривым запросом).
ещё и тихонечко заменил "свои" потуги на 1ый вариант от _Boroda_  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
MsgBox в Офис Р-7
 
Цитата
testuser: Ирония судьбы конечно, если в Р7/Only не завезли события
кнопочки рулят  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Предложение проекта
 
Msi2102,  :D  да уж
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Предложение по послаблению правил при создании первых 3 тем
 
Sanja, я — с вами ♥
Цитата
evgeniygeo: Наверное, в целом, я хочу чтобы мир был добрее
"за всё хорошее и против всего плохого" ♥
Изменено: Jack Famous - 18.04.2024 14:15:26
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Предложение проекта
 
Msi2102, неписанное  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Предложение проекта
 
Обоснование, почему беру другие заказы:
Мои контакты переданы [реальному] заказчику.
Напишет ли и когда — неизвестно.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Разработка небольшой надстройки для упрощения сохранения файлов
 
Пишу в личку
В работе
Изменено: Jack Famous - 18.04.2024 14:11:20
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 403 След.
Наверх