Страницы: 1 2 3 4 След.
RSS
Формулы массивов, кто может объяснить что это такое?
 
Вот что отвечает справка 2003-го Экса:  
 
Формула массива- Формула, выполняющая несколько вычислений над одним или несколькими наборами значений, а затем возвращающая один или несколько результатов. Формулы массива заключены в фигурные скобки { } и вводятся нажатием клавиш CTRL+SHIFT+ВВОД.)  
 
Для меня это непонятно, учитывая что самого определения массива тут нет...  
Кто-нибудь из знатоков может человеческим языком объяснить что это такое? И чем они отличаются от обычных формул, кроме заключения в красивые скобки?  
 
Спасибо!
 
http://office.microsoft.com/ru-ru/excel/HA102284581049.aspx
 
Тем, что без красивых скобок не работают :)  
Простой пример - просуммировать значения в столбце, если в соседнем >х.  
Простая СУММЕСЛИ.  
Усложним условия - если а*в>х. Нужен доп. столбец с формулой а*в, создающий массив (набор) значений.  
В формуле массива можно создать такой набор, не применяя дополнительные ячейки:  
СУММ(ЕСЛИ(а*в>х;с)) - перебирает построчно значения а и в и при выполнении условия запоминает в массиве значение с, которые потом суммируются.
 
Википедия:  
 
Массив — Упорядоченный набор данных, для хранения данных одного типа, идентифицируемых с помощью одного или нескольких индексов. В простейшем случае массив имеет постоянную длину и хранит единицы данных одного и того же типа.  
 
Количество используемых индексов массива может быть различным. Массивы с одним индексом называют одномерными, с двумя — двумерными и т. д. Одномерный массив нестрого соответствует вектору в математике, двумерный — матрице. Чаще всего применяются массивы с одним или двумя индексами, реже — с тремя, ещё большее количество индексов встречается крайне редко.  
 
В высшей математике - матрица.
 
Всем огромное спасибо, особенно vikttur, я как раз просил человеческим языком :-)  
Буду вникать:)
 
вот может поможет понять.  
 
я сам никогда не понимал что такое массив и как с ним работать, а после какого то поста одного из гуру прямо какое то озарение снизошло)
 
Как это вижу я.  
Формула массива приходит на помощь тогда, когда мы не может получить решение стандартной формулой(да еще и в одной ячейке без доп.столбцов). К примеру нужно получить минимальное значение из массива чисел:  
0  
1  
2  
4  
6  
0  
2  
Применив обычную формулу =МИН(A1:A7) мы получим ноль. Что будет верным. Но если нам как раз ноль учитывать не надо?  
Мыможем ввести такую формулу:  
=МИН(ЕСЛИ(A1:A7<>0;A1:A7))  
Казалось бы условие задано верно и мы должны получить нужный результат, т.е. 1. НО! Т.к. это простая формула, она обрабатывает не массив значений, а только первое значение массива(A1:A7) из условия ЕСЛИ. Формула не просматривает весь заданный массив.    
Но если ввести её как формулу массива  
{=МИН(ЕСЛИ(A1:A7<>0;A1:A7))}  
то в таком случае формула последовательно просмотрит каждое значение из массива на предмет выполнения условия и выполнит необходимые вычисления, заданные в этой формуле, так как будто бы мы последовательно для какждой строки в отдельном столбце вывели результат выполнения заданного условия ЕСЛИ и уже по этим результатам определили минимальное значение.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
И ещё раз спасибо!!!  
Сейчас для меня это инфа к размышлению, но по-моему я на верном пути, пример The_Prist даже не поверг меня в шок :-)  
Да и Dophin-а формулу вроде понимаю, с трудом пока, но я честно пока НИ РАЗУ формулами массива не пользовался...  
Сегодня первый раз Саша мне помог подобной формулой, вот я и заинтересовался...  
 
Всем ОГРОМНОЕ СПАСИБО!!!
 
Много текста вроде бы простым языком:  
Массив сам по себе-совокупность("ряд") элементов(значений).  
Массивы бывают:  
одномерные(т е есть 1 вектор, т е одна строка или один столбец значений)  
К примеру, 1 2 3,    
двумерными(т е 2 вектора, более одной строка и более одного столбца, т е "таблица".)  
К примеру,  
1 2 3  
4 5 6  
7 8 9  
многомерными(т е 3 и более векторов.)  
Пример трёхмерного массива: у вас есть тетрадь, на каждой страницы которой есть по таблице. Первый вектор-строки таблицы, второй-столбцы, третий-"страницы".  
 
 
Элементы массива(значения) в формулах excel могут получаться из:  
1) констант массива("постоянные" элементы)  
2) ссылок на другие ячейки/диапазоны/имена("переменные" элементы)  
3) А так же произведением каких-либо вычислений над вышеперечисленными группами внутри формулы.  
 
