Страницы: Пред. 1 2 3 4 След.
RSS
Размышление о C API Functions для Excel, Испольpование C API Functions для Excel в .xll
 
Jack Famous, вашу надстройку они же устанавливают, в чем разница?
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, не устанавливают — я все макросы "зашиваю" в файл (в модулях), а с вашей так не получится
Изменено: Jack Famous - 30.09.2019 17:43:24
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Уверен получится, догадываетесь, куда я вас опять отсылаю?) Но я не настаиваю. Здесь вопрос в том, что нужна ли такая функция. В любом случае механизм налажен, теперь мне проще модифицировть в любой вариант текущую реализацию. Скил получен, навыки прокачены.
Изменено: bedvit - 30.09.2019 19:48:58
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit: догадываетесь, куда я вас опять отсылаю?
сложено не угадать, если я сам это и предлагал  :D
Цитата
bedvit: Скил получен, навыки прокачены
вот это самое важное  ;)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Новая функция:
TextJoinXLL() - объединяет текст из нескольких строк, вставляя между текстовыми значениями указанные разделитель(и) - можно задать массив разделителей. Введенные числа будут считаться текстом. Аналог ОБЪЕДИНИТЬ (TEXTJOIN) - начиная с v2.0.1.7
Если объединенная строка содержит свыше 32767 символов (ограничение для ячейки), функция вернет ошибку #ЧИСЛО!.
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, лучше при каждом обновлении давать ссылку, откуда скачать, в то не у всех же закладка на твой сайт  :D
Лайтовый апдейт) даёшь сцепитьесли)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
сцепитьесли
Я думал над этим. И даже в старой версии надстройки (xlam) это реализовал (там же на сайте). Но в новую не стал переносить этот функционал, т.к. неясно насколько это нужно и удобно, и легко решается добавлением ЕСЛИ() в начальный диапазон.
Изменено: bedvit - 20.10.2021 09:58:39
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit: легко решается добавлением ЕСЛИ() и формулой массива
после таких слов 80% этого форума поняли, что зря они сюда заходят  :D
Как бы так тебе сказать… В общем ни хрена это не "легко", а формулы массива вообще одноразовое нерастягивающееся мероприятие (если у тебя не новый Excel)  :)

У Димы реализован отличный вариант в виде функции - и то многие не понимают, как использовать. Я бы предложил сделать процедуру, т.к. подобные вычисления в виде UDF довольно сильно грузят общий пересчёт

UPD: и напиши уже, чтобы файл BedvitXLL.bin хранили в отдельной папке с файлом надстройки и/или не удаляли это файл, т.к. в нём хранятся пользовательские настройки — я уже сам пару раз удалял, а потом искал "запомненные" в надстройку форматы  :D
Изменено: Jack Famous - 20.10.2021 10:12:03
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
80% этого форума поняли, что зря они сюда заходят  
Не думаю что сюда заходит 80% форума. Тем более для каждого нужно свое условие, а кому то не нужно вообще. За ссылку спасибо, посмотрел интересно. У меня можно использовать любой диапазон, не обязательно только один столбец. Плюс можно использовать массив разных разделителей.
Цитата
Jack Famous написал:
подобные вычисления в виде UDF довольно сильно грузят общий пересчёт
А ты тестировал или так на угад сказал? У меня пересчет всего столбца (более 1 млн ячеек), с этой формулой, которая скрепляет 10 столбцов по 10 символов занимает 3.5 сек.(без учёта времени копирования ячеек)
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
Jack Famous написал:
чтобы файл BedvitXLL.bin хранили в отдельной папке с файлом надстройки
Он сам создаётся и хранится в папке, где хранится настройка. Там хранятся пользовательские настройки. Он не обязателен, без него надстройка тоже работает, если его случайно удалить. Но потеряете свои сохраненные настройки в этой библиотеке. Поэтому рекомендую не удалять. Эти настройки можно сохранять и открывать (2я и 3я кнопки на панели надстройки), если вы хотите перенести на новый комп или кому-то передать.
Изменено: bedvit - 20.10.2021 11:12:25
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit: А ты тестировал или так на угад сказал?
когда-то точно тестировал)
Тут больше вопрос в относительности, а именно "что значит долго"…
Даже твой пример на 3,5 сек весьма условный - сильно зависит от количества критериев и разброс будет немаленький

И даже так:
    Когда у тебя 10 таблиц и хотя бы в 2ух-3ёх есть такая функция
    Когда ВКЛЮЧЕН автопересчёт
    Когда ты просто вводишь данные в умную таблицу
    Если умная отфильтрована, то вообще кабздец

