Как в excel разделить массив

Разделить два массива и просуммировать по условию

dadmarat

Дата: Пятница, 17.01.2014, 15:43 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 47


Репутация:

3

±

Замечаний:
0% ±


Excel 2010

Есть два массива, которые нужно разделить каждый элемент разделить на соответсвующий другому массиву и просумировать результаты. Подошла бы функция , но елементы, на которые делим, могут быть «» или 0 и тогда данная функция выдает ошибку деления на ноль.
Нашел решения черер формулу массива

Код

{=СУММ(ЕСЛИ((«массив2»)<>0;(«массив1»)/(«массив2»)))}

,
но где-то видел решение такой же проблемы через функцию СУММПРОИЗВ.
Как я понял, данная функция иммет дополнительные возможности не описаные в базовых синтаксисах.

Файл пример приолагаю, вдруг понадобится.


—————-
I can do it!
—————-

 

Ответить

китин

Дата: Пятница, 17.01.2014, 15:57 |
Сообщение № 2

Группа: Модераторы

Ранг: Экселист

Сообщений: 6973


Репутация:

1063

±

Замечаний:
0% ±


Excel 2007;2010;2016

ну дык почти так же.формула массива

Код

=СУММПРОИЗВ((ЕСЛИ((B2:B18)<>0;(A2:A18)/(B2:B18))))


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852

Сообщение отредактировал китинПятница, 17.01.2014, 15:57

 

Ответить

dadmarat

Дата: Пятница, 17.01.2014, 16:00 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 47


Репутация:

3

±

Замечаний:
0% ±


Excel 2010

Возможно есть решение, где СУММПРОИЗВ вводится, как обычная формула и там условия через * вводилось? Синтаксис подходящий найти не могу.

Или я, возможно, ошибаюсь.


—————-
I can do it!
—————-

 

Ответить

dadmarat

Дата: Пятница, 17.01.2014, 17:00 |
Сообщение № 4

Группа: Пользователи

Ранг: Новичок

Сообщений: 47


Репутация:

3

±

Замечаний:
0% ±


Excel 2010

Нашел вот такой вот синтаксис :

Код

=СУММПРОИЗВ((условие1)*(условие2)*(что_суммировать))

Как я понимаю, он не применим в данных условиях. Она суммирует диапазон по нескольким условиям, а не суммирует произведение по условиям.


—————-
I can do it!
—————-

 

Ответить

Pelena

Дата: Пятница, 17.01.2014, 17:37 |
Сообщение № 5

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Вариант с СУММПРОИЗВ() не массивная

Код

=СУММПРОИЗВ(((B2:B18<>0)*A2:A18)/((B2:B18=0)+B2:B18))


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

AndreTM

Дата: Пятница, 17.01.2014, 17:46 |
Сообщение № 6

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

Пока собирался ответить — Лена опередила :)
Только одни скобки — лишние:

Код

=СУММПРОИЗВ((B1:B9<>0)*A1:A9/((B1:B9=0)+B1:B9))

Как работает:
+ в условиях это аналог ИЛИ (как * — аналог И).
Таким образом:
— Чтобы в знаменателе было либо само значение из второго массива, либо не ноль (чтобы не было ошибки деления). Мы сравниваем элемент с нулём и получаем массив, где на «ненулевых» местах стоят нули, а на «нулевых» — единички. Если теперь сложить этот массив с исходным = то получим массив, где нули заменены на единички.
— Чтобы формула не учитывала те значения из второго массива, где мы заменили нули на единички — мы домножаем числитель на ноль для этих значений. Вернее, мы домножаем числитель на единичку для тех значений, которые нужно учитывать, и на ноль — для тех, которые не нужно. В результате в числителе мы имеем массив из значений, которые нужно поделить, и нулей.
— После этого мы либо делим число на число, либо ноль на единичку :) , а затем складываем результаты…


Skype: andre.tm.007
Donate: Qiwi: 9517375010

