Введение: зачем умножать таблицы в Excel?
Умножение матриц (или таблиц) в Microsoft Excel — это не просто академическая задача из курса линейной алгебры. На практике эта операция востребована в финансовом моделировании (например, при расчёте портфельных рисков), анализе данных (когда нужно преобразовать многомерные массивы), и даже в инженерии (для решения систем уравнений). Однако стандартные функции Excel не всегда интуитивно понятны: многие пользователи пытаются перемножить таблицы как обычные числа, получая ошибку #ЗНАЧ!.
В этой статье мы разберём 5 рабочих методов умножения таблиц — от базовой функции МУМНОЖ до автоматизации через Power Query и VBA. Особое внимание уделим типичным ошибкам (например, несовпадению размерностей матриц) и оптимизации вычислений для больших массивов данных. Если вы работаете с данными объёмом более 10 000 ячеек, вам пригодится раздел про альтернативные подходы.
Прежде чем перейти к инструкциям, убедитесь, что ваши таблицы соответствуют двум ключевым условиям: 1) Количество столбцов первой матрицы равно количеству строк второй (иначе умножение невозможно). 2) В ячейках нет текстовых значений или пустых полей — только числа.
Метод 1: Функция МУМНОЖ — классический подход
Функция МУМНОЖ (или MMULT в английской версии) — это стандартный инструмент для перемножения матриц в Excel. Она доступна во всех версиях программы, начиная с Excel 2007. Синтаксис функции прост:
=МУМНОЖ(массив1; массив2)
Где:
- 📌
массив1— диапазон ячеек первой матрицы (например,A1:C3). - 📌
массив2— диапазон второй матрицы (например,E1:G2).
Важно: МУМНОЖ возвращает массив результатов, поэтому её нужно вводить как формулу массива (в старых версиях Excel — нажимая Ctrl+Shift+Enter, в новых — просто подтверждая Enter). Например, для умножения матриц 3×2 и 2×3 результат будет матрицей 3×3, и вам потребуется выделить диапазон 3×3 перед вводом формулы.
Пример:
Допустим, у вас есть две таблицы:
- 🔹 Таблица 1 (3 строки × 2 столбца): значения в
A1:B3. - 🔹 Таблица 2 (2 строки × 3 столбца): значения в
D1:F2.
Чтобы получить результат, выделите диапазон 3×3 (например, H1:J3), введите =МУМНОЖ(A1:B3; D1:F2) и подтвердите.
Метод 2: Функция СУММПРОИЗВ — для поэлементного умножения
Если вам нужно не классическое матричное умножение, а поэлементное (т.е. перемножить ячейки с одинаковыми координатами), используйте функцию СУММПРОИЗВ. Она пригодится, например, для расчёта скалярного произведения векторов или взвешенных сумм.
Синтаксис:
=СУММПРОИЗВ(массив1; массив2)
Где массивы должны быть одинакового размера. В отличие от МУМНОЖ, здесь не требуется соблюдать правило размерностей матриц.
Пример использования:
Допустим, у вас есть два вектора-строки в A1:C1 и A2:C2. Формула =СУММПРОИЗВ(A1:C1; A2:C2) вернёт их скалярное произведение (сумму произведений соответствующих элементов).
Когда использовать СУММПРОИЗВ вместо МУМНОЖ?
Функция СУММПРОИЗВ подходит для:
🔸 Поэлементного умножения матриц одинакового размера (например, для применения маски к изображению, представленному в виде матрицы).
🔸 Расчёта взвешенных сумм (например, портфеля акций с весами).
🔸 Быстрого перемножения векторов без необходимости соблюдать правила матричного умножения.
МУМНОЖ же нужен для классического матричного умножения, где результат зависит от порядка операндов и их размерностей.Метод 3: Power Query — для больших таблиц
Если ваши таблицы содержат тысячи строк и столбцов, функции МУМНОЖ или СУММПРОИЗВ могут работать медленно или вообще не справиться с задачей. В этом случае поможет Power Query — инструмент для обработки больших данных, встроенный в Excel с версии 2016.
Алгоритм действий:
- Выделите первую таблицу и нажмите
Данные → Из таблицы/диапазона(илиData → From Table/Range). - В открывшемся редакторе Power Query добавьте пользовательский столбец с формулой умножения (например, для перемножения строки первой матрицы на столбец второй).
- Используйте
Table.Bufferдля оптимизации производительности. - Загрузите результат обратно в Excel.
Пример кода на языке M для Power Query:
let
Matrix1 = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
Matrix2 = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
// Преобразуем в списки для умножения
Result = List.Accumulate(
Matrix1[Column1],
{},
(state, current) => state & {List.Transform(Matrix2[Column1], each current * _)}
)
in
Result
Метод 4: VBA — автоматизация для сложных задач
Для повторяющихся задач или работы с динамически изменяющимися данными удобно использовать макросы на VBA. Например, следующий код умножает две матрицы и выводит результат в указанный диапазон:
Sub MultiplyMatrices()
Dim Matrix1 As Variant, Matrix2 As Variant
Dim Result() As Double
Dim i As Long, j As Long, k As Long
Dim Rows1 As Long, Cols1 As Long, Rows2 As Long, Cols2 As Long
' Задаём диапазоны матриц
Matrix1 = Range("A1:B3").Value
Matrix2 = Range("D1:F2").Value
Rows1 = UBound(Matrix1, 1)
Cols1 = UBound(Matrix1, 2)
Rows2 = UBound(Matrix2, 1)
Cols2 = UBound(Matrix2, 2)
' Проверяем совместимость размерностей
If Cols1 <> Rows2 Then
MsgBox "Количество столбцов первой матрицы не равно количеству строк второй!", vbCritical
Exit Sub
End If
' Инициализируем массив результатов
ReDim Result(1 To Rows1, 1 To Cols2)
' Умножение матриц
For i = 1 To Rows1
For j = 1 To Cols2
For k = 1 To Cols1
Result(i, j) = Result(i, j) + Matrix1(i, k) * Matrix2(k, j)
Next k
Next j
Next i
' Выводим результат в диапазон H1:J3
Range("H1").Resize(Rows1, Cols2).Value = Result
End Sub
Преимущества этого метода:
- 🔧 Гибкость: можно добавить дополнительную логику (например, проверку на нулевые значения).
- 🚀 Скорость: VBA обрабатывает большие массивы быстрее, чем формулы.
- 📊 Автоматизация: макрос можно запускать по кнопке или по событию (например, при изменении данных).
🔹 Включить вкладку "Разработчик" в настройках Excel
🔹 Проверить, что макросы разрешены в параметрах безопасности
🔹 Создать резервную копию файла перед запуском кода
🔹 Убедиться, что диапазоны матриц не содержат текстовых значений-->
Метод 5: Альтернативные инструменты — Python и Google Sheets
Если Excel не справляется с объёмом данных или вам нужны дополнительные возможности (например, работа с разреженными матрицами), рассмотрите альтернативы:
| Инструмент | Преимущества | Недостатки | Пример кода |
|---|---|---|---|
| Python (библиотека NumPy) | Обрабатывает матрицы размером миллионы×миллионы, поддерживает GPU-ускорение. | Требует установки Python и знания синтаксиса. | import numpy as np |
| Google Sheets | Функция MMULT работает аналогично Excel, но поддерживает онлайн-сотрудничество. |
Ограничение на размер данных (около 10 000 ячеек). | =MMULT(A1:B3; D1:F2) |
| MATLAB | Специализирован для матричных вычислений, встроенные визуализации. | Платное ПО, сложный для новичков. | result = matrix1 * matrix2; |
Для интеграции Python с Excel можно использовать надстройку PyXLL или экспортировать данные в .csv, обработать их в Jupyter Notebook, а затем импортировать обратно. Это актуально, например, для задач машинного обучения, где требуется умножение матриц размером 10000×10000.
Типичные ошибки и как их избежать
Даже опытные пользователи Excel сталкиваются с проблемами при умножении таблиц. Вот TOP-3 ошибки и их решения:
⚠️ Внимание: Если вы видите ошибку#ЗНАЧ!при использованииМУМНОЖ, скорее всего, количество столбцов первой матрицы не равно количеству строк второй. Проверьте размерности с помощью функции=СТРОКА(диапазон)и=СТОЛБЕЦ(диапазон).
Другие распространённые проблемы:
- 🔴 Ошибка #ССЫЛКА!: Возникает, если выходной диапазон перекрывается с исходными данными. Решение: перенесите результат в другое место на листе.
- 🔴 Медленная работа: При умножении больших матриц (например,
100×100) Excel может подвисать. Решение: используйте Power Query или VBA с оптимизацией циклов. - 🔴 Некорректные результаты: Если в ячейках есть скрытые символы (например, пробелы), Excel воспринимает их как текст. Решение: очистите данные функцией
=ЧИСТ(диапазон).
Критическая деталь: функция МУМНОЖ в Excel 2019 и новее поддерживает динамические массивы, но в версиях 2016 и старше требует ручного выделения выходного диапазона перед вводом формулы. Это часто становится причиной ошибок у пользователей, обновляющих версию программы.
FAQ: Ответы на частые вопросы
Можно ли умножить таблицу саму на себя (возвести в степень)?
Да, для этого последовательно применяйте функцию МУМНОЖ. Например, чтобы возвести матрицу A в квадрат, используйте формулу =МУМНОЖ(A; A). Для более высоких степеней (например, A³) создайте промежуточные расчёты: сначала умножьте A × A, затем результат умножьте на A ещё раз.
Почему результат умножения отличается от расчётов вручную?
Наиболее вероятные причины:
- 🔹 В ячейках есть нечисловые значения (даже невидимые символы).
- 🔹 Вы забыли подтвердить формулу массива (
Ctrl+Shift+Enterв старых версиях Excel). - 🔹 Ошибка в размерностях матриц (проверьте с помощью
=СЧЁТ(диапазон)).
Как умножить таблицу на число?
Для этого не нужны специальные функции — просто умножьте каждую ячейку на число. Например, чтобы умножить диапазон A1:B3 на 5, введите в ячейку C1 формулу =A1*5 и растяните её на весь диапазон. Альтернативно, используйте СУММПРОИЗВ с массивом-константой: =СУММПРОИЗВ(A1:B3; {5;5;5;5;5;5}).
Можно ли умножать таблицы с разными размерностями?
Нет, классическое матричное умножение требует, чтобы количество столбцов первой матрицы совпадало с количеством строк второй. Однако вы можете:
- 🔹 Добавить нулевые строки/столбцы для выравнивания размеров (если это допустимо в вашей задаче).
- 🔹 Использовать
СУММПРОИЗВдля поэлементного умножения матриц одинакового размера.
Как ускорить умножение больших таблиц?
Для матриц размером более 100×100:
- 🔹 Переключитесь на Power Query или VBA.
- 🔹 Отключите автоматический пересчёт формул (
Формулы → Параметры вычислений → Вручную). - 🔹 Используйте 64-разрядную версию Excel (она лучше работает с большими массивами).
- 🔹 Для критических задач экспортируйте данные в Python (библиотека NumPy).