Копирование значений из диапазона ячеек в массив и обратно с помощью VBA Excel. Простейшие примеры обмена значениями между диапазоном и массивом.
Как известно, VBA обрабатывает информацию в массивах значительно быстрее, чем в ячейках рабочего листа Excel. Поэтому, при работе с большими объемами данных, удобнее использовать массивы, чем наблюдать во время выполнения кода за мерцанием изображения на экране или просто смотреть в неизменную картинку, если обновление экрана отключено (Application.ScreenUpdating = False). Здесь обмен значениями между массивом и диапазоном ячеек будет вполне уместен.
Копирование значений из диапазона ячеек в массив
Чтобы скопировать значения из диапазона ячеек в массив, необходимо объявить переменную универсального типа (As Variant) и присвоить ей значения диапазона ячеек с помощью оператора присваивания (=):
|
Dim a As Variant a = Range(«A1:C3») |
VBA Excel автоматически преобразует объявленную переменную в двумерный массив, соответствующий размерности диапазона ячеек, в нашем случае в массив — a(1 To 3, 1 To 3), и заполняет его значениями. Нумерация измерений массивов, созданных таким образом, начинается с единицы (1).
Можно, в этом случае, объявить сразу динамический массив, чтобы изначально указать, что эта переменная будет массивом. Так как свойством диапазона ячеек по умолчанию в VBA Excel является значение (Value), его можно в коде явно не указывать, но, при желании, можно и указать. Получится такая конструкция, аналогичная первой:
|
Dim a() As Variant a = Range(«A1:C3»).Value |
Стоит отметить, что для копирования значений из диапазона ячеек в массив можно использовать только обычную переменную или динамический массив универсального типа (Variant). VBA Excel автоматически преобразовывает их в двумерный массив. Если объявить двумерный массив с указанной заранее размерностью, использовать его не получится, будет сгенерирована ошибка с сообщением: Can’t assign to array (Нельзя назначать массив).
Копирование значений из массива в диапазон ячеек
Значения в диапазон ячеек добавляются из массива с помощью оператора присваивания (=):
|
Range(«A6:F15») = a ‘или Range(«A6:F15»).Value = a ‘где a — переменная двумерного массива |
Обратите внимание, что вставить значения в диапазон ячеек можно только из двумерного массива. Размерность такого массива может начинаться с нуля (0). Количество элементов в измерениях массива должно совпадать с количеством строк и столбцов в диапазоне ячеек. Если вам нужно вставить значения в одну строку или в один столбец, укажите размерность единственной строки или единственного столбца как (0) или (1 To 1), если вы хотите использовать нумерацию измерений своего массива с единицы. Например, для записи десяти значений из массива в одну строку можно объявить такой массив — massiv(9, 0), или в один столбец — massiv(0, 9).
Для вставки значений в диапазон ячеек из массива идеально подойдет массив, созданный для копирования в него значений из диапазона. В этом случае, данные с рабочего листа Excel переносятся в массив, обрабатываются и, после обработки, вставляются обратно в ту же или другую таблицу на том же или другом рабочем листе.
Обмен значениями между двумя диапазонами
Обмен значениями можно осуществить в VBA Excel не только между массивом и диапазоном, но и между двумя диапазонами одинаковой размерности:
|
Range(«B2:D6») = Range(«G7:I11»).Value |
У диапазона, являющегося источником значений, обязательно должно быть указано свойство Value.
Если диапазон ячеек, принимающий значения, по размеру меньше диапазона-источника, то он будет заполнен полностью:
|
Range(«B2:D6») = Range(«G5:L13»).Value |
Если принимающий диапазон ячеек по размеру больше передающего, то часть его будет заполнена значениями диапазона-источника, а остальные ячейки — значениями #Н/Д:
|
Range(«B2:D6») = Range(«G7:H9»).Value |
Простейшие примеры обмена значениями
Эти примеры составлены так, чтобы вам не пришлось совершать лишних действий, просто скопируйте их в свой модуль любой книги Excel с поддержкой макросов и запустите по очереди на выполнение.
Пример 1
Заполнение двумерного массива значениями и и их присвоение диапазону ячеек на рабочем листе Excel:
|
Sub Test1() Dim a(2, 2) As Variant a(0, 0) = «телепузик» a(0, 1) = «журналист» a(0, 2) = «ящерица» a(1, 0) = «короед» a(1, 1) = «утенок» a(1, 2) = «шмель» a(2, 0) = 200 a(2, 1) = 300 a(2, 2) = 400 Range(«A1:C3»).Value = a End Sub |
В данном случае переменная массива не обязательно должна быть универсального типа (As Variant), например, если бы в нее записывались только текстовые данные, ее можно было бы объявить как строковую (As String), и все бы работало.
Пример 2
Объявление обычной переменной универсального типа, присвоение ей значений из диапазона ячеек «A1:C3», записанных кодом первого примера, и вставка этих значений из полученного двумерного массива в диапазон «D10:F12»:
|
Sub Test2() Dim a As Variant a = Range(«A1:C3») Range(«D10:F12») = a End Sub |
Естественно, указанные диапазоны ячеек расположены на активном листе.
Пример 3
Допустим, на рабочем листе «Лист1» в ячейках «A1:A5» записано количество какого-то товара, а в ячейках «B1:B5» — его цена. Необходимо к этой информации добавить сумму каждого товара, умножив количество на цену, и перенести данные на «Лист2».
|
Sub Test3() Dim a As Variant, i As Long a = Лист1.Range(«A1:C5») For i = 1 To 5 a(i, 3) = a(i, 1) _ * a(i, 2) Next Лист2.Range(«A1:C5») = a End Sub |
Массив создан сразу с размерностью 5×3 с элементами под суммы. Даже если на первом листе в ячейках «C1:C5» есть какие-то значения, в массиве они будут перезаписаны результатами вычислений.
Копирование значений из массива в массив
Этот пример показывает, как в VBA Excel можно скопировать значения из одного массива в другой:
|
Sub Test4() Dim arr1, arr2 arr1 = Range(«G7:I11») arr2 = arr1 Range(«B2:D6») = arr2 End Sub |
Sub WrickMatrix()
Dim ArrMatr, ArrResult
Dim lRws As Long
Dim i As Long, j As Long, k As Long
ArrMatr = Sheet1.Range("A1:C4").Value ' данные матрицы в массив
' задаем размер выходного массива:
' по_вертикали=строкМатрицы*столбцовМатрицы
ReDim ArrResult(1 To UBound(ArrMatr) * UBound(ArrMatr, 2), 1 To 1)
For i = 1 To UBound(ArrMatr) ' цикл по вертикали массива
For j = 1 To UBound(ArrMatr, 2) ' цикл по горизонтали массива
k = k + 1
ArrResult(k, 1) = ArrMatr(i, j) ' запись в выходной массива
Next j
Next i
' выгружаем массив в один столбец
' строк относительно начальной ячейки - UBound(ArrResult)
Sheet1.Range("F1").Resize(UBound(ArrResult), 1).Value = ArrResult
End Sub
На чтение 24 мин. Просмотров 90.5k.
Дональд Кнут
Список настолько же силен, как и его самое слабое звено
В таблице ниже краткая справка по использованию массивов в VBA. В статье постарался замахнуться на звание самого подробного руководства, которое вы найдете о массивах VBA.
Содержание
- Краткое руководство по массивам VBA
- Введение
- Быстрые заметки
- Что такое массивы и зачем они нужны?
- Типы массивов VBA
- Объявление массива
- Присвоение значений массиву
- Использование функций Array и Split
- Использование циклов с массивами
- Использование Erase
- ReDim с Preserve
- Сортировка массива
- Передача массива в Sub или функцию
- Возвращение массива из функции
- Двумерные массивы
- Чтение из диапазона ячеек в массив
- Как заставить ваши макросы работать на суперскорости
- Заключение
Краткое руководство по массивам VBA
| Задача | Статический массив |
Динамический массив |
| Объявление | Dim arr(0 To 5) As Long |
Dim arr() As Long Dim arr As Variant |
| Установить размер | Dim arr(0 To 5) As Long |
ReDim arr(0 To 5)As Variant |
| Увеличить размер (сохранить существующие данные) |
Только динамический |
ReDim Preserve arr(0 To 6) |
| Установить значения |
arr(1) = 22 | arr(1) = 22 |
| Получить значения | total = arr(1) | total = arr(1) |
| Первая позиция | LBound(arr) | LBound(arr) |
| Последняя позиция | Ubound(arr) | Ubound(arr) |
| Читать все записи (1D) | For i = LBound(arr) To UBound(arr) Next i Or For i = LBound(arr,1) To UBound(arr,1) Next i |
For i = LBound(arr) To UBound(arr) Next i Or For i = LBound(arr,1) To UBound(arr,1) Next i |
| Читать все записи (2D) | For i = LBound(arr,1) To UBound(arr,1) For j = LBound(arr,2) To UBound(arr,2) Next j Next i |
For i = LBound(arr,1) To UBound(arr,1) For j = LBound(arr,2) To UBound(arr,2) Next j Next i |
| Читать все записи | Dim item As Variant For Each item In arr Next item |
Dim item As Variant For Each item In arr Next item |
| Перейти на Sub | Sub MySub(ByRef arr() As String) | Sub MySub(ByRef arr() As String) |
| Возврат из функции | Function GetArray() As Long() Dim arr(0 To 5) As Long GetArray = arr End Function |
Function GetArray() As Long() Dim arr() As Long GetArray = arr End Function |
| Получить от функции |
Только динамический |
Dim arr() As Long Arr = GetArray() |
| Стереть массив | Erase arr *Сбрасывает все значения по умолчанию |
Erase arr *Удаляет массив |
| Строка в массив | Только динамический |
Dim arr As Variant arr = Split(«James:Earl:Jones»,»:») |
| Массив в строку | Dim sName As String sName = Join(arr, «:») |
Dim sName As String sName = Join(arr, «:») |
| Заполните значениями |
Только динамический |
Dim arr As Variant arr = Array(«John», «Hazel», «Fred») |
| Диапазон в массив | Только динамический |
Dim arr As Variant arr = Range(«A1:D2») |
| Массив в диапазон | Так же, как в динамическом |
Dim arr As Variant Range(«A5:D6») = arr |
Введение
В этой статье подробно рассматриваются массивы на языке программирования Excel VBA. Она охватывает важные моменты, такие как:
- Зачем вам массивы
- Когда вы должны их использовать
- Два типа массивов
- Использование более одного измерения
- Объявление массивов
- Добавление значений
- Просмотр всех предметов
- Супер эффективный способ чтения Range в массив
В первом разделе мы рассмотрим, что такое массивы и зачем они нужны. Вы можете не понимать часть кода в первом разделе. Это нормально. Я буду разбивать на простые термины в следующих разделах статьи.
Быстрые заметки
Иногда коллекции лучше, чем массивы. Вы можете прочитать о коллекциях здесь.
Массивы и циклы идут рука об руку. Наиболее распространенными циклами, которые вы используете с массивами, являются циклы For i и For Each.
Что такое массивы и зачем они нужны?
Массив VBA — это тип переменной. Используется для хранения списков данных одного типа. Примером может быть сохранение списка стран или списка итогов за неделю.
В VBA обычная переменная может хранить только одно значение за раз.
В следующем примере показана переменная, используемая для хранения оценок ученика.
' Может хранить только 1 значение за раз Dim Student1 As Integer Student1 = 55
Если мы хотим сохранить оценки другого ученика, нам нужно создать вторую переменную.
В следующем примере у нас есть оценки пяти студентов
Мы собираемся прочитать эти отметки и записать их в Immediate Window.
Примечание. Функция Debug.Print записывает значения в Immediate Window. Для просмотра этого окна выберите View-> Immediate Window из меню (сочетание клавиш Ctrl + G).
Как видите в следующем примере, мы пишем один и тот же код пять раз — по одному для каждого учащегося.
Public Sub StudentMarks()
With ThisWorkbook.Worksheets("Лист1")
' Объявите переменную для каждого студента
Dim Student1 As Integer
Dim Student2 As Integer
Dim Student3 As Integer
Dim Student4 As Integer
Dim Student5 As Integer
' Читайте оценки студентов из ячейки
Student1 = .Range("C2").Offset(1)
Student2 = .Range("C2").Offset(2)
Student3 = .Range("C2").Offset(3)
Student4 = .Range("C2").Offset(4)
Student5 = .Range("C2").Offset(5)
' Печать студенческих оценок
Debug.Print "Оценки студентов"
Debug.Print Student1
Debug.Print Student2
Debug.Print Student3
Debug.Print Student4
Debug.Print Student5
End With
End Sub
Ниже приведен вывод из примера
Проблема с использованием одной переменной для каждого учащегося заключается в том, что вам необходимо добавить код для каждого учащегося. Поэтому, если в приведенном выше примере у вас будет тысяча студентов, вам понадобится три тысячи строк кода!
К счастью, у нас есть массивы, чтобы сделать нашу жизнь проще. Массивы позволяют нам хранить список элементов данных в одной структуре.
Следующий код показывает приведенный выше пример с использованием массива.
Public Sub StudentMarksArr()
With ThisWorkbook.Worksheets("Лист1")
' Объявите массив для хранения оценок для 5 студентов
Dim Students(1 To 5) As Integer
' Читайте оценки учеников из ячеек C3: C7 в массив
Dim i As Integer
For i = 1 To 5
Students(i) = .Range("C2").Offset(i)
Next i
' Распечатывать оценки студентов из массива
Debug.Print "Оценки студентов"
For i = LBound(Students) To UBound(Students)
Debug.Print Students(i)
Next i
End With
End Sub
Преимущество этого кода в том, что он будет работать для любого количества студентов. Если нам нужно изменить этот код для работы с 1000 студентами, нам нужно всего лишь изменить (от 1 до 5) на (от 1 до 1000) в декларации. В предыдущем примере нам нужно было добавить примерно пять тысяч строк кода.
Давайте проведем быстрое сравнение переменных и массивов. Сначала мы сравним процесс объявления.
' Объявляем переменные
Dim Student As Integer
Dim Country As String
' Объявляем массивы
Dim Students(1 To 3) As Integer
Dim Countries(1 To 3) As String
Далее мы сравниваем присвоение значения
' присвоить значение переменной
Student1 = .Cells(1, 1)
' присваивать значение первому элементу в массиве
Students(1) = .Cells(1, 1)
Наконец, мы смотрим на запись значений
' Вывести значение переменной
Debug.Print Student1
' Вывести значение первого студента в массиве
Debug.Print Students(1)
Как видите, использование переменных и массивов очень похоже.
Важным является тот факт, что массивы используют индекс (также называемый нижним индексом) для доступа к каждому элементу. Это означает, что мы можем легко получить доступ ко всем элементам в массиве, используя цикл For.
Теперь, когда у вас есть представление о том, почему массивы полезны, давайте пройдемся по ним шаг за шагом.
Типы массивов VBA
В VBA есть два типа массивов:
- Статический — массив фиксированного размера.
- Динамический — массив, в котором размер задается во время выполнения
Разница между этими массивами в основном в том, как они создаются. Доступ к значениям в обоих типах массивов абсолютно одинаков. В следующих разделах мы рассмотрим оба типа.
Объявление массива
Статический массив объявляется следующим образом
Public Sub DecArrayStatic()
' Создать массив с местоположениями 0,1,2,3
Dim arrMarks1(0 To 3) As Long
' По умолчанию от 0 до 3, то есть местоположения 0,1,2,3
Dim arrMarks2(3) As Long
' Создать массив с местоположениями 1,2,3,4,5
Dim arrMarks1(1 To 5) As Long
' Создать массив с местоположениями 2,3,4 'Это редко используется
Dim arrMarks3(2 To 4) As Long
End Sub
Как видите, размер указывается при объявлении статического массива. Проблема в том, что вы никогда не можете быть заранее уверены, какой размер вам нужен. Каждый раз, когда вы запускаете макрос, у вас могут быть разные требования к размеру.
Если вы не используете все расположения массива, ресурсы тратятся впустую. Если вам нужно больше места, вы можете использовать ReDim, но это по сути создает новый статический массив.
Динамический массив не имеет таких проблем. Вы не указываете размер, когда объявляете. Поэтому вы можете увеличиваться и уменьшаться по мере необходимости.
Public Sub DecArrayDynamic()
' Объявить динамический массив
Dim arrMarks() As Long
' Установите размер массива, когда вы будете готовы
ReDim arrMarks(0 To 5)
End Sub
Динамический массив не выделяется, пока вы не используете оператор ReDim. Преимущество в том, что вы можете подождать, пока не узнаете количество элементов, прежде чем устанавливать размер массива. Со статическим массивом вы должны указать размер заранее.
Присвоение значений массиву
Чтобы присвоить значения массиву, вы используете номер местоположения (пересечении строки и столбца). Вы присваиваете значение для обоих типов массивов одинаково.
Public Sub AssignValue()
' Объявить массив с местоположениями 0,1,2,3
Dim arrMarks(0 To 3) As Long
' Установите значение позиции 0
arrMarks(0) = 5
' становите значение позиции 3
arrMarks(3) = 46
' Это ошибка, так как нет местоположения 4
arrMarks(4) = 99
End Sub
Номер места называется индексом. Последняя строка в примере выдаст ошибку «Индекс вне диапазона», так как в примере массива нет местоположения 4.
Использование функций Array и Split
Вы можете использовать функцию Array для заполнения массива списком элементов. Вы должны объявить массив как тип Variant. Следующий код показывает, как использовать эту функцию.
Dim arr1 As Variant
arr1 = Array("Апельсин", "Персик","Груша")
Dim arr2 As Variant
arr2 = Array(5, 6, 7, 8, 12)
Массив, созданный функцией Array, начнется с нулевого индекса, если вы не используете Option Base 1 в верхней части вашего модуля. Затем он начнется с первого индекса. В программировании, как правило, считается плохой практикой иметь ваши реальные данные в коде. Однако иногда это полезно, когда вам нужно быстро протестировать некоторый код. Функция Split используется для разделения строки на массив на основе разделителя. Разделитель — это символ, такой как запятая или пробел, который разделяет элементы.
Следующий код разделит строку на массив из трех элементов.
Dim s As String
s = "Красный,Желтый,Зеленый,Синий"
Dim arr() As String
arr = Split(s, ",")
Функция Split обычно используется, когда вы читаете из cvs или txt-файла, разделенного запятыми, или из другого источника, который предоставляет список элементов, разделенных одним и тем же символом.
Использование циклов с массивами
Использование цикла For обеспечивает быстрый доступ ко всем элементам массива. Вот где сила использования массивов становится очевидной. Мы можем читать массивы с десятью значениями или десятью тысячами значений, используя те же несколько строк кода. В VBA есть две функции: LBound и UBound. Эти функции возвращают самый маленький и самый большой индекс в массиве. В массиве arrMarks (от 0 до 3) LBound вернет 0, а UBound вернет 3.
В следующем примере случайные числа присваиваются массиву с помощью цикла. Затем он печатает эти числа, используя второй цикл.
Public Sub ArrayLoops()
' Объявить массив
Dim arrMarks(0 To 5) As Long
' Заполните массив случайными числами
Dim i As Long
For i = LBound(arrMarks) To UBound(arrMarks)
arrMarks(i) = 5 * Rnd
Next i
' Распечатайте значения в массиве
Debug.Print "Место нахождения", "Значение"
For i = LBound(arrMarks) To UBound(arrMarks)
Debug.Print i, arrMarks(i)
Next i
End Sub
Функции LBound и UBound очень полезны. Их использование означает, что наши циклы будут работать правильно с любым размером массива. Реальное преимущество заключается в том, что если размер массива изменяется, нам не нужно менять код для печати значений. Цикл будет работать для массива любого размера, пока вы используете эти функции.
Использование цикла For Each
Вы можете использовать цикл For Each с массивами. Важно помнить, что он доступен только для чтения. Это означает, что вы не можете изменить значение в массиве.
В следующем коде значение метки изменяется, но оно не меняет значение в массиве.
For Each mark In arrMarks
' Не изменит значение массива
mark = 5 * Rnd
Next mark
Цикл For Each отлично подходит для чтения массива. Как видите, лучше писать специально для двумерного массива.
Dim mark As Variant
For Each mark In arrMarks
Debug.Print mark
Next mark
Использование Erase
Функция Erase может использоваться для массивов, но она работает по-разному в зависимости от типа массива.
Для статического массива функция Erase сбрасывает все значения по умолчанию. Если массив состоит из целых чисел, то все значения устанавливаются в ноль. Если массив состоит из строк, то все строки устанавливаются в «» и так далее.
Для динамического массива функция удаления стирает память. То есть она удаляет массив. Если вы хотите использовать его снова, вы должны использовать ReDim для выделения памяти.
Давайте рассмотрим пример статического массива. Этот пример аналогичен примеру ArrayLoops в последнем разделе с одним отличием — мы используем Erase после установки значений. Когда значение будет распечатано, все они будут равны нулю.
Public Sub EraseStatic()
' Объявить массив
Dim arrMarks(0 To 3) As Long
' Заполните массив случайными числами
Dim i As Long
For i = LBound(arrMarks) To UBound(arrMarks)
arrMarks(i) = 5 * Rnd
Next i
' ВСЕ ЗНАЧЕНИЯ УСТАНОВЛЕНЫ НА НОЛЬ
Erase arrMarks
' Распечатайте значения - там все теперь ноль
Debug.Print "Место нахождения", "Значение"
For i = LBound(arrMarks) To UBound(arrMarks)
Debug.Print i, arrMarks(i)
Next i
End Sub
Теперь мы попробуем тот же пример с динамикой. После того, как мы используем Erase, все места в массиве были удалены. Нам нужно использовать ReDim, если мы хотим использовать массив снова.
Если мы попытаемся получить доступ к членам этого массива, мы получим ошибку «Индекс вне диапазона».
Public Sub EraseDynamic()
' Объявить массив
Dim arrMarks() As Long
ReDim arrMarks(0 To 3)
' Заполните массив случайными числами
Dim i As Long
For i = LBound(arrMarks) To UBound(arrMarks)
arrMarks(i) = 5 * Rnd
Next i
' arrMarks теперь освобожден. Места не существуют.
Erase arrMarks
End Sub
ReDim с Preserve
Если мы используем ReDim для существующего массива, то массив и его содержимое будут удалены.
В следующем примере второй оператор ReDim создаст совершенно новый массив. Исходный массив и его содержимое будут удалены.
Sub UsingRedim()
Dim arr() As String
' Установить массив в слоты от 0 до 2
ReDim arr(0 To 2)
arr(0) = "Яблоко"
' Массив с яблоком теперь удален
ReDim arr(0 To 3)
End Sub
Если мы хотим расширить размер массива без потери содержимого, мы можем использовать ключевое слово Preserve.
Когда мы используем Redim Preserve, новый массив должен начинаться с того же начального размера, например мы не можем сохранить от (0 до 2) до (от 1 до 3) или до (от 2 до 10), поскольку они являются различными начальными размерами.
В следующем коде мы создаем массив с использованием ReDim, а затем заполняем массив типами фруктов.
Затем мы используем Preserve для увеличения размера массива, чтобы не потерять оригинальное содержимое.
Sub UsingRedimPreserve()
Dim arr() As String
' Установить массив в слоты от 0 до 1
ReDim arr(0 To 2)
arr(0) = "Яблоко"
arr(1) = "Апельсин"
arr(2) = "Груша"
' Изменение размера и сохранение исходного содержимого
ReDim Preserve arr(0 To 5)
End Sub
Из приведенных ниже снимков экрана видно, что исходное содержимое массива было «сохранено».
Предостережение: в большинстве случаев вам не нужно изменять размер массива, как мы делали в этом разделе. Если вы изменяете размер массива несколько раз, то вам захочется рассмотреть возможность использования коллекции.
Использование Preserve с 2-мерными массивами
Preserve работает только с верхней границей массива.
Например, если у вас есть двумерный массив, вы можете сохранить только второе измерение, как показано в следующем примере:
Sub Preserve2D()
Dim arr() As Long
' Установите начальный размер
ReDim arr(1 To 2, 1 To 5)
' Изменить размер верхнего измерения
ReDim Preserve arr(1 To 2, 1 To 10)
End Sub
Если мы попытаемся использовать Preserve на нижней границе, мы получим ошибку «Индекс вне диапазона».
В следующем коде мы используем Preserve для первого измерения. Запуск этого кода приведет к ошибке «Индекс вне диапазона»:
Sub Preserve2DError()
Dim arr() As Long
' Установите начальный размер
ReDim arr(1 To 2, 1 To 5)
' Ошибка «Вне диапазона»
ReDim Preserve arr(1 To 5, 1 To 5)
End Sub
Когда мы читаем из диапазона в массив, он автоматически создает двумерный массив, даже если у нас есть только один столбец.
Применяются те же правила сохранения. Мы можем использовать Preserve только на верхней границе, как показано в следующем примере:
Sub Preserve2DRange()
Dim arr As Variant
' Назначить диапазон массиву
arr = Sheet1.Range("A1:A5").Value
' Preserve будет работать только на верхней границе
ReDim Preserve arr(1 To 5, 1 To 7)
End Sub
Сортировка массива
В VBA нет функции для сортировки массива. Мы можем отсортировать ячейки листа, но это медленно, если данных много.
Функция быстрой сортировки ниже может использоваться для сортировки массива.
Sub QuickSort(arr As Variant, first As Long, last As Long)
Dim vCentreVal As Variant, vTemp As Variant
Dim lTempLow As Long
Dim lTempHi As Long
lTempLow = first
lTempHi = last
vCentreVal = arr((first + last) / 2)
Do While lTempLow <= lTempHi
Do While arr(lTempLow) < vCentreVal And lTempLow < last
lTempLow = lTempLow + 1
Loop
Do While vCentreVal < arr(lTempHi) And lTempHi > first
lTempHi = lTempHi - 1
Loop
If lTempLow <= lTempHi Then
' Поменять значения
vTemp = arr(lTempLow)
arr(lTempLow) = arr(lTempHi)
arr(lTempHi) = vTemp
' Перейти к следующим позициям
lTempLow = lTempLow + 1
lTempHi = lTempHi - 1
End If
Loop
If first < lTempHi Then QuickSort arr, first, lTempHi
If lTempLow < last Then QuickSort arr, lTempLow, last
End Sub
Вы можете использовать эту функцию так:
Sub TestSort()
' Создать временный массив
Dim arr() As Variant
arr = Array("Банан", "Дыня", "Персик", "Слива", "Яблоко")
' Сортировать массив
QuickSort arr, LBound(arr), UBound(arr)
' Печать массива в Immediate Window(Ctrl + G)
Dim i As Long
For i = LBound(arr) To UBound(arr)
Debug.Print arr(i)
Next i
End Sub
Передача массива в Sub или функцию
Иногда вам нужно будет передать массив в процедуру. Вы объявляете параметр, используя круглые скобки, аналогично тому, как вы объявляете динамический массив.
Переход к процедуре с использованием ByRef означает, что вы передаете ссылку на массив. Таким образом, если вы измените массив в процедуре, он будет изменен, когда вы вернетесь.
Примечание. Когда вы используете массив в качестве параметра, он не может использовать ByVal, он должен использовать ByRef. Вы можете передать массив с помощью ByVal, сделав параметр вариантом.
' Передает массив в функцию
Public Sub PassToProc()
Dim arr(0 To 5) As String
' Передать массив в функцию
UseArray arr
End Sub
Public Function UseArray(ByRef arr() As String)
' Использовать массив
Debug.Print UBound(arr)
End Function
Возвращение массива из функции
Важно помнить следующее. Если вы хотите изменить существующий массив в процедуре, вы должны передать его как параметр, используя ByRef (см. Последний раздел). Вам не нужно возвращать массив из процедуры.
Основная причина возврата массива — это когда вы используете процедуру для создания нового. В этом случае вы присваиваете возвращаемый массив массиву в вызывающей программе. Этот массив не может быть уже выделен. Другими словами, вы должны использовать динамический массив, который не был выделен.
Следующие примеры показывают это:
Public Sub TestArray()
' Объявить динамический массив - не выделен
Dim arr() As String
' Возврат нового массива
arr = GetArray
End Sub
Public Function GetArray() As String()
' Создать и выделить новый массив
Dim arr(0 To 5) As String
' Возвращаемый массив
GetArray = arr
End Function
Двумерные массивы
Массивы, на которые мы смотрели до сих пор, были одномерными. Это означает, что массивы представляют собой один список элементов.
Двумерный массив — это список списков. Если вы думаете об одной строке электронной таблицы как об одном измерении, то более одного столбца является двухмерным. На самом деле электронная таблица является эквивалентом двумерного массива. Он имеет два измерения — строки и столбцы.
Следует отметить одну маленькую вещь: Excel обрабатывает одномерный массив как строку, если вы записываете его в электронную таблицу. Другими словами, массив arr (от 1 до 5) эквивалентен arr (от 1 до 1, от 1 до 5) при записи значений в электронную таблицу.
На следующем рисунке показаны две группы данных. Первый — это одномерный массив, а второй — двухмерный.
Чтобы получить доступ к элементу в первом наборе данных (одномерном), все, что вам нужно сделать, это дать строку, например. 1,2, 3 или 4.
Для второго набора данных (двумерного) вам нужно указать строку И столбец. Таким образом, вы можете думать, что 1-мерное — это несколько столбцов, а одна строка и двухмерное — это несколько строк и несколько столбцов.
Примечание. В массиве может быть более двух измерений. Это редко требуется. Если вы решаете проблему с помощью 3+-мерного массива, то, вероятно, есть лучший способ сделать это.
Вы объявляете двумерный массив следующим образом:
Dim ArrayMarks(0 To 2, 0 To 3) As Long
В следующем примере создается случайное значение для каждого элемента в массиве и печатается значение в Immediate Window.
Public Sub TwoDimArray()
' Объявить двумерный массив
Dim arrMarks(0 To 3, 0 To 2) As String
' Заполните массив текстом, состоящим из значений i и j
Dim i As Long, j As Long
For i = LBound(arrMarks) To UBound(arrMarks)
For j = LBound(arrMarks, 2) To UBound(arrMarks, 2)
arrMarks(i, j) = CStr(i) & ":" & CStr(j)
Next j
Next i
' Вывести значения в массиве в Immediate Window
Debug.Print "i", "j", "Знаечние"
For i = LBound(arrMarks) To UBound(arrMarks)
For j = LBound(arrMarks, 2) To UBound(arrMarks, 2)
Debug.Print i, j, arrMarks(i, j)
Next j
Next i
End Sub
Видите, что мы используем второй цикл For внутри первого цикла, чтобы получить доступ ко всем элементам.
Результат примера выглядит следующим образом:
Этот макрос работает следующим образом:
- Входит в цикл i
- i установлен на 0
- цикл Enters j
- j установлен на 0
- j установлен в 1
- j установлен на 2
- Выход из цикла j
- i установлен в 1
- j установлен на 0
- j установлен в 1
- j установлен на 2
- И так до тех пор, пока i = 3 и j = 2
Заметьте, что LBound и UBound имеют второй аргумент 2. Это указывает, что это верхняя или нижняя граница второго измерения. Это начальное и конечное местоположение для j. Значение по умолчанию 1, поэтому нам не нужно указывать его для цикла i.
Использование цикла For Each
Использование For Each лучше использовать при чтении из массива.
Давайте возьмем код сверху, который выписывает двумерный массив.
' Для цикла For необходимо два цикла
Debug.Print "i", "j", "Значение"
For i = LBound(arrMarks) To UBound(arrMarks)
For j = LBound(arrMarks, 2) To UBound(arrMarks, 2)
Debug.Print i, j, arrMarks(i, j)
Next j
Next i
Теперь давайте перепишем его, используя цикл For Each. Как видите, нам нужен только один цикл, и поэтому гораздо проще написать:
' Использование For Each требует только одного цикла
Debug.Print "Значение"
Dim mark As Variant
For Each mark In arrMarks
Debug.Print mark
Next mark
Использование цикла For Each дает нам массив только в одном порядке — от LBound до UBound. В большинстве случаев это все, что вам нужно.
Чтение из диапазона ячеек в массив
Если вы читали мою статью о ячейках и диапазонах, то вы знаете, что VBA имеет чрезвычайно эффективный способ чтения из диапазона ячеек в массив и наоборот.
Public Sub ReadToArray()
' Объявить динамический массив
Dim StudentMarks As Variant
' Считать значения в массив из первой строки
StudentMarks = Range("A1:Z1").Value
' Запишите значения обратно в третий ряд
Range("A3:Z3").Value = StudentMarks
End Sub
Динамический массив, созданный в этом примере, будет двухмерным массивом. Как видите, мы можем прочитать весь диапазон ячеек в массив всего за одну строку.
В следующем примере будут считаны примеры данных студента ниже из C3: E6 Лист1 и распечатаны в Immediate Window.
Public Sub ReadAndDisplay()
' Получить диапазон
Dim rg As Range
Set rg = ThisWorkbook.Worksheets("Лист1").Range("C3:E6")
' Создать динамический массив
Dim StudentMarks As Variant
' Считать значения в массив из листа 1
StudentMarks = rg.Value
' Вывести значения массива
Debug.Print "i", "j", "Значение"
Dim i As Long, j As Long
For i = LBound(StudentMarks) To UBound(StudentMarks)
For j = LBound(StudentMarks, 2) To UBound(StudentMarks, 2)
Debug.Print i, j, StudentMarks(i, j)
Next j
Next i
End Sub
Как видите, первое измерение (доступное через i) массива — это строка, а второе — столбец. Чтобы продемонстрировать это, взглянем на значение 44 в Е4 данных образца. Это значение находится в строке 2 столбца 3 наших данных. Вы можете видеть, что 44 хранится в массиве в StudentMarks (2,3).
Как заставить ваши макросы работать на суперскорости
Если ваши макросы работают очень медленно, этот раздел будет очень полезным. Особенно, если вы имеете дело с большими объемами данных. В VBA это держится в секрете.
Обновление значений в массивах происходит экспоненциально быстрее, чем обновление значений в ячейках.
В последнем разделе вы увидели, как мы можем легко читать из группы ячеек в массив и наоборот. Если мы обновляем много значений, то мы можем сделать следующее
- Скопируйте данные из ячеек в массив.
- Измените данные в массиве.
- Скопируйте обновленные данные из массива обратно в ячейки.
Например, следующий код будет намного быстрее, чем код ниже:
Public Sub ReadToArray()
' Считать значения в массив из первой строки
Dim StudentMarks As Variant
StudentMarks = Range("A1:Z20000").Value
Dim i As Long
For i = LBound(StudentMarks) To UBound(StudentMarks)
' Обновление отметок здесь
StudentMarks(i, 1) = StudentMarks(i, 1) * 2
'...
Next i
' Запишите новые значения обратно на лист
Range("A1:Z20000").Value = StudentMarks
End Sub
Sub UsingCellsToUpdate()
Dim c As Variant
For Each c In Range("A1:Z20000")
c.Value = ' Обновите значения здесь
Next c
End Sub
Назначение из одного набора ячеек в другой также намного быстрее, чем с помощью копирования и вставки.
' Назначение - быстрее
Range("A1:A10").Value = Range("B1:B10").Value
' Копировать Вставить - медленнее
Range("B1:B1").Copy Destination:=Range("A1:A10")
Заключение
Ниже приводится краткое изложение основных моментов этой статьи.
- Массивы — это эффективный способ хранения списка элементов одного типа.
- Вы можете получить доступ к элементу массива напрямую, используя номер местоположения, который известен как индекс.
- Распространенная ошибка «Индекс вне диапазона» вызвана доступом к несуществующему местоположению.
- Существует два типа массивов: статический и динамический.
- Статический используется, когда размер массива всегда одинаков.
- Динамические массивы позволяют вам определять размер массива во время выполнения.
- LBound и UBound обеспечивают безопасный способ поиска самых маленьких и самых больших подписок массива.
- Основной массив является одномерным. Есть еще многомерные массивы.
- Чтобы только передать массив в процедуру, используйте ByRef. Вы делаете это так: ByRef arr() as long.
- Вы можете вернуть массив из функции, но массив, которому он назначен, не должен быть выделен в данный момент.
- Рабочий лист с его строками и столбцами по сути является двумерным массивом.
- Вы можете читать непосредственно из диапазона листа в двухмерный массив всего за одну строку кода.
- Вы также можете записать из двумерного массива в диапазон всего за одну строку кода.
Управление массивами в Microsoft Excel
Смотрите также или удалить одну Enter, как обычно,Скачать примеры массива функций простые формулы. ЭтоПримечание. Двумерные массивы Excel статье «Сортировка в когда видит фигурные. обмена ( качестве результата массив: массивах разделяются точкойОбратная матрица в Excel вручную. области. Теперь в переместить курсор с
действия.Во время работы с
Операции с массивами
отдельно взятую формулу аРаспространенная ошибка при работе сокращенный вариант, вместивший могут занимать сразу Excel формулой» здесь. скобки. А именноМассив в ExcelCTRL+CВо втором случае формула с запятой (;).Как видим, операции сУрок: неё можно будет помощью мышки, илиКоординаты массива имеют вид таблицами Excel довольно (например в ячейкеCtrl + Shift +
с массивами функций всю необходимую информацию
несколько листов (этоШестой пример. — к числу – это любое) и вставить его вводится в одну Например, на рисунке
диапазонами помогают сэкономитьКак посчитать сумму в вводить любые данные. просто нажмете кнопку адресов первой её часто приходится оперировать D10) и выдаст Enter – НЕ нажатие для решения сложной
Создание формулы
сотни и тысячиС помощью формулы 1+2, к 2+2, количество ячеек с в нужную формулу. ячейку и возвращает ниже представлен одномерный время при вычислениях, ЭкселеНаиболее удобно в качестве«Enter» ячейки и последней,
с целыми диапазонами
предупреждающее сообщениеВуаля! кодового сочетания «Ctrl задачи. данных).
массива можно удалить к 3+2, к данными (кроме одной),Другим подходом для формирования только одно значение: горизонтальный массив, который а также свободноеФункция формул использовать уже, то информационное сообщение разделенные двоеточием. Если данных. При этомНевозможно изменить часть массива
Т.е. Excel произвел попарное + Shift +Аргументы для функции –Формула массива – позволяет из списка, столбца
- 4+2, к 5+2, расположенных в строках, числовой последовательности являетсяИтак, в данном уроке состоит из 5 пространство листа, ведьТРАНСП
- готовые встроенные функции появится опять. Не диапазон двумерный, то некоторые задачи подразумевают,. умножение элементов массивов Enter» (никогда не одномерные массивы. Формула обработать данные из пустые ячейки. Смотри к 6+2. Затем, столбцах, диапазонах. Можно использование формулы СТРОКА(A1:A3) Вы познакомились с элементов: не нужно дополнительно
Изменение содержимого массива
является типичным оператором Excel. Доступ к получится также закрыть первая и последняя что вся группаДля редактирования формулы массива B2:B5 и C2:C5 забывайте эту комбинацию просматривает каждый из этого массива. Она этот способ в получившиеся суммы сложит. сказать, массив вВ итоге получим =СУММПРОИЗВ(НАИБОЛЬШИЙ(A2:A15;СТРОКА(A1:A3))) основными терминами иЕсли ввести его на суммировать данные, которые массивов. Она позволяет ним можно получить окно программы или ячейки расположены по ячеек должна быть необходимо выделить весь и образовал новый клавиш). Это самое них по отдельности,
может возвращать одно статье «Как удалить Получится результат = Excel – этоНо у этого подхода определениями, касаемо формул рабочий лист Excel, объединены в диапазон, переворачивать таблицы или через сохранить документ. Все диагонали друг от преобразована буквально в диапазон (A10:H11 в массив стоимостей (в главное, что нужно совершает заданные пользователем значение либо давать пустые ячейки в 33. диапазон ячеек. Что
- есть два недостатка: массива в Excel. получим следующий результат: для последующей работы
- матрицы, то есть,Мастер функций время будет появляться друга. Например, адрес один клик. В нашем случае) и памяти компьютера), а запомнить при обработке операции и генерирует в результате массив Excel».Корректировка формулы массива в такое диапазон, какпри вставке новых строк Если желаете получитьЧтобы вставить такой массив с ними. Все
менять строки и, нажав кнопку это назойливое сообщение, одномерного массива может Экселе имеются инструменты, изменить формулу в
- затем сложил все больших объемов информации. единый результат. (набор) значений.Седьмой пример.Excel его выделять, читайте на лист перед еще больше информации в Excel, необходимо это выполняется «на столбцы местами. При«Вставить функцию»
- которое блокирует любые быть таким: которые позволяют проводить строке формул (или
- элементы этого нового Правильно введенная функцияРассмотрим ее синтаксис:С помощью формул массиваМы видим, что. в статье «Что строками 1-3, формула о массивах, читайте сначала выделить строку, лету». А для
- этом она используетслева от строки действия. А выходA2:A7 подобные операции. Давайте
Функции массивов
нажав массива. выполняет сложнейшие задачи.Предположим, в следующем месяце реально: много вариантов примененияКорректируем формулу массива, такое диапазон в автоматически модифицируется в следующие статьи: состоящую из 5 преобразования таблиц и исключительно вывод результата формул. Или же из ситуации есть. выясним, как можноF2
Обратите внимание на фигурныеПод планируется увеличение коммунальныхподсчитать количество знаков в формулы массива. Рассмотрим как обычную формулу, Excel» здесь. СТРОКА(A2:A4) или СТРОКА(A1:A4)Многоячеечные формулы массива в ячеек, затем ввести
матриц только функции в диапазон ячеек, во вкладке и он довольноА пример адреса двумерного управлять массивами данных). Затем необходимо повторить скобки, появившиеся вмассивом платежей на 10%. определенном диапазоне; последний пример, который НО, для ееЗдесь рассмотрим, и соответственно формируется
Excel формулу массива и
Оператор СУММ
массивов и подходят, поэтому после введения«Формулы» прост диапазона выглядит следующим в этой программе. ввод измененной формулы формуле — отличительныйобычно понимают набор Если мы введемсуммировать только те числа, поможет написать алфавит.
ввода нажимаем НЕ
как ввести формулу массива неправильный массив {2:3:4}Одноячеечные формулы массива в нажать комбинацию клавиш так как обычные данного оператора обязательнона ленте можноЗакройте информационное окно, нажав образом:Скачать последнюю версию массива, нажав сочетание признак данных, объединенных в
обычную формулу для которые соответствуют заданномуЭтот алфавит пригодится для
Оператор ТРАНСП
«Enter», а сочетание в Excel или {1:2:3:4}. Исправить ExcelCtrl+Shift+Enter формулы не в нужно применять сочетание выбрать одну из на кнопкуA2:D7 Excel клавишформулы массива группу. Массивы бывают итога =СУММ((C3:C8*D3:D8)+10%), то условию; раскрывающегося списка, когда клавиш – «Ctrl», чем отличаются простые это может формулаМассивы констант в Excel. силах справиться сCtrl+Shift+Enter категорий, в которой«OK».Массив – это группаCtrl + Shift +. Вводить их вручную
одномерные
вряд ли получимсуммировать все n-ные значения
фамилии распределяются по + «Shift» + формулы от формул
Оператор МОБР
СТРОКА(ДВССЫЛ(«A1:A3»))Редактирование формул массива вЭлементы в одномерном вертикальном подобными задачами. Но. Также нужно отметить, находится интересующий вас.Чтобы рассчитать подобную формулу, данных, которая расположена Enter. с клавиатуры бесполезно(элементы массива образуют ожидаемый результат. Нам в определенном диапазоне. буквам. Подробнее об «Enter». массива. Разберемформула возвращает статичный массив. Excel массиве разделяются двоеточием в то же что перед введением оператор.Затем нажмете на кнопку нужно выделить на на листе вExcel также не позволит
- они автоматически
строку или столбец) нужно, чтобы каждыйКогда мы используем формулы
этом смотрите в
Второй пример.примеры формулы массива в
Массив последовательных чисел переменнойПрименение формул массива в (:). Например, на время нужно учесть, самого выражения нужноПосле того, как пользователь«Отмена» листе область, в смежных ячейках. По свободно перемещать ячейки, появляются при нажатии или аргумент увеличился на массива, Excel видит статье «Связанный выпадающийЕсли нам нужноExcel длины можно сформировать Excel рисунке ниже представлен что к подобным выделить на листе в, которая расположена в которую будет выводиться
большому счету, любую
lumpics.ru
Знакомство с формулами массива в Excel
входящие в формулуCtrl + Shift +двумерные 10%. Чтобы программа диапазон значений не список в Excel не прибавить к. Начнем с простого. с помощью формулыПодходы к редактированию формул одномерный вертикальный массив, выражениям применяются дополнительные область, у которойМастере функций группе значков слева результат, и ввести таблицу можно считать
Одномерные и двухмерные массивы
массива или добавлять Enter.(матрица). Легко сообразить, поняла это, мы как отдельные ячейки, по алфавиту». числам столбца А
У нас такая =СТРОКА(ДВССЫЛ(«A1:A»&G2)), где в
массива в Excel который состоит из правила ввода и
количество ячеек вили на ленте от строки формул, в строку формул
Размерность массива
массивом, но не новые строки-столбцы-ячейки вПри работе с таблицами что почти в используем функцию как а как единыйВ Excel есть число 2, а таблица. ячейке
Урок подготовлен для Вас 4 элементов.
- редактирования. столбце будет равно инструментов выберет наименование и представляет собой выражение для вычисления. каждый из них диапазон формулы массива часто возникает необходимость
любой таблице Excel массив. блок данных.
несколько способов быстро умножить числа столбцаПервый пример.G2 командой сайта office-guru.ruЕсли ввести его наАвтор: Максим Тютюшев числу ячеек в конкретного оператора, откроется
- пиктограмму в видеПосле ввода следует нажать является таблицей, так (т.е. в диапазон поменять местами строки при желании можноПосмотрим, как работает оператор
узнать или посчитать А на цифру
- Чтобы сложить этипользователем задается последнийАвтор: Антон Андронов рабочий лист, получимФормула массива строке исходной таблицы окно аргументов функции, крестика. Также можно не на кнопку как он может
A10:H11 в нашем и столбцы, т.е. найти один или
«И» в функцииИспользуем формулу массива с сумму ячеек. Узнать 2, то в числа, достаточно поставить элемент последовательности (т.е.Автор: Антон Андронов следующий результат:– это один
(матрицы) и, наоборот, куда можно вводить нажать на кнопкуEnter являться просто диапазоном. случае)
развернуть таблицу на несколько таких массивов: массива. Нам нужно диапазоном ячеек и сумму в Excel формуле так и автосумму. Получится такая
сумму скольких наибольшихДля построения формул массиваВ двухмерных массивах для
Одноячеечные и многоячеечные формулы массива
из наиболее мощных количество ячеек в исходные данные дляEsc, как обычно, а По своей сущностиВспомните детство, школу, свою
бок, чтобы данные,Формулы массива узнать, сколько мы с отдельной ячейкой.
можно без установки пишем. Получится такая формула. =СУММ(A1:A6) Результат требуется найти). В иногда используют числовую разделения элементов в инструментов Excel, но строке должно равняться расчета.
- на клавиатуре. После набрать комбинацию клавиш
- такие области могут тетрадку по математике…
- которые раньше шли
- в Excel - платим за воду,
- В первом случае формулы. Есть несколько
- формула. {=СУММ(A1:A6*2)} Результат получился = 21.
итоге получим =СУММПРОИЗВ(НАИБОЛЬШИЙ(Список;СТРОКА(ДВССЫЛ(«A1:A»&G2)))) последовательность, например {1:2:3:4:5:6:7},
строке используется точка
также и один
office-guru.ru
Массив последовательных чисел в MS EXCEL
их числу вПравила ввода и редактирования любой из этихCtrl+Shift+Enter быть одномерными или На обороте тетради по строке, теперь это специальные формулы горячую и холодную. найдем промежуточные итоги способов установки и получится = 42.Теперь нам нужно
В некоторых формулах массива
вводимую непосредственно в с запятой, а из самых сложных. столбце исходника. Синтаксис
функций, если они операций произойдет отмена. После этого выражение
двумерными (матрицы). В на обложке было располагались в столбцах
для обработки данных Функция: . Итого для столбца «К
применения формул суммы,Третий пример. прибавить к каждому требуется, чтобы размер формулу. Эту последовательность для разделения строк Массивом в Excel оператора следующий: выводят результат сразу действия, и вы в строке формул первом случае все что? Таблица умножения и наоборот. В из таких массивов. – 346 руб. оплате». Во втором вычитания, т.д. вФормулу массива можно числу в столбце массива последовательных чисел
можно сформировать вручную, – двоеточие. На называют набор элементов,
=ТРАНСП(массив)
в несколько ячеек, сможете работать с
- будет автоматически взято данные располагаются только вот такого вида: математике такая операция Формулы массива делятсяФункция «Сортировки» в формуле – итоговую сумму Excel. Несколько способов установить не только А число 2.
- соответствовал размеру диапазона
введя константу массива, рисунке ниже представлен который может обрабатыватьсяУрок: те же самые, листом так, как в фигурные скобки, в одном столбцеПри помощи формул массива называется транспонированием. При на две категории
Динамический массив последовательных чисел
массива. Отсортируем суммы коммунальных платежей. мы рассмотрели в в одной ячейке, Затем, полученные суммы с данными. Это или с использованием массив, который состоит
как одно целое,Транспонирование матриц в Excel что и для и прежде. а ячейки на или строке. она вся делается помощи формулы массива — те, что к оплате в
Выделяем диапазон Е3:Е8. статье «Сумма в но и в
сложить. Чтобы так актуально, когда в функций, например СТРОКА(). из 3 строк так и какУрок: обычных формул массива.Но что делать, если листе будут заполненыВо втором — в в одно движение: и функции
excel2.ru
Формулы массива Excel.
возвращают одно значение порядке возрастания. ДляВ строку формул вводим Excel». диапазоне ячеек. Например, посчитать простой формулой, этот диапазон постоянно Также с помощью и 5 столбцов.
набор, т.е. каждыйКак перевернуть таблицу в То есть, после действительно нужно удалить данными, полученными в нескольких одновременно.выделяем диапазон B2:K11ТРАНСП (TRANSPOSE) и те, что списка отсортированных данных следующую формулу: =C3:C8*D3:D8.Массив функций Excel позволяет нам нужно умножить нам нужно куда-то
добавляются значения. формул можно динамическиЕсли ввести данный массив элемент по отдельности. Экселе ввода значения обязательно или изменить формулу результате вычисления, вКроме того, среди одномерныхвводим формулу =A2:A11*B1:K1это делается на