Сообщение отредактировал AndreTMПятница, 17.01.2014, 17:55

 

Ответить

dadmarat

Дата: Пятница, 17.01.2014, 17:47 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 47


Репутация:

3

±

Замечаний:
0% ±


Excel 2010

Pelena, AndreTM, спасибо. Правда не совсем понятно, как работает. Если можете напишите, пожалуйста, синтаксис/алгоритм работы данной формулы.


—————-
I can do it!
—————-

Сообщение отредактировал dadmaratПятница, 17.01.2014, 17:48

 

Ответить

Pelena

Дата: Пятница, 17.01.2014, 17:57 |
Сообщение № 8

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Если элемент второго массива не равен нулю, B2:B18<>0 даёт ИСТИНА, т.е. 1, а B2:B18=0 даёт ЛОЖЬ, т.е. 0. В итоге эти значения ни на что не влияют. Если же элемент второго массива равен нулю, то все наоборот, в итоге получаем 0/1, т.е. 0

Чтобы посмотреть работу формулы по частям, можно выделить часть формулы в строке формул и нажать F9. Чтобы вернуть прежний вид формулы ESC


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

dadmarat

Дата: Пятница, 17.01.2014, 18:03 |
Сообщение № 9

Группа: Пользователи

Ранг: Новичок

Сообщений: 47


Репутация:

3

±

Замечаний:
0% ±


Excel 2010

+ в условиях это аналог ИЛИ (как * — аналог И).

Именно, то что я хотел услышать.

Чтобы посмотреть работу формулы по частям, можно выделить часть формулы в строке формул и нажать F9. Чтобы вернуть прежний вид формулы ESC

Так же этого не знал.

Спасибо, за участие. Много что стало на свои места.


—————-
I can do it!
—————-

 

Ответить

 

mbobkova83

Пользователь

Сообщений: 34
Регистрация: 01.01.1970

есть большой список, например, продажи в 2010 и 2011 гдах по товарам в рублях:  
           2010         2011  
Яблоки     1000000    11000000  
груши      2000000    22000000  
и т.д.  
необходимо привести эти данные к млн.руб, то есть одновременно всю таблицу поделить на  1 000 000    
Дополнение — в каждой ячейке формала (то есть мы видим яблоки в 2010году — 1000000, а на самом деле это формула — 100 руб*10000кг)  

  Можно ли сделать это бысто или придется в каждой формуле дописывать хвост /1000000 в ручную???

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

1. Меню Правка-Найти/Заменить, область поиска — формулы.  
2. Заменить в самой формуле и протянуть?

 

GIG_ant

Пользователь

Сообщений: 3102
Регистрация: 24.12.2012

файл-пример не помешал бы.

 

mbobkova83

Пользователь

Сообщений: 34
Регистрация: 01.01.1970

{quote}{login=vikttur}{date=31.01.2011 10:55}{thema=}{post}1. Меню Правка-Найти/Заменить, область поиска — формулы.  
2. Заменить в самой формуле и протянуть?{/post}{/quote}  

  1-не подходит, так как каждый раз формула разная.  

  прикрепила частичку файла в приложении

 

mbobkova83

Пользователь

Сообщений: 34
Регистрация: 01.01.1970

{quote}{login=GIG_ant}{date=31.01.2011 10:56}{thema=}{post}файл-пример не помешал бы.{/post}{/quote}  
вот — в приложении

 

GIG_ant

Пользователь

Сообщений: 3102
Регистрация: 24.12.2012

Вот что пришло на ум:  

  Выделяете диапазон с ячейками где нужно поделить на 1 000 000 и выполняете макрос:  

  Sub Макрос1()  
Dim f As String  
Dim r As Range  

  For Each r In Selection.Cells  
f = r.FormulaR1C1  
r.FormulaR1C1 = f & «/1000000»  
Next r  

  End Sub  

  Это что бы в ручную не прописывать.

 

GIG_ant

Пользователь

Сообщений: 3102
Регистрация: 24.12.2012

