Страницы: Пред. 1 2
RSS
Тесты. Новые функции Excel 365 (по подписке) против VBA, Tests. New Excel 365 WorkSheetsFunctions vs VBA
 
Цитата
Jack Famous:  возможно, вы просто не умеете их готовить
=УНИК({3;8;8}) на листе не удаляет дубликаты
=СОРТ({4;1;8}) на листе не сортирует
то же самое и с кодами VBA:
Скрытый текст

Но если сначала транспонировать, то тогда работает.
Изменено: Бахтиёр - 23.09.2021 15:09:05
 
Цитата
Бахтиёр: если сначала транспонировать
потому что WorkSheetFunction.Transpose() сделает из одномерного массива двумерный столбец с нижней границей 1  ;)
Учтите, что самописная функция будет быстрее и надёжнее штатной  :idea:
Изменено: Jack Famous - 23.09.2021 15:13:12
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Transpose() - оочень быстро и без ограничений.
Реализация.
Изменено: bedvit - 24.09.2021 08:35:18
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit: оочень быстро и без ограничений
подтверждаю — более, чем в 20 (!!!) раз быстрее самописной со всеми выкрутасами  :idea:
Собственно, я только её, родимую, и использую  :D
Изменено: Jack Famous - 24.09.2021 09:16:09
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Как правильно заметил старший товарищь и отметил
Цитата
БМВ написал:
на этот раз медведь напахал.
код отрабатывает вот так корректно, но за значительно большее время.
Скрытый текст

С учетом  того что нельзя ограничить диапазон и медленной работой - рассматривать не стоит. разве что при работе с закрытыми книгами.
По вопросам из тем форума, личку не читаю.
 
БМВ, тогда спасибо просто за вариант тебе и старшему товарищу Андрею VG  :)  :idea:
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
Сортер от bedvit'а позволяет сортировать только 3 поля
в новей версии сортера, можно сортировать нн ограниченное количество полей. Тебе выслал для тестов в этой теме. На сайт выложу немногим позже.
«Бритва Оккама» или «Принцип Калашникова»?
 
TestSort_1Recur()
вроде работает неправильно.
Смотрите скрин, там стрелкой указано, из какого массива получился какой массив.
Разве при одноуровневой сортировке результат не должен быть таким, как на таблице, покрашенной на желтый цвет?
Изменено: Бахтиёр - 27.09.2021 14:53:07
 
Цитата
Бахтиёр: при одноуровневой сортировке результат не должен быть таким, как на таблице
нет
При такого рода сортировке, гарантируется только сортировка указанного столбца, а порядок остальных столбцов не сохраняется (не гарантируется). Не путать с нарушением построчной связи - этого не происходит

Собственно, я её обычно использую для сортировки уникальных данных и этой проблемы не наблюдаю
Можно 1 раз отсортировать данные как надо на листе, сделать столбец с целочисленной нумерацией согласно подходящей сотрировки и кодом в памяти просто сортировать по этому одному столбцу. Это очень быстро

Есть ещё нюансы в VBA-вариантах рекурсии или bedvit'a - там используется сортировка по символам UniCode, то есть "истинная" сортировка с различием регистра и правильным отношением к пустым элементам (в начале, а не конце) и букве ё - она будет НЕ ПОСЛЕ "е"  :D
То что мы привыкли считать "нормальной" сортировкой (по алфавиту + пустые в конце + по-умолчанию игнорируется регистр, но можно изменить) — не более, чем одна из многих реализаций "настоящей" сортировки, представленной bedvit'ом  :idea:

Чтобы нивелировать данный нюанс у себя, Виталий как раз и сделал возможным сортировку ВСЕХ столбцов (процедура сейчас тестируется)  :idea:

В заключение:
При "истинной" сортировке можно смело использовать невероятно быстрый бинарный поиск, а при любой другой — нет  ;)
Изменено: Jack Famous - 27.09.2021 15:40:13
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Бахтиёр: ...насчёт одномерных массивов...
=УНИК({3;8;8}) на листе не удаляет дубликаты
=СОРТ({4;1;8}) на листе не сортирует
то же самое и с кодами VBA:
Код
Sub ddd()
arr=Array(4,7,1,7)
arr2=WorksheetFunction.Sort(arr)
arr3=WorksheetFunction.Unique(arr)
End Sub
У этих функций есть необязательный аргумент - "По столбцам".
Вот его и нужно исползовать, чтобы работало с 1-мерными массивами, ведь 1-мерные массивы как бы "горизонтальные", поэтому по отношению к ним нужно указать этот необязательный аргумент:

=УНИК({3;8;8},ИСТИНА)
=СОРТ({4;1;8},,,ИСТИНА)

Код
Sub ddd()
arr=Array(4,7,1,7)
arr2=WorksheetFunction.Sort(arr,,,True)
arr3=WorksheetFunction.Unique(arr,True)
End Sub

Цитата
БМВ:  С учетом  того что нельзя ограничить диапазон и медленной работой - рассматривать не стоит. разве что при работе с закрытыми книгами.
Кстати, новые функции умеют работать на листе с закрытыми книгами.
 
Цитата
Бахтиёр: У этих функций есть необязательный аргумент - "По столбцам"
ну вот видите - всё сразу стало намного проще  :)

Цитата
Бахтиёр: новые функции умеют работать на листе с закрытыми книгами
так а сейчас как? Я могу сослаться из одной книги в другую и в ней всегда будут актуальные данные - разве нет?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous:  так а сейчас как?
например, СУММЕСЛИМН не работает с закрытой книгой СУММПРОИЗВ работает.
Я хотел сказать, что новые функции тоже работают как СУММПРОИЗВ, то есть если закрыть базовую книгу, откуда формулы тянут данные, ячейки не станут #ЗНАЧ! как в случае с СУММЕСЛИМН
Изменено: Бахтиёр - 27.09.2021 15:49:05
 
Бахтиёр, так как я не использую формулы для таких связей, то пришлось моделировать …
Действительно, неудобно — выдаёт ошибку на СУММЕСЛИ() при закрытии источника. Если это поправили (вы именно ЭТО имели ввиду), то очень хорошо  :idea:
Изменено: Jack Famous - 27.09.2021 16:30:14
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous:  Если это поправили
Нет, как бы не поправили:
1) Есть функции, которые не тянут (изначально, до сих пор, да и в будущем ИМХО) данные из закрытых книг: СУММЕСЛИМН, СЧЁТЕСЛИМН, ДВССЫЛ
2) И есть другие, которые тянут данные из закрытых книг.

Хорошо, что новые 365-овские (СОРТ, УНИК, ФИЛЬТР, ...) сделали умеющими работать с закрытой книгой
 
Бахтиёр, понял: старые не адаптировали, так хоть новые не зафаршмачили  :D
Может, поправят в будущем, когда идеи для обновлений (за что платить подписчикам) кончатся  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Оттестировал новую сортировку и остался очень доволен
Сортировка оказалась настолько хороша, что даже нет необходимости использовать карты (быстрая замена словарей) — сортировка 500 тыс строк и 4ёх столбцов оказалась быстрее, чем извлечение уникальных + сортировка 60 тыс строк   :idea:
Подробности можно увидеть по закомментированому таймингу этапов
Изменено: Jack Famous - 28.09.2021 17:25:18
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: Пред. 1 2
Наверх