Константы вводятся вот такими скобками {}.  
К примеру, сумм({1;2;3}) или сумм({1:2:3}).  
С помощью ";" вводятся горизонтальные(т е строка) одномерные массивы.  
С помощью ":" вводятся вертикальные(т е столбца) одномерные массивы.  
Двумерный массив константами можно получить, умножим одномерный на двумерный:  
=сумм({1;2;3}*{1:2:3})=  
Сумм(  
1 2 3  
2 4 6  
3 6 9  
)=  
36  
 
В принципе, даже обычная сумм(a1:b2) суммирует значения массива. Вводится enter'ом. Просто здесь экселю подсказывать, что это массив, не нужно.  
Касательно ввода enter'ом и ctrl+shift+enter'ом существует много нюансов, в том числе:  
сумм(a1:b2+1) В данной формуле вначале к значению каждой ячейки прибавляется единица, потом значения суммируются. Ввод должен осуществляться через ctrl+shift+enter.  
суммпроизв(a1:b2+1), который делает по сути то же самое, вводится, однако, enter'ом.  
сумм({1;2;3}*{1:2:3}) так же вводится enter'ом.  
И так далее.  
Заморачиваться не стоит, со временем сами поймёте, какие случаи являются исключением из правила "производишь вычисления над несколькими значениями->нажимай ctrl+shift+enter".  
 
Касательно возвращения нескольких результатов. Написано неправильно, но, надеюсь, понятно.  
В экселе формула может возвращать только 1 значение, т е в ячейке будет отображаться лишь одно значение. Исключением является присвоением имени формуле в диспетчере имён.  
 
Допустим, мы вводим в ячейку a1 формулу =B1:b2+1 "enter'ом"  
Что происходит? Эксель запрашивает значения ячеек b1:b2. Получает два значения. Что с ними делать "для приведения к одному значению" для проведения дальнейших расчётов он не знает, а вернуть два значения не может. По-этому превращает возвращённые два значения в одно значение "#ЗНАЧ!"(ошибка).  
Т е формула =ЕОШ(B1:B2)+1 ввёдённая enter'ом вполне будет работать и вернёт 2, а при введении оной в виде массива(ctrl+shift+enter) вернёт 1.  
Что происходит при при введении данных формул в виде массива, т е используя ctrl+shift+enter?  
Учитывая то, что данные формулы, при введении их в виде массива, возвращают два значения, эксель вернёт лишь первое значение. Т е то же значение, что и получается в ходе расчётов формулы еош(b1)+1. В этот раз ошибки нет, поэтому получается 0+1=1.  
 
Эксель так же поддерживает ввод одной формулы массива в группу ячеек. Если выделить диапазон a1:a3, вставить формулу =ЕОШ(B1:B2)+1 и нажать ctrl+shift+enter, то эксель вернёт 3 значения:  
2 значения, соответствующие формулам =еош(b1)+1 и еош(b2)+1, и 1 значение "#Н/Д", т е значение Не Доступно, т к "значений не хватает".  
Аналогичная ситуация и с двумерными массивами при вводе их в двумерный диапазон ячеек.  
 
В расчётах в целом всё просто и соответствует логике, описанной в примере формулы "сумм({1;2;3}*{1:2:3})", т е операции проводятся над каждой ячейкой.  
 
Думаю, для начала работы с массивами этих знаний более чем достаточно.
 
Как строгий, но справедливый учитель :-)  
Спасибо Саша, теперь переварить надо :)))
 
спасибо огромное! :) всем-всем
 
Яркий пример массивов - матрицы (но не комплексные, поскольку Excel стандартными средствами комплексные матрицы считать не умеет).  
Вот мой совет, возьмите какой-то сборник задач по высшей математике за I курс, например А.В. Ефимова, Б.П. Демидовича т.1 Глава 3. Определители и матрицы. Системы линейных уравнений.    
Порешайте некоторые задачки из данной главы - вычисление определителя, обратной матрицы и т.п., а в конце свертесь с ответами.  
Уверен, это должно помочь с практической точки зрения. Когда-то таким образом практиковался.  
Такие функции, как (найти можно в справке в разделе математические)  
МОБР  
МОПРЕД  
МУМНОЖ  
являются ярким примером применения формул массивов и могут возвращать как массив значений, так и единственное значение.  
Например для МОБР и МУМНОЖ практической ценностью является возвращение массива значений, а для МОПРЕД как правило единственного значения.  
Очень удобно обращаться с именоваными массивами.
 