при условии что в выделеных ячейках у вас именно формулы, а не значения

 
 

Не меняя данные: установите формат ячеек «# ##0,  » (два пробела в конце), если нужно целое число миллионов, или  
«# ##0,##  » — если нужны миллионы с долями.

 

mbobkova83

Пользователь

Сообщений: 34
Регистрация: 01.01.1970

{quote}{login=GIG_ant}{date=31.01.2011 11:28}{thema=}{post}при условии что в выделеных ячейках у вас именно формулы, а не значения{/post}{/quote}  

  СПАСИБО!!!!  
все работает! получилость!  
УРА

 

mbobkova83

Пользователь

Сообщений: 34
Регистрация: 01.01.1970

{quote}{login=Казанский}{date=31.01.2011 11:40}{thema=}{post}Не меняя данные: установите формат ячеек «# ##0,  » (два пробела в конце), если нужно целое число миллионов, или  
«# ##0,##  » — если нужны миллионы с долями.{/post}{/quote}  

  ух ты!  
прикольно! и как быстро! и просто!  
спасибо!

 

{quote}{login=GIG_ant}{date=31.01.2011 11:25}{thema=}{post}Вот что пришло на ум:  

  Выделяете диапазон с ячейками где нужно поделить на 1 000 000 и выполняете макрос:  

  Sub Макрос1()  
Dim f As String  
Dim r As Range  

  For Each r In Selection.Cells  
f = r.FormulaR1C1  
r.FormulaR1C1 = f & «/1000000»  
Next r  

  End Sub  

  Это что бы в ручную не прописывать.{/post}{/quote}  

  абсолютно эквивалентно специальная вставка/разделить

 

mbobkova83

Пользователь

Сообщений: 34
Регистрация: 01.01.1970

{quote}{login=dl}{date=31.01.2011 11:52}{thema=Re: }{post}{quote}{login=GIG_ant}{date=31.01.2011 11:25}{thema=}{post}Вот что пришло на ум:  

  Выделяете диапазон с ячейками где нужно поделить на 1 000 000 и выполняете макрос:  

  Sub Макрос1()  
Dim f As String  
Dim r As Range  

  For Each r In Selection.Cells  
f = r.FormulaR1C1  
r.FormulaR1C1 = f & «/1000000»  
Next r  

  End Sub  

  Это что бы в ручную не прописывать.{/post}{/quote}  

  абсолютно эквивалентно специальная вставка/разделить{/post}{/quote}  

  Уважаемый DI,  
а не могли бы поподробнее объяснить что надо выделить и куда приделать специальную вставку!  
а то я что то не догнала!  
извините за тугодумство и спасибо заранее.

 

GIG_ant

Пользователь

Сообщений: 3102
Регистрация: 24.12.2012

RE: dl «абсолютно эквивалентно специальная вставка/разделить»  

  Позвольте не согласться!    
Специальная вставка/разделить — делит значения,  
а мой махонький макрос — добавляет в формулу деление.  
По моему это разные операции.

 

Hugo

Пользователь

Сообщений: 23252
Регистрация: 22.12.2012

Похоже, что все так думали, раз сразу это не предложили :)  
И я тоже.  
А оно и впрямь в конец формулы дописывает /n — я проверил.

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

{quote}{login=Hugo}{date=31.01.2011 12:13}{thema=}{post}Похоже, что все так думали, раз сразу это не предложили :)  
И я тоже. А оно и впрямь в конец формулы дописывает /n — я проверил.{/post}{/quote}  
И точно! Не знал. Считал, что спецвставка применима только к значениям. Спасибо!

 

GIG_ant

Пользователь

Сообщений: 3102
Регистрация: 24.12.2012

{quote}{login=GIG_ant}{date=31.01.2011 12:10}{thema=}{post}RE: dl «абсолютно эквивалентно специальная вставка/разделить»  

  Позвольте не согласться!    
