Разделить два массива и просуммировать по условию |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
mbobkova83 Пользователь Сообщений: 34 |
есть большой список, например, продажи в 2010 и 2011 гдах по товарам в рублях: Можно ли сделать это бысто или придется в каждой формуле дописывать хвост /1000000 в ручную??? |
vikttur Пользователь Сообщений: 47199 |
1. Меню Правка-Найти/Заменить, область поиска — формулы. |
GIG_ant Пользователь Сообщений: 3102 |
файл-пример не помешал бы. |
mbobkova83 Пользователь Сообщений: 34 |
{quote}{login=vikttur}{date=31.01.2011 10:55}{thema=}{post}1. Меню Правка-Найти/Заменить, область поиска — формулы. 1-не подходит, так как каждый раз формула разная. прикрепила частичку файла в приложении |
mbobkova83 Пользователь Сообщений: 34 |
{quote}{login=GIG_ant}{date=31.01.2011 10:56}{thema=}{post}файл-пример не помешал бы.{/post}{/quote} |
GIG_ant Пользователь Сообщений: 3102 |
Вот что пришло на ум: Выделяете диапазон с ячейками где нужно поделить на 1 000 000 и выполняете макрос: Sub Макрос1() For Each r In Selection.Cells End Sub Это что бы в ручную не прописывать. |
GIG_ant Пользователь Сообщений: 3102 |
при условии что в выделеных ячейках у вас именно формулы, а не значения |
Не меняя данные: установите формат ячеек «# ##0, » (два пробела в конце), если нужно целое число миллионов, или |
|
mbobkova83 Пользователь Сообщений: 34 |
{quote}{login=GIG_ant}{date=31.01.2011 11:28}{thema=}{post}при условии что в выделеных ячейках у вас именно формулы, а не значения{/post}{/quote} СПАСИБО!!!! |
mbobkova83 Пользователь Сообщений: 34 |
{quote}{login=Казанский}{date=31.01.2011 11:40}{thema=}{post}Не меняя данные: установите формат ячеек «# ##0, » (два пробела в конце), если нужно целое число миллионов, или ух ты! |
{quote}{login=GIG_ant}{date=31.01.2011 11:25}{thema=}{post}Вот что пришло на ум: Выделяете диапазон с ячейками где нужно поделить на 1 000 000 и выполняете макрос: Sub Макрос1() For Each r In Selection.Cells End Sub Это что бы в ручную не прописывать.{/post}{/quote} абсолютно эквивалентно специальная вставка/разделить |
|
mbobkova83 Пользователь Сообщений: 34 |
{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() For Each r In Selection.Cells End Sub Это что бы в ручную не прописывать.{/post}{/quote} абсолютно эквивалентно специальная вставка/разделить{/post}{/quote} Уважаемый DI, |
GIG_ant Пользователь Сообщений: 3102 |
RE: dl «абсолютно эквивалентно специальная вставка/разделить» Позвольте не согласться! |
Hugo Пользователь Сообщений: 23252 |
Похоже, что все так думали, раз сразу это не предложили |
vikttur Пользователь Сообщений: 47199 |
{quote}{login=Hugo}{date=31.01.2011 12:13}{thema=}{post}Похоже, что все так думали, раз сразу это не предложили |
GIG_ant Пользователь Сообщений: 3102 |
{quote}{login=GIG_ant}{date=31.01.2011 12:10}{thema=}{post}RE: dl «абсолютно эквивалентно специальная вставка/разделить» Позвольте не согласться! Беру свои слова обратно. |
{quote}{login=mbobkova83}{date=31.01.2011 12:02}{thema=Re: Re: }{post} вводите в любую ячейку =10^6 |
|
Hugo Пользователь Сообщений: 23252 |
Пользовательский формат красивее — я уж тоже синтаксис искал, но не нашёл. В приёмах на тысячу только есть, под миллион переделать не додумал |
mbobkova83 Пользователь Сообщений: 34 |
#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} вводите в любую ячейку =10^6 Ух ты! КРУТО! спасибо за этот способ! |
Массив функций Excel позволяет решать сложные задачи в автоматическом режиме одновременно. Те, которые выполнить посредством обычных функций невозможно.
Фактически это группа функций, которые одновременно обрабатывают группу данных и сразу выдают результат. Рассмотрим подробно работу с массивами функций в Excel.
Виды массивов функций Excel
Массив – данные, объединенные в группу. В данном случае группой является массив функций в Excel. Любую таблицу, которую мы составим и заполним в Excel, можно назвать массивом. Пример:
В зависимости от расположения элементов различают массивы:
- одномерные (данные находятся в ОДНОЙ строке или в ОДНОМ столбце);
- двумерные (НЕСКОЛЬКО строк и столбцов, матрица).
Одномерные массивы бывают:
- горизонтальными (данные – в строке);
- вертикальными (данные – в столбце).
Примечание. Двумерные массивы Excel могут занимать сразу несколько листов (это сотни и тысячи данных).
Формула массива – позволяет обработать данные из этого массива. Она может возвращать одно значение либо давать в результате массив (набор) значений.
С помощью формул массива реально:
- подсчитать количество знаков в определенном диапазоне;
- суммировать только те числа, которые соответствуют заданному условию;
- суммировать все n-ные значения в определенном диапазоне.
Когда мы используем формулы массива, Excel видит диапазон значений не как отдельные ячейки, а как единый блок данных.
Синтаксис формулы массива
Используем формулу массива с диапазоном ячеек и с отдельной ячейкой. В первом случае найдем промежуточные итоги для столбца «К оплате». Во втором – итоговую сумму коммунальных платежей.
- Выделяем диапазон Е3:Е8.
- В строку формул вводим следующую формулу: =C3:C8*D3:D8.
- Нажимаем одновременно клавиши: Ctrl + Shift + Enter. Промежуточные итоги посчитаны:
Формула после нажатия Ctrl + Shift + Enter оказалась в фигурных скобках. Она подставилась автоматически в каждую ячейку выделенного диапазона.
Если попытаться изменить данные в какой-либо ячейке столбца «К оплате» — ничего не выйдет. Формула в массиве защищает значения диапазона от изменений. На экране появляется соответствующая запись:
Рассмотрим другие примеры использования функций массива Excel – рассчитаем итоговую сумму коммунальных платежей с помощью одной формулы.
- Выделяем ячейку Е9 (напротив «Итого»).
- Вводим формулу вида: =СУММ(C3:C8*D3:D8).
- Нажимаем сочетание клавиш: Ctrl + Shift + Enter. Результат:
Формула массива в данном случае заменила две простые формулы. Это сокращенный вариант, вместивший всю необходимую информацию для решения сложной задачи.
Аргументы для функции – одномерные массивы. Формула просматривает каждый из них по отдельности, совершает заданные пользователем операции и генерирует единый результат.
Рассмотрим ее синтаксис:
Функции работы с массивами Excel
Предположим, в следующем месяце планируется увеличение коммунальных платежей на 10%. Если мы введем обычную формулу для итога =СУММ((C3:C8*D3:D8)+10%), то вряд ли получим ожидаемый результат. Нам нужно, чтобы каждый аргумент увеличился на 10%. Чтобы программа поняла это, мы используем функцию как массив.
- Посмотрим, как работает оператор «И» в функции массива. Нам нужно узнать, сколько мы платим за воду, горячую и холодную. Функция: . Итого – 346 руб.
- Функция «Сортировки» в формуле массива. Отсортируем суммы к оплате в порядке возрастания. Для списка отсортированных данных создадим диапазон. Выделим его. В строке формул вводим . Жмем сочетание Ctrl + Shift + Enter.
- Транспонированная матрица. Специальная функция Excel для работы с двумерными массивами. Функция «ТРАНСП» возвращает сразу несколько значений. Преобразует горизонтальную матрицу в вертикальную и наоборот. Выделяем диапазон ячеек, где количество строк = числу столбцов в таблице с исходными данными. А количество столбцов = числу строк в исходном массиве. Вводим формулу: . Получается «перевернутый» массив данных.
- Поиск среднего значения без учета нулей. Если мы воспользуемся стандартной функцией «СРЗНАЧ», то получим в результате «0». И это будет правильно. Поэтому вставляем в формулу дополнительное условие: . Получаем:
Скачать примеры массива функций
Распространенная ошибка при работе с массивами функций – НЕ нажатие кодового сочетания «Ctrl + Shift + Enter» (никогда не забывайте эту комбинацию клавиш). Это самое главное, что нужно запомнить при обработке больших объемов информации. Правильно введенная функция выполняет сложнейшие задачи.
Содержание
- Операции с массивами
- Создание формулы
- Изменение содержимого массива
- Функции массивов
- Оператор СУММ
- Оператор ТРАНСП
- Оператор МОБР
- Вопросы и ответы
Во время работы с таблицами Excel довольно часто приходится оперировать с целыми диапазонами данных. При этом некоторые задачи подразумевают, что вся группа ячеек должна быть преобразована буквально в один клик. В Экселе имеются инструменты, которые позволяют проводить подобные операции. Давайте выясним, как можно управлять массивами данных в этой программе.
Операции с массивами
Массив – это группа данных, которая расположена на листе в смежных ячейках. По большому счету, любую таблицу можно считать массивом, но не каждый из них является таблицей, так как он может являться просто диапазоном. По своей сущности такие области могут быть одномерными или двумерными (матрицы). В первом случае все данные располагаются только в одном столбце или строке.
Во втором — в нескольких одновременно.
Кроме того, среди одномерных массивов выделяют горизонтальный и вертикальный тип, в зависимости от того, что они собой представляют – строку или столбец.
Нужно отметить, что алгоритм работы с подобными диапазонами несколько отличается от более привычных операций с одиночными ячейками, хотя и общего между ними тоже много. Давайте рассмотрим нюансы подобных операций.
Создание формулы
Формула массива – это выражение, с помощью которого производится обработка диапазона с целью получения итогового результата, отображаемого цельным массивом или в одной ячейке. Например, для того, чтобы умножить один диапазон на второй применяют формулу по следующему шаблону:
=адрес_массива1*адрес_массива2
Над диапазонами данных можно также выполнять операции сложения, вычитания, деления и другие арифметические действия.
Координаты массива имеют вид адресов первой её ячейки и последней, разделенные двоеточием. Если диапазон двумерный, то первая и последняя ячейки расположены по диагонали друг от друга. Например, адрес одномерного массива может быть таким: A2:A7.
А пример адреса двумерного диапазона выглядит следующим образом: A2:D7.
- Чтобы рассчитать подобную формулу, нужно выделить на листе область, в которую будет выводиться результат, и ввести в строку формул выражение для вычисления.
- После ввода следует нажать не на кнопку Enter, как обычно, а набрать комбинацию клавиш Ctrl+Shift+Enter. После этого выражение в строке формул будет автоматически взято в фигурные скобки, а ячейки на листе будут заполнены данными, полученными в результате вычисления, в пределах всего выделенного диапазона.
Изменение содержимого массива
Если вы в дальнейшем попытаетесь удалить содержимое или изменить любую из ячеек, которая расположена в диапазоне, куда выводится результат, то ваше действие окончится неудачей. Также ничего не выйдет, если вы сделаете попытку отредактировать данные в строке функций. При этом появится информационное сообщение, в котором будет говориться, что нельзя изменять часть массива. Данное сообщение появится даже в том случае, если у вас не было цели производить какие-либо изменения, а вы просто случайно дважды щелкнули мышью по ячейке диапазона.
Если вы закроете, это сообщение, нажав на кнопку «OK», а потом попытаетесь переместить курсор с помощью мышки, или просто нажмете кнопку «Enter», то информационное сообщение появится опять. Не получится также закрыть окно программы или сохранить документ. Все время будет появляться это назойливое сообщение, которое блокирует любые действия. А выход из ситуации есть и он довольно прост
- Закройте информационное окно, нажав на кнопку «OK».
- Затем нажмете на кнопку «Отмена», которая расположена в группе значков слева от строки формул, и представляет собой пиктограмму в виде крестика. Также можно нажать на кнопку Esc на клавиатуре. После любой из этих операций произойдет отмена действия, и вы сможете работать с листом так, как и прежде.
Но что делать, если действительно нужно удалить или изменить формулу массива? В этом случае следует выполнить нижеуказанные действия.
- Для изменения формулы выделите курсором, зажав левую кнопку мыши, весь диапазон на листе, куда выводится результат. Это очень важно, так как если вы выделите только одну ячейку массива, то ничего не получится. Затем в строке формул проведите необходимую корректировку.
- После того, как изменения внесены, набираем комбинацию Ctrl+Shift+Esc. Формула будет изменена.
- Для удаления формулы массива нужно точно так же, как и в предыдущем случае, выделить курсором весь диапазон ячеек, в котором она находится. Затем нажать на кнопку Delete на клавиатуре.
- После этого формула будет удалена со всей области. Теперь в неё можно будет вводить любые данные.
Функции массивов
Наиболее удобно в качестве формул использовать уже готовые встроенные функции Excel. Доступ к ним можно получить через Мастер функций, нажав кнопку «Вставить функцию» слева от строки формул. Или же во вкладке «Формулы» на ленте можно выбрать одну из категорий, в которой находится интересующий вас оператор.
После того, как пользователь в Мастере функций или на ленте инструментов выберет наименование конкретного оператора, откроется окно аргументов функции, куда можно вводить исходные данные для расчета.
Правила ввода и редактирования функций, если они выводят результат сразу в несколько ячеек, те же самые, что и для обычных формул массива. То есть, после ввода значения обязательно нужно установить курсор в строку формул и набрать сочетание клавиш Ctrl+Shift+Enter.
Урок: Мастер функций в Excel
Оператор СУММ
Одной из наиболее востребованных функций в Экселе является СУММ. Её можно применять, как для суммирования содержимого отдельных ячеек, так и для нахождения суммы целых массивов. Синтаксис этого оператора для массивов выглядит следующим образом:
=СУММ(массив1;массив2;…)
Данный оператор выводит результат в одну ячейку, а поэтому для того, чтобы произвести подсчет, после внесения вводных данных достаточно нажать кнопку «OK» в окне аргументов функции или клавишу Enter, если ввод выполнялся вручную.
Урок: Как посчитать сумму в Экселе
Оператор ТРАНСП
Функция ТРАНСП является типичным оператором массивов. Она позволяет переворачивать таблицы или матрицы, то есть, менять строки и столбцы местами. При этом она использует исключительно вывод результата в диапазон ячеек, поэтому после введения данного оператора обязательно нужно применять сочетание Ctrl+Shift+Enter. Также нужно отметить, что перед введением самого выражения нужно выделить на листе область, у которой количество ячеек в столбце будет равно числу ячеек в строке исходной таблицы (матрицы) и, наоборот, количество ячеек в строке должно равняться их числу в столбце исходника. Синтаксис оператора следующий:
=ТРАНСП(массив)
Урок: Транспонирование матриц в 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 просмотров
Не получается применить макрос? Не удаётся изменить код под свои нужды?
Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.