Любой из этих факторов (не говоря уже о сочетаниях) сделает использование подобной функции НЕУДОБНЫМ (вот, что я имею ввиду под словом "долго"), т.к. зачем мне ждать даже 2 секунды, когда я просто, например, ввожу данные или просто хочу актуализировать результат работы пары простых формул
Именно поэтому, ВСЁ, что работает с БОЛЬШИМИ ДИАПАЗОНАМИ (ВПР, СУММ/СЧЁТесли и т.д.), я переношу на "кликовый" расчёт процедурами - чтобы точечно актуализировть что надо и когда
Изменено: Jack Famous - 20.10.2021 12:31:05
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
сильно зависит от количества критериев
Это не относится к этой функции (она работает быстро), зачем их обсуждать. Это вопрос общей производительности и структуры модели данных.
Цитата
Jack Famous написал:
переношу на "кликовый" расчёт процедурами
Это не всегда применимо. Если у тебя 30 листов с расчетами и формулами в модели (больших и малых таблиц данных, расчетов), ты при пересчёте как контролируешь нужно тебе  кликать и где уже кликнул, а где ещё надо, все ли корректно обновилось?
Изменено: bedvit - 20.10.2021 13:42:43
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit: Это не относится к этой функции
я не понял — ты про свою функцию что-ли?  :D
Потому что Димина зависит, как и любая подобная…

Цитата
bedvit: при пересчёте как контролируешь нужно тебе  кликать и где уже кликнул
это уже совсем другой вопрос, но если кратко, то:
    1. Прям "при пересчёте" мне ничего кликать не надо (иначе я бы повесил макрос на событие пересчёта)- кликать нужно тогда, когда ты понимаешь, что данные изменились и нужно актуализировать что-то точечно
    2. У меня набор более или менее универсальных инструментов и, если брать аналоги ВПР, СЧЁТ/СУММ/Сцепить -Если, то каждый раз нужно будет выбрать несколько диапазонов - это быстро
    3. Если нужно делать прям автомат калашникова, то убираем переменные в виде запроса диапазонов и прописываем жёстко или привязываем к именованным диапазонам + прописываем все необходимые проверки
Изменено: Jack Famous - 20.10.2021 13:53:47
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
я не понял — ты про свою функцию что-ли?
Нет, я про функцию из сообщения #65.
Цитата
Jack Famous написал:
но если кратко, то:
При изменении структуры отчёта, надо нанимать программиста VBA.
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit: Нет, я про функцию из сообщения #65
там твоя функция  :D

Цитата
bedvit: При изменении структуры отчёта, надо нанимать программиста VBA
ну я же про себя писал, так что подразумевается, что это он всё сделал и он в штате
А вообще, если так вопрос ставить, то никакая новая форма сама себя не придумает и всегда нужны люди, которые будут понимать, что с этим делать, а уже макросами, формулами или прочими павекверями — второй вопрос
Тут пользоваться поди заставь, а ты про придумать  :D
Изменено: Jack Famous - 20.10.2021 15:00:59
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
написал:
У кого есть заветное желание заиметь собственную библиотечку с быстрой реализацией своей функции. Сортировка, хеш, СцепитьМассив() по условиям и т.д. полезные для форума?
Если еще актуально, добавлю такое пожелание. Не хватает функции типа Match, возращающей массив сразу всех индексов найденных значений в массиве, либо аналогия с функцией Filtr для массивов, возвращавшей бы вместо значений индексы. Вообще такого функционала не хватает как для массивов, так и для диапазонов. Еще один недостаток Match, также как и Find - отсутствие поиска по исключающему принципу.
Изменено: testuser - 20.08.2022 17:33:05
 
testuser, в расчетах до 1 млн строк, можно использовать AutoFilter, с отдельным столбцом - индексом. И функционал для настройки условий достаточно сильный.
Чем не устраивает?
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, это метод влияющий на лист, хотелось бы что-то типа Range.SpecialCells чтобы, допустим среди составного диапазона отобрать ячейки с определенным критерием и вернуть их также также в виде составного (объединенного) диапазона, ну или как описал выше - просто массив индексов элементв, который циклом также можно также преобразовать в диапазон. Интересный видел способ вычитания одного диапазона из другого - создается новый лист, в нем аналогичные диапазоны, исключаемый диап. заполняется единичками, а итоговый вычисляется методом SpecialCells с параметром xlBlank. Потом лист удаляется. Костыльно, но очень просто и эффективно для конечного писателя ), работает с любыми конфигурациями диапазонов.
Изменено: testuser - 22.08.2022 02:02:10
 
testuser, возможно, вам проще сделать новую тему и там обсудить ваши хотелки… Не думаю, что для перечисленного прям очень нужна библа Виталия - да, будет быстрее, но не думаю, что заметно на обычных объёмах. Можно попробовать просто на VBA…