Специальная вставка/разделить — делит значения,  
а мой махонький макрос — добавляет в формулу деление.  
По моему это разные операции.{/post}{/quote}  

  Беру свои слова обратно.  
dl — вы правы.

 

{quote}{login=mbobkova83}{date=31.01.2011 12:02}{thema=Re: Re: }{post}  
Уважаемый DI,  
а не могли бы поподробнее объяснить что надо выделить и куда приделать специальную вставку!  
а то я что то не догнала!  
извините за тугодумство и спасибо заранее.{/post}{/quote}  

  вводите в любую ячейку =10^6  
копируете ячейку,  
выделяете требуемый диапазон (который поделить на миллион)  
по правой клавиши мыши из контекстного меню  
специальная вставка  
в появившемся окошке ставите галочку () разделить

 

Hugo

Пользователь

Сообщений: 23252
Регистрация: 22.12.2012

Пользовательский формат красивее — я уж тоже синтаксис искал, но не нашёл. В приёмах на тысячу только есть, под миллион переделать не додумал :)  
Теперь сохранил у себя :)  
Но это конечно от задачи зависит, что нужно считать, а что распечатывать — рубли или миллионы рублей.

 

mbobkova83

Пользователь

Сообщений: 34
Регистрация: 01.01.1970

#20

31.01.2011 13:03:00

{quote}{login=dl}{date=31.01.2011 12:49}{thema=Re: Re: Re: }{post}{quote}{login=mbobkova83}{date=31.01.2011 12:02}{thema=Re: Re: }{post}  
Уважаемый DI,  
а не могли бы поподробнее объяснить что надо выделить и куда приделать специальную вставку!  
а то я что то не догнала!  
извините за тугодумство и спасибо заранее.{/post}{/quote}  

  вводите в любую ячейку =10^6  
копируете ячейку,  
выделяете требуемый диапазон (который поделить на миллион)  
по правой клавиши мыши из контекстного меню  
специальная вставка  
в появившемся окошке ставите галочку () разделить{/post}{/quote}  

  Ух ты! КРУТО!  
и просто!  

  спасибо за этот способ!

Массив функций Excel позволяет решать сложные задачи в автоматическом режиме одновременно. Те, которые выполнить посредством обычных функций невозможно.

Фактически это группа функций, которые одновременно обрабатывают группу данных и сразу выдают результат. Рассмотрим подробно работу с массивами функций в Excel.

Виды массивов функций Excel

Массив – данные, объединенные в группу. В данном случае группой является массив функций в Excel. Любую таблицу, которую мы составим и заполним в Excel, можно назвать массивом. Пример:

Пример массивов.

В зависимости от расположения элементов различают массивы:

  • одномерные (данные находятся в ОДНОЙ строке или в ОДНОМ столбце);
  • двумерные (НЕСКОЛЬКО строк и столбцов, матрица).

Одномерные массивы бывают:

  • горизонтальными (данные – в строке);
  • вертикальными (данные – в столбце).

Примечание. Двумерные массивы Excel могут занимать сразу несколько листов (это сотни и тысячи данных).

Примеры двумерных массивов.

Формула массива – позволяет обработать данные из этого массива. Она может возвращать одно значение либо давать в результате массив (набор) значений.

С помощью формул массива реально:

  • подсчитать количество знаков в определенном диапазоне;
  • суммировать только те числа, которые соответствуют заданному условию;
  • суммировать все n-ные значения в определенном диапазоне.

Когда мы используем формулы массива, Excel видит диапазон значений не как отдельные ячейки, а как единый блок данных.



Синтаксис формулы массива

Используем формулу массива с диапазоном ячеек и с отдельной ячейкой. В первом случае найдем промежуточные итоги для столбца «К оплате». Во втором – итоговую сумму коммунальных платежей.

  1. Выделяем диапазон Е3:Е8.
  2. В строку формул вводим следующую формулу: =C3:C8*D3:D8.
  3. Формула промежуточных итогов.

  4. Нажимаем одновременно клавиши: Ctrl + Shift + Enter. Промежуточные итоги посчитаны:
  5. Результат вычисления промежуточных итогов.