Учитесь и пробуйте.Очень удобная, гибкая и сильная штука.Очень часто использую в массиве имена диапазонов. Но есть несколько "но": если можно обойтись обычными формула - обходитесь, формулы массивов медленнее обычных, а если Ваши диапазоны больше 10000 записей, то расчет занимает порядочно времени, особенно если формула массивов достаточно большая.В Уокенбаха в книги "Подробное руководство по использованию формул" есть целая глава "Магия формул массивов" почитайте очень будет полезно
 
{quote}{login=vigor}{date=14.06.2012 11:24}{thema=}{post}Учитесь и пробуйте.{/post}{/quote}  
tarasso и vigor Вы дату топика видели?  
Или вам лишь бы постить?
 
Да ладно, Серёж, пусть скажут люди, даже спустя годы.. Интересно, что же это такое, - массивы? Пишу формулы. Если выдаёт #ЗНАЧ, то автоматом, особо не задумываясь, - Ctrl+Shift+Enter. Если что-то появилось, то перепроверяю пару позиций вручную.. Но я до сих пор не понимаю, как они летают (Туполев.. про самолеты) :)
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
{quote}{login= Владимир}{date=15.06.2012 11:11}{thema=}{post}Да ладно, Серёж, пусть скажут люди, даже спустя годы...{/post}{/quote}Да пусть говорят!  
Только не надо советовать <<<Учитесь и пробуйте>>> спустя почти три года после топика :-)
 
Сергей, а ты воспринимаешь "учитесь и пробуйте" как совет только лично тебе? :)  
 
имхо, тема хорошая.  
ответы vikttur'a, The Prist'a и Саши - "на пять".  
и неплохо, что тема "всплыла".  
и если бы на форуме было что-то типа рубрикатора, то эту тему однозначно следовало бы туда включить.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
{quote}{login=ikki}{date=16.06.2012 08:35}{thema=}{post}Сергей, а ты воспринимаешь "учитесь и пробуйте" как совет только лично тебе? :)  
{/post}{/quote}Ессно :-)  
Топик-то мой, значит и ответы - мне  
 
 
ЗЫ <<<ответы vikttur'a, The Prist'a и Саши - "на пять">>>  
...но мне они не помогли тогда :(  
Я понял что такое формула аррай после подсказки DV (за что ему ОГРОМНОЕ спасибо) на SQL.ru  
Мы разбирали МУМНОЖ и МОБР вкупе с СУММПРОИЗВ  
 
Для полноты картины добавлю:  
Не все формулы массива заключены в {} и не все формулы заключённые в {} являются формулами массива ;-)
 
Вдруг понадобится кому-нибудь примеры и легкие задачки на формулы массива.
 
Прошли годы, теперь я могу (спасибо форумчанам) рассуждать что такое "формула массива" и что ей не является ;-)  
 
Итак, ваше мнение.  
Есть формулы:  
1. {=A1}  
2. =СТРОКА()  
3. =СУММПРОИЗВ(--(A1:A5=1))  
4. {=СУММ(ЕСЛИ(--(A1:A5=1);1))}  
5. {=ТРАНСП(A1:A5)}  
введённые в одну ячейку.  
Что по-вашему из этих формул является Formula Array, а что нет и почему?  
Спасибо
 
Эта терминология когда-то здесь уже обсуждалось.  
 
Формулой в Excel считается выражение, начинающееся со знака равенства  "="  
Исключение – выражение в ячейке, имеющей текстовый формат, которое не является формулой, даже если начинается со знака "=".  
 
Формула может включать функции, операторы (сложения, вычитания и т.п.) и прочую лабуду (числа, текст, массивы, ссылки, разного рода скобки, именованные диапазоны и проч.).  
 
формулой массива является любая формула, ввод которой завершен одновременным нажатием Ctrl-Shift-Enter. Результатом формулы массива может быть один или несколько элементов массива как одномерного, так и 2-мерного.  
 
Формула массива при активации ячейки отображается с добавленными фигурными скобками в начале и в конце формулы. Эти фигурные скобки исчезают, если войти в режим редактирования формулы.  
 
Формулу массива можно вводить сразу в несколько ячеек, предварительно выделив их. Для того, чтобы определить диапазон ячеек (для изменения/удаления формулу массива), в которые введена формула  массива, нужно активировать любую ячейку внутри такого диапазона, нажать Ctrl-G, нажать кнопку "Выделить", выбрать "Текущий массив" и нажать OK.  
 
