Умножение таблиц в Excel: от простых формул до продвинутых техник

Введение: зачем умножать таблицы в 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.

Алгоритм действий:

  1. Выделите первую таблицу и нажмите Данные → Из таблицы/диапазона (или Data → From Table/Range).
  2. В открывшемся редакторе Power Query добавьте пользовательский столбец с формулой умножения (например, для перемножения строки первой матрицы на столбец второй).
  3. Используйте Table.Buffer для оптимизации производительности.
  4. Загрузите результат обратно в 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

📊 Какой метод умножения таблиц вы используете чаще?
Функция МУМНОЖ
Функция СУММПРОИЗВ
Power Query
VBA
Другой

Метод 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
result = np.dot(matrix1, matrix2)
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 ещё раз.

Почему результат умножения отличается от расчётов вручную?

Наиболее вероятные причины:

  • 🔹 В ячейках есть нечисловые значения (даже невидимые символы).
  • 🔹 Вы забыли подтвердить формулу массива (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).