Формула после нажатия Ctrl + Shift + Enter оказалась в фигурных скобках. Она подставилась автоматически в каждую ячейку выделенного диапазона.

Если попытаться изменить данные в какой-либо ячейке столбца «К оплате» — ничего не выйдет. Формула в массиве защищает значения диапазона от изменений. На экране появляется соответствующая запись:

Ошибка.

Рассмотрим другие примеры использования функций массива Excel – рассчитаем итоговую сумму коммунальных платежей с помощью одной формулы.

  1. Выделяем ячейку Е9 (напротив «Итого»).
  2. Вводим формулу вида: =СУММ(C3:C8*D3:D8).
  3. Нажимаем сочетание клавиш: Ctrl + Shift + Enter. Результат:
  4. Итог одной формулой.

Формула массива в данном случае заменила две простые формулы. Это сокращенный вариант, вместивший всю необходимую информацию для решения сложной задачи.

Аргументы для функции – одномерные массивы. Формула просматривает каждый из них по отдельности, совершает заданные пользователем операции и генерирует единый результат.

Рассмотрим ее синтаксис:

Синтаксис массива функций.

Функции работы с массивами Excel

Предположим, в следующем месяце планируется увеличение коммунальных платежей на 10%. Если мы введем обычную формулу для итога =СУММ((C3:C8*D3:D8)+10%), то вряд ли получим ожидаемый результат. Нам нужно, чтобы каждый аргумент увеличился на 10%. Чтобы программа поняла это, мы используем функцию как массив.

Сложный массив.

  1. Посмотрим, как работает оператор «И» в функции массива. Нам нужно узнать, сколько мы платим за воду, горячую и холодную. Функция: . Итого – 346 руб.
  2. Выборочный итог.

  3. Функция «Сортировки» в формуле массива. Отсортируем суммы к оплате в порядке возрастания. Для списка отсортированных данных создадим диапазон. Выделим его. В строке формул вводим . Жмем сочетание Ctrl + Shift + Enter.
  4. Сортировка итогов.

  5. Транспонированная матрица. Специальная функция Excel для работы с двумерными массивами. Функция «ТРАНСП» возвращает сразу несколько значений. Преобразует горизонтальную матрицу в вертикальную и наоборот. Выделяем диапазон ячеек, где количество строк = числу столбцов в таблице с исходными данными. А количество столбцов = числу строк в исходном массиве. Вводим формулу: . Получается «перевернутый» массив данных.
  6. Перевернутый массив данных.

  7. Поиск среднего значения без учета нулей. Если мы воспользуемся стандартной функцией «СРЗНАЧ», то получим в результате «0». И это будет правильно. Поэтому вставляем в формулу дополнительное условие: . Получаем:
  8. Условие в массиве.

Скачать примеры массива функций

Распространенная ошибка при работе с массивами функций – НЕ нажатие кодового сочетания «Ctrl + Shift + Enter» (никогда не забывайте эту комбинацию клавиш). Это самое главное, что нужно запомнить при обработке больших объемов информации. Правильно введенная функция выполняет сложнейшие задачи.

Содержание

  • Операции с массивами
    • Создание формулы
    • Изменение содержимого массива
  • Функции массивов
    • Оператор СУММ
    • Оператор ТРАНСП
    • Оператор МОБР
  • Вопросы и ответы

Массив в программе Microsoft Excel

Во время работы с таблицами Excel довольно часто приходится оперировать с целыми диапазонами данных. При этом некоторые задачи подразумевают, что вся группа ячеек должна быть преобразована буквально в один клик. В Экселе имеются инструменты, которые позволяют проводить подобные операции. Давайте выясним, как можно управлять массивами данных в этой программе.

Операции с массивами

Массив – это группа данных, которая расположена на листе в смежных ячейках. По большому счету, любую таблицу можно считать массивом, но не каждый из них является таблицей, так как он может являться просто диапазоном. По своей сущности такие области могут быть одномерными или двумерными (матрицы). В первом случае все данные располагаются только в одном столбце или строке.