создадим диапазон. ВыделимНажимаем одновременно клавиши: Ctrl решать сложные задачи числа столбца А внести число 2,
Создадим Динамический диапазон Список изменять длину числовой в Excel, результат В этом урокеФункция нужно установить курсор массива? В этом пределах всего выделенного массивов выделяют горизонтальныйжмем раз. целый набор (массив) его. В строке + Shift + в автоматическом режиме на числа строки м.б. в столбец
(=СМЕЩ(Лист1!$A$2;;;СЧЁТ(Лист1!$A$2:$A$15))), который будет последовательности.
будет таким: мы познакомимся сМОБР
в строку формул
случае следует выполнить диапазона. и вертикальный тип,
Ctrl + Shift +Допустим, имеем двумерный массив значений. Рассмотрим их формул вводим . Enter. Промежуточные итоги одновременно. Те, которые 1. Как написать
В, затем сложить содержать все значения
Создание массива последовательных чиселПри создании двухмерного массива базовыми сведениями опозволяет производить вычисление и набрать сочетание нижеуказанные действия.Если вы в дальнейшем в зависимости от Enter ячеек, который хотим на простых примерах… Жмем сочетание Ctrl посчитаны: выполнить посредством обычных такую формулу подробно все по строкам,
исходного списка и Сформируем массив последовательных чисел необходимо учитывать, чтобы
массивах. обратной матрицы. Все клавишДля изменения формулы выделите попытаетесь удалить содержимое того, что они, чтобы Excel воспринял транспонировать.
Задача: рассчитать общую сумму
+ Shift +Формула после нажатия Ctrl функций невозможно. описано в статье затем автосуммой сложить автоматически расширяться при для решения конкретного все его строкиВ Excel различают одномерные правила ввода значенийCtrl+Shift+Enter
курсором, зажав левую
или изменить любую собой представляют – ее как формулуВыделяем диапазон ячеек для заказа. Если идти Enter. + Shift +Фактически это группа функций, «Как сделать таблицу числа в столбце добавлении новых значений примера: подсчитаем сумму имели одинаковое количество и двухмерные массивы.
у этого оператора
. кнопку мыши, весь из ячеек, которая строку или столбец. массива размещения транспонированной таблицы. классическим путем, тоТранспонированная матрица. Специальная функция Enter оказалась в которые одновременно обрабатывают умножения в Excel»
в столбец 3-х наибольших значений. элементов. Например, следующий Одномерный массив, его точно такие же,Урок: диапазон на листе, расположена в диапазоне,Нужно отметить, что алгоритми получаем результат: Поскольку исходный массив нужно будет добавить Excel для работы фигурных скобках. Она
группу данных и
тут. очень много времениАПусть исходный список содержит массив не сможет еще называют вектором, как и уМастер функций в Excel
куда выводится результат.
куда выводится результат, работы с подобнымиПосмотрите как при помощи ячеек был 8 столбец, где перемножить

