Страницы: Пред. 1 2 3
RSS
Поиск значений в массиве для длинных строк (ВПР). Подсчёт количества повторений
 
Цитата
ZVI написал:
вызов из кода листа справочника уже неправильный
вы имеете ввиду, что так должно быть? — If IsChanged Then ZVI_UpdateDic. Если да, то пропустил просто по недосмотру…спасибо!
Цитата
ZVI написал:
Это уже Ваш код, но в нем от обилия "ZVI" рябит немного в глазах
ну я всегда указываю источники, когда код не мой. Это и дань уважения авторства, и всегда можно из кода найти ссылку на тему. А процедуры и функции с префиксом также, чтобы их различать  :)
Это ведь никак не влияет на вызов и работу, кажется?…

UPD: а что делает Compile VBAProject? Я нажал и ничего не произошло)) ищу на англоязычных сайтах, но пока не понял…
Вроде как переходит к ошибке, если она есть и я правильно понял
Изменено: Jack Famous - 16.02.2018 18:02:15
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал: а что делает Compile VBAProject?
Пытается скомпилировать код, чтобы потом его быстро выполнять,  но вначале проверяет, нет ли ошибок. В том архиве с ошибкой при попытке скомпилировать отладчик выделяет UpdateDic и сообщает, что такой функции или процедуры не найдено: Compile Error - Sub or Function not defined
 
ZVI, спасибо)) а эта его "компиляция" визуально код никак не перестраивает?
нашёл наконец статью — воистину крутая вещь этот компилятор!
Изменено: Jack Famous - 16.02.2018 18:34:18
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Снова здравствуйте, Планетяне!

Нашёл тут (в конце) вариант использования штатных функций листа для поиска по ключам длиннее 255 символов. Пытаюсь замутить UDF, а она кривляется  :D прошу подсказки (на листе все 3 работают исправно)
Код
Public Function Подтянуть(Что_ищем, Где_ищем, Откуда_тянем)
Подтянуть = WorksheetFunction.index(Откуда_тянем, WorksheetFunction.SumProduct(WorksheetFunction.Match(True, Где_ищем = Что_ищем, 0)))
End Function
'=== и ещё парочка однотипных функций (думаю, что принцип "нерабочести" тот же)
Public Function СчитатьЕсли(Что_считаем, Где_считаем)
СчитатьЕсли = WorksheetFunction.SumProduct((Что_считаем = Где_считаем) * 1)
End Function
'=========================================================================================================================
Public Function СложитьЕсли(Что_ищем, Где_ищем, Откуда_суммируем)
СложитьЕсли = WorksheetFunction.SumProduct((Что_ищем = Где_ищем) * Откуда_суммируем)
End Function
Изменено: Jack Famous - 10.04.2018 13:26:47
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
а она кривляется   прошу подсказки
Как кривляется то?
 
Anchoret, драсьте)) #ЗНАЧ выдают все 3
Изменено: Jack Famous - 10.04.2018 13:37:25
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, и Вам наше с кисточкой) Ох уж эти формулы и UDF заточенные под лист... Всегда было (для меня) написать что-нибудь делающее массовые изменения)
Может входные параметры не корректны?
---
прогнал через F8 - Type Mismatch (в самой функции).
Код
aa = Подтянуть([a1], [b:b], [b:b])
Изменено: Anchoret - 10.04.2018 13:58:34
 
Anchoret, не-не — никаких ошибок во входящих. Также, как и на листе, передаю 2 или 3 (в зависимости от функции) значения/диапазона
мне просто по-прежнему иногда нужно использовать ВПР, суммесли и счётесли для длинных ключей)) эти варианты очень шустрые - вот хотел UDFки для сотрудников накатать… Если подскажете другой вариант решения, то здорово. Только, чтобы я понял  :D
Изменено: Jack Famous - 10.04.2018 13:57:37
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Anchoret написал:
Type Mismatch
а что не так-то — не понимаю((
попробовал назначить as Range - не помогло
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, а вариант предложенный ZVI уже не устраивает (ВПР)?) Свой эквивалент этой функции я вроде уже предлагал в этой теме) Там ничего особо сложного нет, пару раз прогнать через F8 и все будет понятно. Все самое быстрое - на массивах. На малых объемах можно задействовать коллекции и словари.
 
Anchoret, вариант от ZVI я использую, но для других нужд (и он суперкруто справляется, тем более, я его прекрасно понимаю). С вашими кодами разобраться, как следует, пока не могу.
По СУММПРОИЗВ в VBA что не так скажете?))) просто странно очень - простая же формула… Единственное, что мне приходит в голову - это то, что функции листа и их VBA-аналоги всё-таки по-разному обрабатывают информацию и в данном случае это критично
Изменено: Jack Famous - 10.04.2018 14:38:11
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
функции листа и их VBA-аналоги всё-таки по-разному обрабатывают информацию
При применении функций листа в VBA возникает ограничение на кол-во ячеек/элементов массива этими функциями обрабатываемых. Возможно отсюда и ошибки. Например на большинство функций работающих с массивами в VBA (Max,Min,Average) есть ограничение на 65535 обрабатываемых значений/элементов. И это с Excel 2007, возможно на предыдущих версиях это ограничение более сурово.
Изменено: Anchoret - 10.04.2018 14:47:55
 
Anchoret, ячеек 350 в каждом диапазоне)) xl2016 win7 x64  - что-то другое…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous,  а почему должна работать конструкция  SumProduct((Что_считаем = Где_считаем) * 1)?
Это всеж не лист и  в Что_считаем = Где_считаем  - переменная сравнивается с масивом, что странно,  а не по отдельности в цикле, чтоб было странно.  нт в данном случае аналога массивного ввода и это равенство не создает массива результатов.

Я могу ошибаться но моя логика говорит именно так.  
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Это всеж не лист
вот и я так подумал, что принципы разные. Наверное, прямой аналог на цикле по элементам массива будет намного медленнее((
спасибо!))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: Пред. 1 2 3
Наверх