Одномерный массив в Microsoft Excel

Во втором — в нескольких одновременно.

Двумерный массив в Microsoft Excel

Кроме того, среди одномерных массивов выделяют горизонтальный и вертикальный тип, в зависимости от того, что они собой представляют – строку или столбец.

Горизонатльные и вертикальные одномерные массивы в Microsoft Excel

Нужно отметить, что алгоритм работы с подобными диапазонами несколько отличается от более привычных операций с одиночными ячейками, хотя и общего между ними тоже много. Давайте рассмотрим нюансы подобных операций.

Создание формулы

Формула массива – это выражение, с помощью которого производится обработка диапазона с целью получения итогового результата, отображаемого цельным массивом или в одной ячейке. Например, для того, чтобы умножить один диапазон на второй применяют формулу по следующему шаблону:

=адрес_массива1*адрес_массива2

Над диапазонами данных можно также выполнять операции сложения, вычитания, деления и другие арифметические действия.

Координаты массива имеют вид адресов первой её ячейки и последней, разделенные двоеточием. Если диапазон двумерный, то первая и последняя ячейки расположены по диагонали друг от друга. Например, адрес одномерного массива может быть таким: A2:A7.

Адрес одномерного массива в Microsoft Excel

А пример адреса двумерного диапазона выглядит следующим образом: A2:D7.

Lumpics.ru

Адрес двумерного массива в Microsoft Excel

  1. Чтобы рассчитать подобную формулу, нужно выделить на листе область, в которую будет выводиться результат, и ввести в строку формул выражение для вычисления.
  2. Введение формулы массива в Microsoft Excel

  3. После ввода следует нажать не на кнопку Enter, как обычно, а набрать комбинацию клавиш Ctrl+Shift+Enter. После этого выражение в строке формул будет автоматически взято в фигурные скобки, а ячейки на листе будут заполнены данными, полученными в результате вычисления, в пределах всего выделенного диапазона.

Результат вычислений формулы массива в Microsoft Excel

Изменение содержимого массива

Если вы в дальнейшем попытаетесь удалить содержимое или изменить любую из ячеек, которая расположена в диапазоне, куда выводится результат, то ваше действие окончится неудачей. Также ничего не выйдет, если вы сделаете попытку отредактировать данные в строке функций. При этом появится информационное сообщение, в котором будет говориться, что нельзя изменять часть массива. Данное сообщение появится даже в том случае, если у вас не было цели производить какие-либо изменения, а вы просто случайно дважды щелкнули мышью по ячейке диапазона.

Нельзя изменять часть массива в Microsoft Excel

Если вы закроете, это сообщение, нажав на кнопку «OK», а потом попытаетесь переместить курсор с помощью мышки, или просто нажмете кнопку «Enter», то информационное сообщение появится опять. Не получится также закрыть окно программы или сохранить документ. Все время будет появляться это назойливое сообщение, которое блокирует любые действия. А выход из ситуации есть и он довольно прост

  1. Закройте информационное окно, нажав на кнопку «OK».
  2. Закрытие информационного окна в Microsoft Excel

  3. Затем нажмете на кнопку «Отмена», которая расположена в группе значков слева от строки формул, и представляет собой пиктограмму в виде крестика. Также можно нажать на кнопку Esc на клавиатуре. После любой из этих операций произойдет отмена действия, и вы сможете работать с листом так, как и прежде.

Отмена действия в Microsoft Excel

Но что делать, если действительно нужно удалить или изменить формулу массива? В этом случае следует выполнить нижеуказанные действия.

  1. Для изменения формулы выделите курсором, зажав левую кнопку мыши, весь диапазон на листе, куда выводится результат. Это очень важно, так как если вы выделите только одну ячейку массива, то ничего не получится. Затем в строке формул проведите необходимую корректировку.
  2. Внесение изменений в формулу массива в Microsoft Excel

  3. После того, как изменения внесены, набираем комбинацию Ctrl+Shift+Esc. Формула будет изменена.

