Здравствуйте, всем доброго дня. Начало темы здесь Короткая предыстория, где год назад потребовалось формула которая присваивает уникальные номера, и повторяет эти номера в случае повторения этих данных. Решение было найдено как формулами, так и UDF. Пользовался формулами, но пришло время заменить формулы на UDF, правда требовалась некоторая доработка существующей UDF. Обратился к автору UDF HUGO, он изменил UDF, под новые условия. В итоге полученная UDF выполняла поставленную задачу, но она стала массивной. Причем именно массивной с обязательным вводом UDF в весь диапазон. Однако предыдущая формула, то же была массивной, но она могла работать без ввода её в диапазон, а путем протягивания. Пример можно посмотреть в приложении. Мне было изначально непонятно почему одна формула массива должна вводиться в весь диапазон, а другую можно просто протянуть вниз. В итоге после долгих разъяснений HUGO (за что ему спасибо), стало понятно что формула массива введенная в весь массив обрабатывает все ячейки как одни массив данных, а формула массива которую протягиваем, обрабатывает ячейки поячеячно, не как массив данных. Поэтому есть разница в скорости работы формул. Вот прошу пояснить правильно ли я понял разницу в работе формул массива которые можно протягивать и которые обязательно вводить в весь массив данных.
Я бы сказал так - "поячеечная" формула может обрабатывать данные как один массив (или как несколько массивов), но выводит результат в одну ячейку. Соответственно она (они) срабатывает столько раз, сколько этих формул пересчитывается. Массивная UDF с обязательным вводом в весь диапазон обрабатывает тоже такие же массивы, но выводит результат как массив данных и сразу во все ячейки, куда она введена. И срабатывает только один раз.
Массивная UDF с обязательным вводом в весь диапазон обрабатывает тоже такие же массивы, но выводит результат как массив данных и сразу во все ячейки, куда она введена. И срабатывает только один раз.
Это если вводить сразу в диапазон из нескольких ячеек. А если ввести в одну и затем протянуть - это останется одна формула, или их будет много? Я думаю что много, и у каждой свои аргументы.
Массивная UDF с обязательным вводом в весь диапазон обрабатывает тоже такие же массивы, но выводит результат как массив данных и сразу во все ячейки, куда она введена
Собственно, все-равно, UDF это или формула, если вводятся сразу в диапазон ячеек
Правдиво одно: выводится результат в формуле массива один раз для формулы, введенной в диапазон ячеек. Но вот вычисления происходят для каждой отдельной ячейки. Т.е. экономим по факту только на выводе результата махом и вызове формулы. Что иногда может увеличить общую скорость вычисления формул на листе. Пример: есть много формул, все завязаны друг на друга. Если вводить формулы массива поячеечно - то при вычислении они будут менять значения ячеек, что может повлечь пересчет летучих функций(некий цикл). И вычисления эти будут повторяться столько раз, сколько формул массива. Если же ввести формулу массива одну на диапазон - то и пересчет всяких там летучих функций будет только один раз.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Дмитрий, для ясности - UDF, которая по ссылке в начале темы, как результат выводит один массив значений, и не отрабатывает по разу на ячейку - она за один проход по исходным данным (ну или какой там алгоритм) подготавливает один массив данных, который и выгружает в этот свой диапазон.