Примеры формул:    
 
1. Не формула массива =1  - в A1 введите =1 и нажмите Enter  
 
2. Не формула массива ={1}   -  в A1 введите формулу ={1} и нажмите Enter;  
здесь {1} –это одномерный массив с единственным элементом, равным единице,  
но результатом формулы будет не массив, а скалярное значение первого элемента массива. Вместо ={1} может быть введен массив с несколькими элементами, например, выделите A1:B1, введите ={1;2} и нажмите Ctrl-Enter (означает ввод формулы в группу ячеек), в A1 и в B1 будет записан результат равный единице, т.е. равный значению 1-го элемента массива.  
 
3.  Формула массива {=1}  - в A1 введите =1 и нажмите Ctrl-Shift-Enter. Пользы от такой формулы массива мало, потому что результатом ячейки будет единица.  
 
4.  Формула массива {={1;2}}  - выделите A1:B1, введите ={1;2} и нажмите Ctrl-Shift-Enter. В A1 будет записан первый элемент массива равный  1, а в B1 – второй элемент массива, равный 2.  
 
Следует различать формулу массива и функции, работающие с массивом.  
Функции (любые) могут входить в формулу, но они не являются формулой.  
Например, часто, но не всегда, вместо формулы массива может быть использована функция СУММПРОИЗВ(), внутри которой запускается обработка массивов, но результатом является скалярное значение, общая формула при этом по определению не является формулой массива, её результат будет тоже скалярным значением, а не массивом.  
 
Применений формул массива и функций, работающих с массивами, на форуме множество, как и попыток их описания.  
 
Формулы массивов используются не только в Excel. В пакете MATLAB, например, вообще нет скалярных вычислений, там любая операция даже сложение 1+2 внутри пакета выполняется как сумма массивов (матриц)  с единичными элементами.  
Т.е. в понятии Excel это выглядит как формула массива {={1}+{2}}.  
 
Еще один нюанс – в VBA пользовательская функция (UDF),  результатом которой являются массив и введенная в диапазон ячеек как формула массива, работает значительно быстрее, чем обычная UDF, введенная в каждую ячейку этого диапазона. Разница в том. что медленное общение между объектной моделью VBA и Excel в 1-м случае  выполняется один раз, а во 2-м случае столько раз, сколько ячеек.
 
{quote}{login=Serge 007}{date=29.08.2012 12:31}{thema=Тонкое понятие названия "формула массива"}{post}Итак, ваше мнение.{/post}{/quote}  
как известно, в формулах я ничего не понимаю. но это не повод смолчать!!!  
 
1. да. (скобки красивые есть)  
2. нет. (вернет одно число - номер строки, в которой находится формула)  
3. нет. (функция, используемая в формуле - функция, работающая с массивом, но это функция возвращает одно число, значит, формула в целом НЕ является формулой массива; да и скобок красивых нету)  
4. да. (функция СУММ, используемая в формуле - функция, работающая с массивом, но массив для этой функции получен с помощью ЕСЛИ; да и скобки есть)  
5. да. (формула вернула массив, а то, что вы использовали из этого массива только первое значение - это ваши проблемы).  
 
пс. чувствую, что своё мнение по п.4 пояснил паршиво, но мнения это не меняет.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Владимир четко описал терминологию (кстати, не помню, чтобы в предыдущих обсуждениях было так "культурно" разложено "по полочкам"), но...  
А Баба Яга против! :)  
Возможно, игра понятий, жонглирование терминами и проч. (с моей стороны).  
 
Наверное, формулы массива (ФМ) с фигурными скобками обрабатываются в программе по другому, поэтому они и выделены в отдельную категорию (а не из-за наличия скобок и трехпальцевого ввода). Т.е. разница не только в записи (=A1, {=A1}), но и в обработке. В таком случае ФМ должна трактоваться как ФМ, даже если {=1}.  
 
Но, как я понимаю, в конечном счете не важно, есть скобки или нет их. Для работы с формулами важна сама суть.  
Для меня, как пользователя, понятие "формула массива" было немного иное. После пространного объяснения Владимира пришло понимание, что, наверное, нужно для себя разграничить понятия "формула массива" и "формула, работающая с массивом (обрабатывающая массив)". Для чего?  
Часто возникают вопросы и недопонимания. Например, та же парочка:  
{=СУММ((A1:A5>2)*A1:A5)} и =СУММПРОИЗВ((A1:A5>2)*A1:A5)  
Результат работы - один и тот же, обработка массивов данных присутствует в обеих формулах (функция в теле формулы - часть формулы).  
=СУММ(A1:A5), =СУММПРОИЗВ(--(A1:A5)), {=СУММ(A1:A5)}  
Результат работы - один и тот же, первая точно не ФМ, во второй - дополнительная работа с массивом, третья как ФМ бессмысленна.  
 