Изменения в формулу массива внесены в Microsoft Excel

  1. Для удаления формулы массива нужно точно так же, как и в предыдущем случае, выделить курсором весь диапазон ячеек, в котором она находится. Затем нажать на кнопку Delete на клавиатуре.
  2. Удаление формулы массива в Microsoft Excel

  3. После этого формула будет удалена со всей области. Теперь в неё можно будет вводить любые данные.

Формула массива удалена в Microsoft Excel

Функции массивов

Наиболее удобно в качестве формул использовать уже готовые встроенные функции Excel. Доступ к ним можно получить через Мастер функций, нажав кнопку «Вставить функцию» слева от строки формул. Или же во вкладке «Формулы» на ленте можно выбрать одну из категорий, в которой находится интересующий вас оператор.

Переход к функциям в Microsoft Excel

После того, как пользователь в Мастере функций или на ленте инструментов выберет наименование конкретного оператора, откроется окно аргументов функции, куда можно вводить исходные данные для расчета.

Правила ввода и редактирования функций, если они выводят результат сразу в несколько ячеек, те же самые, что и для обычных формул массива. То есть, после ввода значения обязательно нужно установить курсор в строку формул и набрать сочетание клавиш Ctrl+Shift+Enter.

Урок: Мастер функций в Excel

Оператор СУММ

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

=СУММ(массив1;массив2;…)

Функция СУММ в Microsoft Excel

Данный оператор выводит результат в одну ячейку, а поэтому для того, чтобы произвести подсчет, после внесения вводных данных достаточно нажать кнопку «OK» в окне аргументов функции или клавишу Enter, если ввод выполнялся вручную.

Урок: Как посчитать сумму в Экселе

Оператор ТРАНСП

Функция ТРАНСП является типичным оператором массивов. Она позволяет переворачивать таблицы или матрицы, то есть, менять строки и столбцы местами. При этом она использует исключительно вывод результата в диапазон ячеек, поэтому после введения данного оператора обязательно нужно применять сочетание Ctrl+Shift+Enter. Также нужно отметить, что перед введением самого выражения нужно выделить на листе область, у которой количество ячеек в столбце будет равно числу ячеек в строке исходной таблицы (матрицы) и, наоборот, количество ячеек в строке должно равняться их числу в столбце исходника. Синтаксис оператора следующий:

=ТРАНСП(массив)

Функция ТРАНСП в Microsoft Excel

Урок: Транспонирование матриц в Excel

Урок: Как перевернуть таблицу в Экселе

Оператор МОБР

Функция МОБР позволяет производить вычисление обратной матрицы. Все правила ввода значений у этого оператора точно такие же, как и у предыдущего. Но важно знать, что вычисление обратной матрицы возможно исключительно в том случае, если она содержит равное количество строк и столбцов, и если её определитель не равен нулю. Если применять данную функцию к области с разным количеством строк и столбцов, то вместо корректного результата на выходе отобразится значение «#ЗНАЧ!». Синтаксис у этой формулы такой:

=МОБР(массив)

Функция МОБР в Microsoft Excel

Для того чтобы рассчитать определитель, применяется функция со следующим синтаксисом:

=МОПРЕД(массив)

Функция МОПРЕД в Microsoft Excel

Урок: Обратная матрица в Excel

Как видим, операции с диапазонами помогают сэкономить время при вычислениях, а также свободное пространство листа, ведь не нужно дополнительно суммировать данные, которые объединены в диапазон, для последующей работы с ними. Все это выполняется «на лету». А для преобразования таблиц и матриц только функции массивов и подходят, так как обычные формулы не в силах справиться с подобными задачами. Но в то же время нужно учесть, что к подобным выражениям применяются дополнительные правила ввода и редактирования.

Разбиение двумерного массива на несколько массивов, группируя строки по заданному столбцу

  • Массивы
  • Сортировка
  • Разное

