Вопрос такой: Можно ли написать обычную формулу, которая будет возвращать неправильный результат, если её ввести как формулу массива? Т.е. требуется обратное действие тому, как если формулу массива вводят не Ctrl+Shift+Enter
У меня есть своё мнение на этот счёт, но я хочу услышать другие или убедиться в своём Спасибо
Друзья!
Вопрос такой: Можно ли написать обычную формулу, которая будет возвращать неправильный результат, если её ввести как формулу массива? Т.е. требуется обратное действие тому, как если формулу массива вводят не Ctrl+Shift+Enter
У меня есть своё мнение на этот счёт, но я хочу услышать другие или убедиться в своём СпасибоSerge_007
Миш, спасибо, но да, это не то... Понятно что нельзя сравнивать обычную формулу, всегда возвращающую одно значение и формулу массива, возвращающую массив. Однако можно сравнить их, если обе возвращают ОДНО значение. Вот в этом случае и надо найти разницу, если она есть. Поясню: ИМХО - её (разницы) быть не может по логике формул. Однако - может я ошибаюсь? Может существуют такие формулы?..
Миш, спасибо, но да, это не то... Понятно что нельзя сравнивать обычную формулу, всегда возвращающую одно значение и формулу массива, возвращающую массив. Однако можно сравнить их, если обе возвращают ОДНО значение. Вот в этом случае и надо найти разницу, если она есть. Поясню: ИМХО - её (разницы) быть не может по логике формул. Однако - может я ошибаюсь? Может существуют такие формулы?..Serge_007
Александр, я предложил примерно то же самое по смыслу, но Сергею нужно что то другое.
Есть у него ответ или нет я не знаю, но выскажу свое мнение. Формулы массива, если правильно составлен алгоритм, всегда возвращают ожидаемый результат, в отличае от "немассивных" формул Сам принцип "немассивной" формулы можно было бы упразнить и расчет формулы производить по принципам обработки массивных формул. Данный принцип ведь реализован в условном форматировании и в именах, так зачем различать вычисления в ячейках?
Цитата (ikki)
не оно?
Александр, я предложил примерно то же самое по смыслу, но Сергею нужно что то другое.
Есть у него ответ или нет я не знаю, но выскажу свое мнение. Формулы массива, если правильно составлен алгоритм, всегда возвращают ожидаемый результат, в отличае от "немассивных" формул Сам принцип "немассивной" формулы можно было бы упразнить и расчет формулы производить по принципам обработки массивных формул. Данный принцип ведь реализован в условном форматировании и в именах, так зачем различать вычисления в ячейках?MCH
ну а что тут искать? точнее - разницу в чем искать? исходная формула/функции/диапазоны - ессно, одинаковые. результат - одно число (тоже ессно).
разница - во внутренних механизмах работы некоторых функций. там, где "обычная" формула из подсунутого ей диапазона возьмёт одно число (не всегда, конечно же). а массивная - весь диапазон и это повлияет на результат.
ну а что тут искать? точнее - разницу в чем искать? исходная формула/функции/диапазоны - ессно, одинаковые. результат - одно число (тоже ессно).
разница - во внутренних механизмах работы некоторых функций. там, где "обычная" формула из подсунутого ей диапазона возьмёт одно число (не всегда, конечно же). а массивная - весь диапазон и это повлияет на результат.ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Как ведется расчет в формулах массива, понятно, и можно всегда предугадать, какой получится ответ. Есть функции, которые могут обрабатывать аргументы, также как и формулы массива, будучи введеные обычным образом (СУММПРОИЗВ, ЧАСТОТА, МУМНОЖ и др.) При этом не всегда это происходит так как нужно, например если внутри формулы есть функции ЕСЛИ или ТРАНСП, то массивный ввод обязателен, иначе считать корректно не будет
формула =МУМНОЖ(--(C1:F1=10);A1:A4) не нуждается в массивном вводе а =МУМНОЖ(ТРАНСП(--(B1:B4=10));A1:A4) - нуждается
аналогично: =СУММПРОИЗВ((B1:B4=10)*A1:A4) - не нуждается =СУММПРОИЗВ(ЕСЛИ(B1:B4=10;A1:A4)) - нуждается в массивном вводе
Таим образом, без массивного ввода не возможно заранее предугадать, будет работать формула или нет
Цитата (Serge_007)
Это не понял, можно пояснить?
Как ведется расчет в формулах массива, понятно, и можно всегда предугадать, какой получится ответ. Есть функции, которые могут обрабатывать аргументы, также как и формулы массива, будучи введеные обычным образом (СУММПРОИЗВ, ЧАСТОТА, МУМНОЖ и др.) При этом не всегда это происходит так как нужно, например если внутри формулы есть функции ЕСЛИ или ТРАНСП, то массивный ввод обязателен, иначе считать корректно не будет
формула =МУМНОЖ(--(C1:F1=10);A1:A4) не нуждается в массивном вводе а =МУМНОЖ(ТРАНСП(--(B1:B4=10));A1:A4) - нуждается
аналогично: =СУММПРОИЗВ((B1:B4=10)*A1:A4) - не нуждается =СУММПРОИЗВ(ЕСЛИ(B1:B4=10;A1:A4)) - нуждается в массивном вводе
Таим образом, без массивного ввода не возможно заранее предугадать, будет работать формула или нетMCH
Еще один пример, логику которого я не понимаю формула =СУММ((B1:B4=10)*A1:A4) корректно работает только когда вводится как формула массива, при обычном вводе возникает ошибка #ЗНАЧ! а вот формулу =СУММ(ИНДЕКС((B1:B4=10)*A1:A4;)) можно ввести обычным образом, при этом расчет будет выполнен, как будто она введена как формула массива Почему вторую формулу не нужно вводить как формулу массива?
Еще один пример, логику которого я не понимаю формула =СУММ((B1:B4=10)*A1:A4) корректно работает только когда вводится как формула массива, при обычном вводе возникает ошибка #ЗНАЧ! а вот формулу =СУММ(ИНДЕКС((B1:B4=10)*A1:A4;)) можно ввести обычным образом, при этом расчет будет выполнен, как будто она введена как формула массива Почему вторую формулу не нужно вводить как формулу массива?MCH
...запись первого аргумента функции в зеленых ячейках...
Да, это тоже самое что и у Михаила. Однако я всё-же не это имел ввиду...
В принципе, строго по первоначальным условиям топика, ответ я получил, однако всё же хотелось бы понять, возможно ли получить тоже самое, но не прибегая к хитростям, типа ввода формулы в несколько ячеек или использования массива в качестве искомого ОДНОГО значения
Во первых: Огромное спасибо за отклики!
Во-вторых:
Цитата (ikki)
...запись первого аргумента функции в зеленых ячейках...
Да, это тоже самое что и у Михаила. Однако я всё-же не это имел ввиду...
В принципе, строго по первоначальным условиям топика, ответ я получил, однако всё же хотелось бы понять, возможно ли получить тоже самое, но не прибегая к хитростям, типа ввода формулы в несколько ячеек или использования массива в качестве искомого ОДНОГО значенияSerge_007
Application.ScreenUpdating = False For i = 1 To 10000 [a1:e1].Calculate If [e1] = False Then Debug.Print [a1], [b1]: Exit Sub Next Application.ScreenUpdating = True End Sub
[/vba]
Цитата (Serge_007)
А1+В1 - равно х Вводим туже формулу массивно, получается y
Для сложения двух ячеек я не смог найти такую разницу
Application.ScreenUpdating = False For i = 1 To 10000 [a1:e1].Calculate If [e1] = False Then Debug.Print [a1], [b1]: Exit Sub Next Application.ScreenUpdating = True End Sub