Цитата
testuser: Интересный видел способ вычитания одного диапазона из другого - создается новый лист, в нем аналогичные диапазоны, исключаемый диап. заполняется единичками
я бы сказал, что это довольно очевидный и далеко не быстрый (как минимум из-за создания временного листа и его удаления) костыль. Можно сделать так, чтобы работало заметно быстрее, но кода будет больше и он будет сложнее  :D

У меня для Виталия есть несколько предложений, но ни одного - для функций листа. Для себя понял, что любые НЕродные функции листа, которые созданы для замены ВПР, СУММЕСЛИ и прочих агрегаторов — неизбежно будут создавать проблемы, как ни крути. Как минимум, при фильтрации…
Вот неполный список предложений для реализации в библе
Изменено: Jack Famous - 22.08.2022 09:54:37
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Коллеги, на VBA вы и сами все сделаете. Здесь мы обсуждаем функционал, которого на VBA нет или есть но очень медленный. Сделать инструмент обработки массива с любой размерностью, с поиском нужного значения и выводом такого же массива с 1 если найден или 0 если не найден. Или поиск по одномерному массиву с выводом массива индексов, только по найденным элементам. Это все разные задачи, нужно определится, что именно нужно, можно ли это сделать штатными инструментами и нужно ли это для реализации на низкоуровневом C API или в СОМ
Изменено: bedvit - 22.08.2022 10:03:36
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit: Коллеги, на VBA вы и сами все сделаете
спасибо большое - а не подскажешь тогда хотя бы один свой инструмент, который НЕЛЬЗЯ было бы повторить в VBA?  :)
По-моему всё сводится только к тому, чтобы просто сделать быстрее…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Хороший вопрос! На VBA много чего сложно повторить: Печать QR-code, алгоритмы хеширование строки SHA2,3, хеш-таблицы, словари, безопасное хранение vba-кода и его выполнение, пользовательскте формы с нормальным скролом колесиком мышки (навскидку, это то что мне нужно было, и я реализовал в своей библе, возможно ещё есть блоки, того чего нет, а хотелось бы)
Все это написано на других языках.
Изменено: bedvit - 22.08.2022 10:41:42
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit: На VBA много чего сложно повторить:
Цитата
bedvit: Печать QR-code
не разбирался, но не думаю, что создание QR-кода доступно только на сях. Как минимум, можно на сайте делать и получать данные.
Цитата
bedvit: алгоритмы хеширование строки SHA2,3,
вроде, есть на VBA, есть получше через API
Цитата
bedvit: хеш-таблицы, словари
словари есть и без твоей библы (со штатной). Есть коллекции, если совсем без сторонних подключений. Есть сортировка и бинарный поиск, если совсем без объектов - на чистом алгоритме
Цитата
bedvit: безопасное хранение vba-кодов и их выполнение
можно сохранять модуль или просто текст в запароленный архив и доставать оттуда
Цитата
bedvit: пользовательскте формы с нормальным скролом колестком мышки
Alemox давно поделился вариантом на API