Функция принимает в качестве параметра arr двумерный массив, и разбивает его на несколько массивов, группируя строки по значению столбца SplitColumn&

Сколько есть уникальных значений в столбце SplitColumn&, удовлетворяющих маске Mask$, — столько двумерных массивов будет возвращено функцией в виде коллекции

Например, если есть исходный массив размерами 100*5, в котором во втором столбце есть 3 разных значения,
то функция SplitArray(arr, 3) вернёт коллекцию из 3 элементов — массивов размерами 25*5, 7*5, 68*5

Чтобы откинуть строки с пустыми значениями, можно применить маску «?*»
Можно взять только строки со сзначениями, начинающимися с цифры, содержащими текст «txt», — в этом случае, в параметр Mask$ надо передать строку «#*txt*»

Пример использования функции разделения массивов на несколько:

Sub test_SplitArray()
    ' считываем массив из 8 столбцов с активного листа
    arr = Range(Range("a2"), Range("a" & Rows.Count).End(xlUp)).Resize(, 8).Value
 
    ' разбиваем массив на несколько, по уникальным непустым значениям из первого столбца
    Dim coll As Collection: Set coll = SplitArray(arr, 1, "?*")
 
    ' перебираем отдельные массивы, выводим результаты
    For Each sarr In coll
        Debug.Print "Количество строк: " & UBound(sarr), "значение: """ & sarr(1, 1) & """"
    Next
End Sub

Код функции SplitArray:

Function SplitArray(ByRef arr, ByVal SplitColumn&, Optional ByVal Mask$ = "*") As Collection
    On Error Resume Next: Err.Clear
    ' Функция принимает в качестве параметра arr двумерный массив,
    ' и разбивает его на несколько массивов, группируя строки по значению столбца SplitColumn&
    ' Сколько есть уникальных значений в столбце SplitColumn&, удовлетворяющих маске Mask$,
    ' - столько двумерных массивов будет возвращено функцией в виде коллекции
    Dim UB&: UB& = UBound(arr, 2)
    If Err <> 0 Or Not IsArray(arr) Then MsgBox "Исходные данные не являются двумерным массивом!", vbCritical, _
       "Ошибка в функции SplitArray": Exit Function
    If UB& < SplitColumn& Then MsgBox "В исходном массиве нет столбца с номером «" & SplitColumn& & "»!", vbCritical, _
       "Ошибка в функции SplitArray": Exit Function
 
    Dim coll As New Collection, UniqueValues As Object, txt$, i&, j&, uv, ind&, sarr
    Set SplitArray = New Collection
    Set UniqueValues = CreateObject("scripting.dictionary")
 
    ' ищем уникальные значения, подсчитывая количество строк по каждому уникальному значению
    For i = LBound(arr) To UBound(arr)
        txt$ = Trim$(arr(i, SplitColumn&))
        If txt$ Like Mask$ Then UniqueValues.Item(txt$) = Val(UniqueValues.Item(txt$)) + 1
    Next i
    For Each uv In UniqueValues.Keys        ' перебираем все найденные уникальные значения
        ind& = 0: ReDim sarr(1 To UniqueValues.Item(uv), LBound(arr, 2) To UBound(arr, 2))
        For i = LBound(arr) To UBound(arr)
            If Trim$(arr(i, SplitColumn&)) = uv Then
                ind& = ind& + 1        ' переносим очередную подходящую строку в подмассив
                For j = LBound(arr, 2) To UBound(arr, 2): sarr(ind&, j) = arr(i, j): Next j
            End If
        Next i
        SplitArray.Add sarr
    Next
End Function
  • 13739 просмотров

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.

Понравилась статья? Поделить с друзьями:
  • Как в excel разделить лист при печати
  • Как в excel разделить лист на несколько листов
  • Как в excel разделить значение одного столбца на два столбца
  • Как в excel разделить до определенного символа
  • Как в excel разделить данные по пробелу