"формула массива" (ФМ)- официальное название формул, введенных с фигурными скобками.  
"формула, работающая с массивом(обрабатывающая массив)" (ФОМ) - (сам придумал) формулы, в которых так или иначе происходит дополнительная обработка массивов или которые хранят в себе массив данных.  
 
Поэтому, как для "конечного пользователя", работающего с формулами:  
1. {=A1} - ФМ, но не ФОМ, хотя красивые скобки на месте: где массив? какой смысл?    
2. =СТРОКА(), =СТРОКА(1:1) - не ФМ, не ФОМ; =СТРОКА(1:5) - не ФМ, но ФОМ (или часть ФОМ);  
3. =СУММПРОИЗВ(--(A1:A5=1)) - не ФМ, но ФОМ (внутри функция с обработкой массива данных);  
4. {=СУММ(ЕСЛИ(--(A1:A5=1);1))} - и ФМ, и ФОМ (обработка массива данных);  
5. {=ТРАНСП(A1:A5)} - и ФМ, и ФОМ (хоть и в одной ячейке, но хранит в себе массив данных).
 
в подробном описании Владимира мне особенно понравился этот момент:  
{quote}{login=ZVI}{date=29.08.2012 02:42}{thema=Когда формула является формулой массива}{post}...и прочую лабуду.{/post}{/quote}  
:lol:
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Спасибо за ответы!  
 
Теперь выражу своё мнение (не факт что оно правильное, это просто мнение)  
 
1. НЕ формула массива, т.к. массив она не возвращает  
2. Формула массива, т.к. возвращает массив  
3. Формула массива, т.к. возвращает массив, который сама же и суммирует  
4. Формула массива, т.к. возвращает массив, который сама же и суммирует  
5. Формула массива, т.к. возвращает массив, несмотря на то что ввели её в одну ячейку  
 
Третий пункт очень противоречив даже для меня самого, так ведь можно и СУММЕСЛИ к ФМ причислить :-)
 
Не соглашусь с Сергеем по 1,2,3 пункту, моя позиция полностью совпадает с позицией Александра.  
Владимир подробно описал чем отличается формула массива от функций, работающих с массивом.  
Если рассуждать как Сергей, то формулы где используются функции ПРОСМОТР и ЧАСТОТА также можно приравнять к формулам массива, т.к. они не нуждаются в трехпальцевом вводе, но способны обработать и вернуть массив. На мой взгляд это не правильно.  
 
Тот же    
=ИНДЕКС(массив;0) - это формула массива?
 
Вопросы терминологии часто бывают спорными.  
Но чем проше и однозначнее формулировка, тем лучше.  
 
В данном случае идентификация формулы массива очень простая и однозначная, она четко прописана в справке Excel в разделе [Формулы массива и константы массива]:
 
"Формула массива создается так же, как и другие формулы, с той разницей, что для ввода такой формулы используются клавиши CTRL+SHIFT+ENTER"  
 
И всё.  
 
Остальные же формулировки являются личными мнениями, основанными на, в принципе, правильных представлениях о внутреннем механизме обработки внутри формулы, но не учитывающими еще и тот факт, что результат формулы массива - всегда массив, а не просто (скалярное) значение. В Excel не существует другого способа для выдачи массива в качестве результата формулы, кроме как нажатием CTRL-SHIFT-ENTER при вводе формулы.
 
Убедил окончательно.  
Для себя оставляю разграничение на ФМ и ФОМ.
 
Владимир, привет! В сообщении от 29.08.2012, 02:42 остался неосвещённым пункт № 5 :-)
 
{quote}{login=ZVI}{date=29.08.2012 12:17}{thema=}{post}...результат формулы массива - всегда массив, а не просто (скалярное) значение. В Excel не существует другого способа для выдачи массива в качестве результата формулы, кроме как нажатием CTRL-SHIFT-ENTER при вводе формулы.{/post}{/quote}  
Секундочку! :-)  
Например  
=СТРОКА(1:3) вернёт массив и без трёх пальцев, а =A1 не вернёт массив и при вводе CTRL-SHIFT-ENTER  
Разве не так?
Страницы: 1 2 3 4 След.
Читают тему
Наверх