Лично для меня  - основная польза от твоей библы в скорости. Замена словарей на UnOrdered Map сокращает время при обработке больших массивов в десяки и сотни раз - это секунды вместо минут. Уже одно это заставило меня перевести 80% своего кода (где это возможно) на использование мощи библы.
Если будут инструменты для обработки массивов, то даже такие простые функции, как InStr() и Replace() выйдут на совершенно новый уровень по скорости.
Не помещает преобразования внешне похожей кириллицы в латиницу и обратно. Транслит. Замена по списку. Много чего ещё у меня есть в идеях  :)
Изменено: Jack Famous - 22.08.2022 11:02:39
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Еще раз прочитай внимательно, что ты спросил, что я написал. QR на  сайте это НЕ VBA.
Про Си я вообще не упоминал.
API это тоже не VBA (это Си)
Штатный словарь это тоже не VBA.
Цитата
Jack Famous написал:
можно сохранять модуль или просто текст в запароленный архив и доставать оттуда
Покажи мне этот код, где хранишь пароль? Другой человек без пароля сможет запустить? (У меня, да)
Идеи это хорошо, главное, чтобы этот функционал был нужен.
К примеру, множество подключаемых библиотек к Python,  написаны на более низкоуровневых языках. Т.е. такая практика существует уже давно.
Изменено: bedvit - 22.08.2022 11:04:47
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, ты снова уходишь от темы - я понял вопрос как "без моей библы" иначе зачем вообще выяснять, что можно сделать на "чистом" VBA, не используя предоставленные возможности штатных библиотек. Что вообще считать "чистым VBA" и так далее…
И Да - всё, или почти всё, я думаю, можно повторить (с различной степенью удобства для конечного пользователя), только не думаю, что кто-то будет заниматься изобретением велосипеда.
Предложенные мной выше инструменты интересны тебе? Будешь добавлять?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
написал:
я бы сказал, что это довольно очевидный и далеко не быстрый (как минимум из-за создания временного листа и его удаления) костыль. Можно сделать так, чтобы работало заметно быстрее, но кода будет больше и он будет сложнее  
Такие задачи как правило "штучного исполнения" поэтому в данном случае не столь важно, хотя в своем случае все-таки сделал постоянный скрытый лист, поскольку ум не хотел мириться с мелькающим листом. Видел также на иностранном ресурсе как раз-таки вариант более сложный.. Но так или иначе SpecialCells должен работать быстрее, поскольку, на, как ее там, низкоуровенной основе.
Цитата
написал:
Или поиск по одномерному массиву с выводом массива индексов, только по найденным элементам. Это все разные задачи, нужно определится, что именно нужно, можно ли это сделать штатными инструментами и нужно ли это для реализации на низкоуровневом C API или в СОМ
Именно этот вариант или в более лучшем случае поиск в двумерном массиве (range.value's или range.formula's) и вывод результатов в виде одномерного массива индексов, которые в свою очередь можно будет сопоставить с range.cells(index). Конено это можно сделать на vba-шных циклах, с многократным вызовом match или find/findnext, т.е. гипотетически медленнее чем в каком-то более идеалном случае. А вот на сколько это может быть востребованно в реальной статистике, честно сказать затруднительно.
 
Цитата
testuser: Именно этот вариант или в более лучшем случае поиск в двумерном массиве
предлагал нечто подобное.
Если добавить словарь. из которого можно мгновенно узнать, в каких строках массива содержатся те или иные значения (а лучше иметь отсортированный массив и достаточно хранить позицию ПЕРВОГО элемента), то вообще пушка.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, ты про безопасное хранение и выполнение vba-кода не ответил. На VBA нельзя сделать защиту своего же кода от прочтения.
Про QR тоже мимо, нет на работе интернета и все, или к сайтам таким доступ закрыт и нтчего не работает, считаю, функционал должен поддерживать работу офф-лайн.
По твоим предложениям, про поиск по массиву интересно, а про джойн не понял, что в итоге надо. Редим, тоже пока непонятно где использовать.
testuser, если решения нужны штучного исполнения, это точно не в эту тему. Здесь рассматриваем решения для универсального/не разового применения. Ибо затраты на разработку не окупятся
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
написал:
если решения нужны штучного исполнения, это точно не в эту тему.
А я сам исключиельно за универсальность и лишь попытался угадать паттерн совпадающий с чаяниями множеств. ) Под "штучным исполнением" подразумевал развое (не множественное) выполнение метода, хотя сам метод может содеражть в себе массовые операции.
Изменено: testuser - 22.08.2022 13:44:16
 
Цитата
bedvit: про безопасное хранение и выполнение vba-кода не ответил. Про QR тоже мимо
глупо спорить с человеком, который сделал рабочие инструменты  :D Ты же явно искал, что есть и чего не хватает… Про QR код только вот это сохранил, но не разбирал (у меня есть твоя библа - зачем мне что-то ещё)  :)

Цитата
bedvit: про джойн не понял
обычному джоину нужен 1D массив и он сцепит все значения из него. Я предлагаю расширить функционал, чтобы можно было сцеплять от Nго до Mго Элемента массива, а также пропускать пустые, контролировать уникальность и уметь работать со "строкой"/"столбцом" 2D массива.

Цитата
bedvit: Редим, тоже пока непонятно где использовать.
что умеет ReDim Preserve сейчас: изменять последнюю размерность массива сохраняя все элементы на своих местах.
Что предлагаю: гораздо чаще редимить (в большинстве случаев, это обрезка) нужно строки 2D массива - поэтому нужна возможность контроля и первой (непоследних - в общем виде) размерности.
Также нелишним будет добавить изменение нижней границы (всё-равно пересобирать же).

Если есть функции редима, получения уникальных, отсева пустых, получения 1D массива из "строки/столбца" 2D-массива, то можно сократить количество аргументов того же джоина (до одного обязательного массива и опционального разделителя), однако последовательный вызов всех этих инструментов из VBA будет медленнее одного вызова универсальной функции с этими же возможностями. Тебе писать больше кода, зато потом VBAшникам писать намного меньше и работать будет быстрее…
Изменено: Jack Famous - 22.08.2022 14:06:06
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: Пред. 1 2 3 4 След.
Наверх