excel-office.ru
Работа с массивами функций в Excel
(см. рисунок выше). Файл примера). вторая строка содержит одной строке (горизонтальный знать, что вычисление функций в Экселе
так как если окончится неудачей. Также от более привычных красиво и легко столбца, то надо а потом взять сразу несколько значений.
Виды массивов функций Excel
диапазона. с массивами функций данные не из поможет формула массива.Массив последовательных чисел будемСумму 3-х наибольших значений всего 4 элемента. массив) … обратной матрицы возможно
является вы выделите только
- ничего не выйдет, операций с одиночными выбираются данные по
- выделить диапазон пустых сумму по этому
Преобразует горизонтальную матрицу
- Если попытаться изменить данные в Excel.
- всех ячеек столбца,В ячейку А7
формировать с помощью можно подсчитать сЕсли попробовать ввести такой…или в одном столбце исключительно в том
СУММ одну ячейку массива, если вы сделаете ячейками, хотя и определенному товару и ячеек размером 2 столбцу. Если же
в вертикальную и в какой-либо ячейке
- Массив – данные, объединенные а из каждой
- пишем такую формулу. следующей формулы: СТРОКА(ДВССЫЛ(«A1:A»&ЧСТРОК(Список))) помощью формулы =СУММПРОИЗВ(НАИБОЛЬШИЙ(A2:A15;{1:2:3}))
- массив на рабочий (вертикальный массив).
случае, если она. Её можно применять, то ничего не попытку отредактировать данные общего между ними заказчику:
строки на 8
Синтаксис формулы массива
применить формулу массива, наоборот. Выделяем диапазон столбца «К оплате» в группу. В второй или третьей, =СУММ(A1:A6+2)Здесь функция ЧСТРОК() возвращаетЧтобы не вводить массив лист, то ничего
- Двухмерный массив хранится в
- содержит равное количество как для суммирования
- получится. Затем в в строке функций. тоже много. ДавайтеВ данном случае формула
столбцов. то все будет ячеек, где количество — ничего не данном случае группой т.д. ячейки. ЗдесьВнимание!
количество значений в {1:2:3} вручную, можно не получится. Excel диапазоне ячеек, его строк и столбцов, содержимого отдельных ячеек, строке формул проведите При этом появится рассмотрим нюансы подобных
массива синхронно пробегаетвводим функцию транспонирования =ТРАНСП( гораздо красивее: строк = числу выйдет. Формула в является массив функций
- нам поможет формулаКак ввести формулу массива
- исходном списке (9).
- использовать следующий подход. не позволит Вам еще называют матрицей.
и если её так и для необходимую корректировку. информационное сообщение, в операций. по всем элементам
выделяем ячейку столбцов в таблице массиве защищает значения в Excel. Любую массива. Смотрите статью в После выполнения функции
Введите в диапазон
Функции работы с массивами Excel
это сделать.В отличие от языка определитель не равен нахождения суммы целыхПосле того, как изменения котором будет говориться,Формула массива – это диапазонов C3:C21 ив качестве аргумента функцииС7 с исходными данными. диапазона от изменений. таблицу, которую мы «Как в Excel
- Excel. СТРОКА() получим массив ячеекВ качестве заполнителя отсутствующего программирования VBA, Excel нулю. Если применять массивов. Синтаксис этого внесены, набираем комбинацию
- что нельзя изменять выражение, с помощью B3:B21, проверяя, совпадают выделяем наш массиввводим с клавиатуры А количество столбцов На экране появляется составим и заполним сложить каждую вторуюТеперь, чтобы ввести последовательных чисел {1:2:3:4:5:6:7:8:9},
- B1:B3 элемента в массиве не поддерживает трехмерные данную функцию к оператора для массивовCtrl+Shift+Esc часть массива. Данное которого производится обработка ли они с ячеек A1:B8=СУММ( = числу строк соответствующая запись: в Excel, можно ячейку, строку». эту формулу, как причем этот массивзначения 1, 2
- можно использовать значение массивы. области с разным выглядит следующим образом:. Формула будет изменена. сообщение появится даже диапазона с целью заданными значениями изжмемвыделяем диапазон
в исходном массиве.
Рассмотрим другие примеры использования назвать массивом. Пример:Пятый пример. формулу массива, нажимаем будет динамическим: в и 3 соответственно.#Н/ДРанее мы уже отмечали, количеством строк и=СУММ(массив1;массив2;…)Для удаления формулы массива в том случае, получения итогового результата,
exceltable.com
Формулы массива в Excel
Терминология
ячеек G4 иCtrl + Shift +B2:B5 Вводим формулу: . функций массива ExcelВ зависимости от расположенияФормулой массива можно НЕ «Enter», а зависимости от длины Выделив любую пустую(нет данных). К что массивы в столбцов, то вместоДанный оператор выводит результат нужно точно так если у вас
отображаемого цельным массивом G5. Если совпадения Enterвводим знак умножения ( Получается «перевернутый» массив – рассчитаем итоговую элементов различают массивы: проводить сложные операции сочетание клавиш – диапазона Список будет ячейку, в Строке примеру, следующая запись Excel могут быть корректного результата на
Пример 1. Классика жанра — товарный чек
в одну ячейку, же, как и не было цели или в одной нет, то результати получаем «перевернутыйзвездочка данных. сумму коммунальных платежейодномерные (данные находятся в в таблице, например, «Ctrl» + «Shift»
- формироваться массив последовательных формул введите =B1:B3,
- будет синтаксически верной: одномерными и двухмерными.
- выходе отобразится значение а поэтому для
- в предыдущем случае, производить какие-либо изменения, ячейке. Например, для
- равенства ноль, если массив» в качестве)Поиск среднего значения без с помощью одной ОДНОЙ строке или
- сортировать по условию, + «Enter». чисел соответствующего размера. затем выделите B1:B3Введя данный массив на В свою очередь«#ЗНАЧ!»
того, чтобы произвести
выделить курсором весь а вы просто того, чтобы умножить совпадение есть, то результата:выделяем диапазон учета нулей. Если формулы. в ОДНОМ столбце);
используя различные функции.Формула получится такая.В Excel можно и нажмите клавишу рабочий лист Excel, одномерные могут быть. Синтаксис у этой подсчет, после внесения диапазон ячеек, в случайно дважды щелкнули один диапазон на
Пример 2. Разрешите Вас… транспонировать?
единица. Таким образомЕсли формула массива расположенаC2:C5 мы воспользуемся стандартнойВыделяем ячейку Е9 (напротивдвумерные (НЕСКОЛЬКО строк и Этот способ удобен {=СУММ(А1:А6+2)} писать формулы неF9 получим следующее: горизонтальными и вертикальными. формулы такой: вводных данных достаточно котором она находится. мышью по ячейке второй применяют формулу
суммы всех сделок, не в однойи закрываем скобку
- функцией «СРЗНАЧ», то «Итого»). столбцов, матрица). тем, что приВся формула стоит только в отдельные. Формула B1:B3 будетExcel поддерживает формулы массива Теперь рассмотрим, как=МОБР(массив)
- нажать кнопку Затем нажать на
- диапазона. по следующему шаблону: где заказчик не
ячейке (как в функции СУММ - получим в результатеВводим формулу вида: =СУММ(C3:C8*D3:D8).Одномерные массивы бывают: изменении данных в
Редактирование формулы массива
в фигурных скобках ячейки, но сразу заменена значениями, содержащимися двух видов: многоячеечные же разделяются элементыДля того чтобы рассчитать«OK» кнопкуЕсли вы закроете, это=адрес_массива1*адрес_массива2 ANTON и товар Примере 1), а в итоге должно «0». И этоНажимаем сочетание клавиш: Ctrl
горизонтальными (данные – в столбце, автоматически изменятся – это значит, в диапазоне ячеек. в этих ячейках, и одноячеечные. В в массивах. определитель, применяется функцияв окне аргументовDelete сообщение, нажав наНад диапазонами данных можно не Boston Crab в нескольких ячейках
получиться так: будет правильно. Поэтому + Shift + строке); данные сортировки. Подробнее что это формулу Эти формулы называют т.е. {1:2:3}. Теперь первом случае формула
Пример 3. Таблица умножения
Примеры приведены для русифицированной со следующим синтаксисом: функции или клавишуна клавиатуре. кнопку также выполнять операции
Meat умножаются на (как в Примеречтобы Excel воспринял нашу
- вставляем в формулу
- Enter. Результат:
- вертикальными (данные – в о такой формуле массива. Excel понимаетв достаточно скопировать этот занимает несколько ячеек,
версии Excel.
Пример 4. Выборочное суммирование
=МОПРЕД(массив)EnterПосле этого формула будет«OK» сложения, вычитания, деления ноль и суммируются
2), то Excel формулу как формулу дополнительное условие: 0;A1:A8))’Формула массива в данном столбце). массива читайте в как нужно считать,Excel «формулы массива» массив в Буфер т.е. возвращает вЭлементы в одномерных горизонтальныхУрок:, если ввод выполнялся удалена со всей, а потом попытаетесь и другие арифметические только нужные заказы. не позволит редактировать массива жмем не class=»formula»>. Получаем:
planetaexcel.ru
случае заменила две
Skip to content
В статье предлагается несколько различных формул для выполнения поиска в двумерном массиве значений Excel. Просмотрите эти варианты и выберите наиболее для вас подходящий.
При поиске данных в электронных таблицах Excel чаще всего вы будете искать вертикально в столбцах или горизонтально в строках. Но иногда вам нужно просматривать сразу два условия – как строки, так и столбцы. Другими словами, вы стремитесь найти значение на пересечении определенной строки и столбца. Это называется матричным поиском (также известным как двумерный или поиск в диапазоне). Далее показано, как это можно сделать различными способами.
- Поиск в массиве при помощи ИНДЕКС ПОИСКПОЗ
- Формула ВПР и ПОИСКПОЗ для поиска в диапазоне
- Функция ПРОСМОТРX для поиска в строках и столбцах
- Формула СУММПРОИЗВ для поиска по строке и столбцу
- Поиск в матрице с именованными диапазонами
Поиск в массиве при помощи ИНДЕКС ПОИСКПОЗ
Самый популярный способ выполнить двусторонний поиск в Excel — использовать комбинацию ИНДЕКС с двумя ПОИСКПОЗ. Это разновидность классической формулы ПОИСКПОЗ ИНДЕКС , к которой вы добавляете еще одну функцию ПОИСКПОЗ, чтобы получить номера строк и столбцов:
ИНДЕКС( массив_данных ; ПОИСКПОЗ( значение_вертикальное ; диапазон_поиска_столбец ; 0), ПОИСКПОЗ( значение_горизонтальное ; диапазон_поиска_строка ; 0))
В этом способе, как и во всех остальных, мы используем поиск по двум условиям. Первое из них должно обнаружить совпадение в определенном столбце (в заголовках строк), а второе – в определенной строке (то есть, в заголовках столбцов). В результате мы имеем строку и столбец, которые соответствуют заданным условиям. А на пересечении их как раз и будут находиться искомые данные.
В качестве примера составим формулу для получения количества проданного товара за определённый период времени из таблицы, которую вы можете видеть ниже. Для начала определим все аргументы:
- Массив_данных — B2:E11 (ячейки данных, не включая заголовки строк и столбцов)
- Значение_вертикальное — H1 (целевой товар)
- Диапазон_поиска_столбец – A2:A11 (заголовки строк: названия напитков)
- Значение_горизонтальное — H2 (целевой период)
- Диапазон_поиска_строка — B1:E1 (заголовки столбцов: временные периоды)
Соедините все аргументы вместе, и вы получите следующую формулу для поиска числа в диапазоне:
=ИНДЕКС(B2:E11; ПОИСКПОЗ(H1;A2:A11;0); ПОИСКПОЗ(H2;B1:E1;0))
Как работает эта формула?
Хотя на первый взгляд это может показаться немного сложным, логика здесь простая. Функция ИНДЕКС извлекает значение из массива данных на основе номеров строк и столбцов, а две функции ПОИСКПОЗ предоставляют ей эти номера:
ИНДЕКС( B2:E11; номер_строки ; номер_столбца )
Здесь мы используем способность ПОИСКПОЗ возвращать относительную позицию значения в искомом массиве .
Итак, чтобы получить номер строки, мы ищем нужный нам товар (H1) в заголовках строк (A2:A11):
ПОИСКПОЗ(H1;A2:A11;0)
Чтобы получить номер столбца, мы ищем нужную нам неделю (H2) в заголовках столбцов (B1:E1):
ПОИСКПОЗ(H2;B1:E1;0)
В обоих случаях мы ищем точное совпадение, присваивая третьему аргументу значение 0.
В этом примере первое ПОИСКПОЗ возвращает 2, потому что нужный товар (Sprite) находится в ячейке A3, которая является второй по счёту в диапазоне A2:A11. Второй ПОИСКПОЗ возвращает 3, так как «Неделя 3» находится в ячейке D1, которая является третьей ячейкой в B1:E1.
С учетом вышеизложенного формула сводится к:
ИНДЕКС(B2:E11; 2 ; 3 )
Она возвращает число на пересечении второй строки и третьего столбца в матрице B2:E4, то есть в ячейке D3.
Думаю, вы понимаете, что аналогичным образом можно производить поиск в двумерном массиве Excel не только числа, но и текста. Тип данных здесь не имеет значения.
Формула ВПР и ПОИСКПОЗ для поиска в диапазоне
Другой способ выполнить матричный поиск в Excel — использовать комбинацию функций ВПР и ПОИСКПОЗ:
ВПР( значение_вертикальное ; массив_данных ; ПОИСКПОЗ( значение_горизонтальное , диапазон_поиска_строка , 0), ЛОЖЬ)
Для нашего образца таблицы формула принимает следующий вид:
=ВПР(H1; A2:E11; ПОИСКПОЗ(H2;A1:E1;0); ЛОЖЬ)
Где:
- Массив_данных — B2:E11 (ячейки данных, не включая заголовки строк и столбцов)
- Значение_вертикальное — H1 (целевой товар)
- Значение_горизонтальное — H2 (целевой период)
- Диапазон_поиска_строка — А1:E1 (заголовки столбцов: временные периоды)
Основой формулы является функция ВПР, настроенная на точное совпадение (последний аргумент имеет значение ЛОЖЬ). Она ищет заданное значение (H1) в первом столбце массива (A2:E11) и возвращает данные из другого столбца в той же строке. Чтобы определить, из какого столбца вернуть значение, вы используете функцию ПОИСКПОЗ, которая также настроена на точное совпадение (последний аргумент равен 0):
ПОИСКПОЗ(H2;A1:E1;0)
ПОИСКПОЗ ищет текст из H2 в заголовках столбцов (A1:E1) и указывает относительное положение найденной ячейки. В нашем случае нужная неделя (3-я) находится в D1, которая является четвертой по счету в массиве поиска. Итак, число 4 идет в аргумент номер_столбца функции ВПР:
=ВПР(H1; A2:E11; 4; ЛОЖЬ)
Далее ВПР находит точное совпадение H1 со значением в A3 и возвращает значение из 4-го столбца в той же строке, то есть из ячейки D3.
Важное замечание! Чтобы формула работала корректно, диапазон_поиска (A2:E11) функции ВПР и диапазон_поиска (A1:E1) функции ПОИСКПОЗ должны иметь одинаковое количество столбцов. Иначе число, переданное в номер_столбца, будет неправильным (не будет соответствовать положению столбца в массиве данных).
Функция ПРОСМОТРX для поиска в строках и столбцах
Недавно Microsoft представила еще одну функцию в Excel, которая призвана заменить все существующие функции поиска, такие как ВПР, ГПР и ИНДЕКС+ПОИСКПОЗ. Помимо прочего, ПРОСМОТРX может смотреть на пересечение определенной строки и столбца:
ПРОСМОТРX( значение_вертикальное ; диапазон_поиска_столбец ; ПРОСМОТРX( значение_горизонтальное ; диапазон_поиска_строка ; массив_данных ))
Для нашего примера набора данных формула выглядит следующим образом:
=ПРОСМОТРX(H1; A2:A11; ПРОСМОТРX(H2; B1:E1; B2:E11))
Примечание. В настоящее время ПРОСМОТРX — это функция, доступная только подписчикам Office 365 и более поздних версий.
В формуле используется функция ПРОСМОТРX для возврата всей строки или столбца. Внутренняя функция ищет целевой период времени в строке заголовка и возвращает все значения для этой недели (в данном примере для 3-й). Эти значения переходят в аргумент возвращаемый_массив внешнего ПРОСМОТРX:
=ПРОСМОТРX(H1; A2:A11; {544:87:488:102:87:433:126:132:111:565})
Внешняя функция ПРОСМОТРX ищет нужный товар в заголовках столбцов и извлекает значение из той же позиции из возвращаемого_массива.
Формула СУММПРОИЗВ для поиска по строке и столбцу
Функция СУММПРОИЗВ чрезвычайно универсальна — она может делать множество вещей, выходящих за рамки ее предназначения, особенно когда речь идет об оценке нескольких условий.
Чтобы найти значение на пересечении определенных строки и столбца, используйте эту общую формулу:
СУММПРОИЗВ ( диапазон_поиска_столбец = значение_вертикальное ) * ( диапазон_поиска_строка = значение_горизонтальное), массив_данных )
Чтобы выполнить поиск данных в массиве по строке и столбцу в нашем наборе данных, формула выглядит следующим образом:
=СУММПРОИЗВ((A2:A11=H1)*(B1:E1=H2); B2:E11)
Приведенный ниже вариант также будет работать:
=СУММПРОИЗВ((A2:A11=H1)*(B1:E1=H2)*B2:E11)
Теперь поясним подробнее. В начале мы сравниваем два значения поиска с заголовками строк и столбцов (целевой товар в H1 со всеми наименованиями в A2: A11 и целевой период времени в H2 со всеми неделями в B1: E1):
(A2:A11=H1)*(B1:E1=H2)
Это дает нам два массива значений ИСТИНА и ЛОЖЬ, где ИСТИНА означает совпадения:
{ЛОЖЬ:ИСТИНА:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ}) * ({ЛОЖЬ;ЛОЖЬ;ИСТИНА;ЛОЖЬ}
Операция умножения преобразует значения ИСТИНА и ЛОЖЬ в 1 и 0 и создает матрицу из 4 столбцов и 10 строк (строки разделяются двоеточием, а каждый столбец данных — точкой с запятой):
{0;0;0;0:0;0;1;0:0;0;0;0:0;0;0;0:0;0;0;0:0;0;0;0:0;0;0;0:0;0;0;0:0;0;0;0:0;0;0;0}
Функция СУММПРОИЗВ умножает элементы приведенного выше массива на элементы B2:E4, находящихся в тех же позициях:
{0;0;0;0:0;0;1;0:0;0;0;0:0;0;0;0:0;0;0;0:0;0;0;0:0;0; 0;0:0;0;0;0:0;0;0;0:0;0;0;0} * {455;345;544;366:65;77;87;56:766; 655;488;865:129;66;102;56:89;141;87;89:566;511;433;522:154; 144;126; 162:158;165;132;155:112;143;111; 125:677;466;565;766})
И поскольку умножение на ноль дает в результате ноль, остается только элемент, соответствующий 1 в первом массиве:
=СУММПРОИЗВ({0;0;0;0:0;0;87;0:0;0;0;0:0;0;0;0:0;0;0;0:0; 0;0;0:0;0;0;0:0;0;0;0:0;0;0;0:0;0;0;0})
Наконец, СУММПРОИЗВ складывает все элементы результирующего массива и возвращает значение 87.
Примечание . Если в вашей таблице несколько заголовков строк и/или столбцов с одинаковыми именами, итоговый массив будет содержать более одного числа, отличного от нуля. И все эти числа будут суммированы. В результате вы получите сумму значений, удовлетворяющую обоим критериям. Это то, что отличает формулу СУММПРОИЗВ от ПОИСКПОЗ и ВПР, которые возвращают только первое найденное совпадение.
Поиск в матрице с именованными диапазонами
Еще один достаточно простой способ поиска в массиве в Excel — использование именованных диапазонов. Рассмотрим пошагово:
Шаг 1. Назовите столбцы и строки
Самый быстрый способ назвать каждую строку и каждый столбец в вашей таблице:
- Выделите всю таблицу (в нашем случае A1:E11).
- На вкладке « Формулы » в группе « Определенные имена » щелкните « Создать из выделенного » или нажмите комбинацию клавиш Ctrl + Shift + F3.
- В диалоговом окне « Создание имени из выделенного » выберите « в строке выше » и « в столбце слева» и нажмите «ОК».
Это автоматически создает имена на основе заголовков строк и столбцов. Однако есть пара предостережений:
- Если ваши заголовки столбцов и/или строк являются числами или содержат определенные символы, которые не разрешены в именах Excel, то имена для таких столбцов и строк не будут созданы. Чтобы просмотреть список созданных имен, откройте Диспетчер имен (
Ctrl + F3). Если некоторые имена отсутствуют, определите их вручную. - Если некоторые из ваших заголовков строк или столбцов содержат пробелы, то они будут заменены символами подчеркивания, например, Неделя_1.
Шаг 2. Создание формулы поиска по матрице
Чтобы получить значение из матрицы на пересечении определенной строки и столбца, просто введите одну из следующих общих формул в пустую ячейку:
=имя_строки имя_столбца
Или наоборот:
=имя_столбца имя_строки
Например, чтобы получить продажу Sprite в 3-й неделе, используйте выражение:
=Sprite неделя_3
То есть, имена диапазонов здесь разделены пробелом, который в данном случае является оператором пересечения массивов.
Если кому-то нужны более подробные инструкции, опишем весь процесс пошагово:
- В ячейке, в которой вы хотите отобразить результат, введите знак равенства (=).
- Начните вводить имя целевой строки, Sprite. После того, как вы введете пару символов, Excel отобразит все существующие имена, соответствующие вашему вводу. Дважды щелкните нужное имя, чтобы ввести его в формулу.
- После имени строки введите пробел , который в данном случае работает как оператор пересечения.
- Введите имя целевого столбца ( в нашем случае неделя_3 ).
- Как только будут введены имена строки и столбца, Excel выделит соответствующую строку и столбец в вашей таблице, и вы нажмете Enter, чтобы завершить ввод:
Ваш поиск нужной ячейки в массиве выполнен, найден результат 87.
Вот какими способами можно выполнять поиск в массиве значений – в строках и столбцах таблицы Excel. Я благодарю вас за чтение и надеюсь еще увидеть вас в нашем блоге.
Еще несколько материалов по теме:
Поиск ВПР нескольких значений по нескольким условиям — В статье показаны способы поиска (ВПР) нескольких значений в Excel на основе одного или нескольких условий и возврата нескольких результатов в столбце, строке или в отдельной ячейке. При использовании Microsoft…
Поиск ИНДЕКС ПОИСКПОЗ по нескольким условиям — В статье показано, как выполнять быстрый поиск с несколькими условиями в Excel с помощью ИНДЕКС и ПОИСКПОЗ. Хотя Microsoft Excel предоставляет специальные функции для вертикального и горизонтального поиска, опытные пользователи…
ИНДЕКС ПОИСКПОЗ как лучшая альтернатива ВПР — В этом руководстве показано, как использовать ИНДЕКС и ПОИСКПОЗ в Excel и чем они лучше ВПР. В нескольких недавних статьях мы приложили немало усилий, чтобы объяснить основы функции ВПР новичкам и предоставить…
Поиск в массиве при помощи ПОИСКПОЗ — В этой статье объясняется с примерами формул, как использовать функцию ПОИСКПОЗ в Excel. Также вы узнаете, как улучшить формулы поиска, создав динамическую формулу с функциями ВПР и ПОИСКПОЗ. В Microsoft…
Функция ИНДЕКС в Excel — 6 примеров использования — В этом руководстве вы найдете ряд примеров формул, демонстрирующих наиболее эффективное использование ИНДЕКС в Excel. Из всех функций Excel, возможности которых часто недооцениваются и используются недостаточно, ИНДЕКС определенно занимает место…
Функция СУММПРОИЗВ с примерами формул — В статье объясняются основные и расширенные способы использования функции СУММПРОИЗВ в Excel. Вы найдете ряд примеров формул для сравнения массивов, условного суммирования и подсчета ячеек по нескольким условиям, расчета средневзвешенного значения…
Средневзвешенное значение — формула в Excel — В этом руководстве демонстрируются два простых способа вычисления средневзвешенного значения в Excel — с помощью функции СУММ (SUM) или СУММПРОИЗВ (SUMPRODUCT в английском варианте). В одной из предыдущих статей мы…


































любой таблице Excel массив. блок данных.

узнать или посчитать А на цифру

A10:H11 в нашем и столбцы, т.е. найти один или




































