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

Умножение матриц — одна из самых востребованных операций в линейной алгебре, статистике и инженерных расчётах. Но когда речь идёт о перемножении трёх матриц в Microsoft Excel, многие пользователи сталкиваются с трудностями: стандартные функции работают только с парами матриц, а последовательное применение формул чревато ошибками согласования размерностей. Эта статья не просто объяснит, как выполнить операцию, но и раскроет нюансы, которые экономят часы debugging’а.

Вы думаете, что умножить три матрицы в Excel так же просто, как сложить три числа? Это заблуждение: матричное умножение неассоциативно в плане порядка операций, и Excel не имеет встроенной функции для цепочки из трёх матриц. Здесь важно понимать, что результат зависит от последовательности действий: `(A×B)×C` не всегда равно `A×(B×C)` из-за особенностей округления и алгоритмов. Мы разберём все подводные камни — от проверки размерностей до оптимизации формул для больших массивов.

В отличие от ручных вычислений, где можно последовательно перемножать пары, в Excel требуется либо вложенность функций, либо использование промежуточных массивов. А если матрицы динамические (например, подгружаются из Power Query), задача усложняется вдвойне. Эта статья подойдёт и новичкам, и тем, кто уже пробовал МУМНОЖ, но получал ошибку #ЗНАЧ!.

1. Подготовка данных: правила согласования матриц

Прежде чем перемножать три матрицы, убедитесь, что их размерности совместимы. Для операции `A × B × C` должно выполняться два условия:

  1. Число столбцов матрицы A равно числу строк матрицы B.
  2. Число столбцов матрицы B равно числу строк матрицы C.

Если хотя бы одно из этих правил нарушено, Excel вернёт ошибку #ЗНАЧ!. Например, нельзя умножить матрицы размером 3×2, 3×3 и 2×4: первая пара несовместима (2 ≠ 3).

Проверьте размерности ваших матриц с помощью функции СТРОКА() и СТОЛБЕЦ():

=СТРОКА(A1:A3)  → вернёт 3 (количество строк)

=СТОЛБЕЦ(A1:C1) → вернёт 3 (количество столбцов)

⚠️ Внимание: Если матрицы содержат текст или пустые ячейки, Excel автоматически преобразует их в ноль. Это может исказить результат! Используйте ЕЧИСЛО() для проверки данных.

Для наглядности приведём таблицу совместимых размерностей:

Матрица AМатрица BМатрица CРезультат
2×33×44×22×2
5×11×33×15×1
4×44×44×44×4
3×22×55×13×1

Если ваши матрицы не подходят под эти схемы, придётся трансформировать их (например, добавить строки/столбцы с нулями) или пересматривать задачу.

📊 Как часто вы работаете с матрицами в Excel?
Ежедневно
Несколько раз в неделю
Редко
Никогда

2. Метод 1: Последовательное применение МУМНОЖ

Самый очевидный способ — использовать функцию МУМНОЖ (или MMULT в английской версии) дважды. Сначала умножаем первые две матрицы, затем результат — на третью.

Допустим, у нас есть:

  • 📌 Матрица A в диапазоне B2:D4 (3×3)
  • 📌 Матрица B в диапазоне F2:H4 (3×3)
  • 📌 Матрица C в диапазоне J2:L4 (3×3)

Формула для итоговой матрицы (например, в ячейке N2):

=МУМНОЖ(МУМНОЖ(B2:D4; F2:H4); J2:L4)
Важно: это формула массива! После ввода нажмите Ctrl+Shift+Enter (в новых версиях Excel формула автоматически станет массивом).

Если вы видите фигурные скобки `{}` вокруг формулы — всё сделано правильно. Если нет, повторите ввод с горячими клавишами.

⚠️ Внимание: В Excel 365 и 2021 формулы массивов вводятся без Ctrl+Shift+Enter, но в старых версиях (2016 и ранее) это обязательно. Проверьте свою версию в Файл → Учётная запись → О программе Excel.

Убедиться, что размерности совместимы|Проверить ячейки на наличие текста/пустот|Выделить диапазон для результата (строки×столбцы)|Ввести формулу как массив (Ctrl+Shift+Enter)

-->

3. Метод 2: Использование промежуточной матрицы

Если последовательное умножение даёт ошибки (например, из-за ограничений на вложенность формул), разбейте задачу на два этапа:

  1. Сначала умножьте A и B, сохраните результат в отдельном диапазоне.
  2. Затем умножьте полученную матрицу на C.

Пример:

  1. В диапазоне B10:D12 введите формулу =МУМНОЖ(B2:D4; F2:H4) и подтвердите как массив.
  2. В диапазоне F10:H12 введите =МУМНОЖ(B10:D12; J2:L4) (опять как массив).

Преимущества этого метода:

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

Недостаток: занимает больше места на листе. Если матрицы большие (например, 100×100), этот метод может замедлить работу книги.

4. Метод 3: Функция MMULT в Power Query (для динамических данных)

Если ваши матрицы подгружаются из внешних источников (например, из базы данных или CSV), удобнее использовать Power Query. Этот метод подходит для автоматизации и работы с большими наборами данных.

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

  1. Импортируйте матрицы в Power Query через Данные → Получить данные → Из таблицы/диапазона.
  2. Для каждой матрицы создайте запрос (например, Query_A, Query_B, Query_C).
  3. В редакторе Power Query добавьте пользовательский столбец с формулой умножения (на языке M):
    = Table.FromRecords({
    

    [Row1 = List.Transform(Query_A[Column1], (x) => List.Sum(List.Transform(Query_B[Column1], (y) => x * y)))]

    })

    Примечание: Это упрощённый пример для одной строки. Для полноценного умножения потребуется более сложный скрипт.
  4. Загрузите результат обратно в Excel.

Power Query позволяет:

  • 🔄 Обновлять данные одним кликом.
  • 📊 Работать с матрицами размером более 10 000×10 000 (в отличие от ограничений стандартных формул).
  • 🔗 Комбинировать умножение с другими преобразованиями (фильтрация, сортировка).
⚠️ Внимание: Скрипты на языке M требуют знания основ программирования. Для новичков проще использовать методы 1 или 2.
Пример полного скрипта для умножения трёх матриц в Power Query

let

A = Excel.CurrentWorkbook(){[Name="Матрица_A"]}[Content],

B = Excel.CurrentWorkbook(){[Name="Матрица_B"]}[Content],

C = Excel.CurrentWorkbook(){[Name="Матрица_C"]}[Content],

// Преобразуем таблицы в списки списков

ListA = Table.ToRows(A),

ListB = Table.ToRows(B),

ListC = Table.ToRows(C),

// Умножаем A и B

AB = List.Transform(ListA, (rowA) =>

List.Transform(List.Transform(ListB, (rowB) =>

List.Sum(List.Zip({rowA, rowB}))), (x) => x)),

// Умножаем результат на C

ABC = List.Transform(AB, (rowAB) =>

List.Transform(List.Transform(ListC, (rowC) =>

List.Sum(List.Zip({rowAB, rowC}))), (x) => x)),

// Преобразуем обратно в таблицу

Result = Table.FromList(ABC, Splitter.SplitByNothing(), {"Column1", "Column2", "Column3"})

in

Result

5. Метод 4: VBA-скрипт для умножения трёх матриц

Если вам нужно умножать матрицы регулярно, напишите макрос. Это ускорит процесс и уменьшит риск ошибок. Ниже приведён код для умножения трёх матриц с проверкой размерностей:

Sub MultiplyThreeMatrices()

Dim ws As Worksheet

Set ws = ActiveSheet

' Диапазоны матриц (измените под свои данные)

Dim rngA As Range, rngB As Range, rngC As Range

Set rngA = ws.Range("B2:D4") ' 3x3

Set rngB = ws.Range("F2:H4") ' 3x3

Set rngC = ws.Range("J2:L4") ' 3x3

' Проверка размерностей

If rngA.Columns.Count <> rngB.Rows.Count Or _

rngB.Columns.Count <> rngC.Rows.Count Then

MsgBox "Ошибка: несовместимые размерности матриц!", vbCritical

Exit Sub

End If

' Умножение A и B

Dim tempArray() As Variant

tempArray = MatrixMultiply(rngA, rngB)

' Умножение результата на C

Dim resultArray() As Variant

resultArray = MatrixMultiply(Application.Transpose(tempArray), rngC)

' Вывод результата (например, в диапазон N2:P4)

ws.Range("N2").Resize(UBound(resultArray, 1), UBound(resultArray, 2)).Value = resultArray

End Sub

Function MatrixMultiply(rng1 As Range, rng2 As Range) As Variant

Dim i As Long, j As Long, k As Long

Dim m As Long, n As Long, p As Long

m = rng1.Rows.Count

n = rng1.Columns.Count

p = rng2.Columns.Count

ReDim result(1 To m, 1 To p) As Double

For i = 1 To m

For j = 1 To p

result(i, j) = 0

For k = 1 To n

result(i, j) = result(i, j) + rng1.Cells(i, k).Value * rng2.Cells(k, j).Value

Next k

Next j

Next i

MatrixMultiply = result

End Function

Как использовать этот код:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Запустите макрос через F5 или кнопку на листе.

Преимущества VBA:

  • 🚀 Работает в 10–100 раз быстрее формул для больших матриц (1000×1000).
  • 🔧 Можно добавить обработку ошибок (например, проверку на пустые ячейки).
  • 📁 Легко интегрировать в пользовательские функции (UDF).
⚠️ Внимание: Макросы отключены по умолчанию в Excel из-за риска вирусов. Включите их в Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов (выберите "Включить все макросы").

6. Типичные ошибки и как их избежать

Даже опытные пользователи Excel допускают ошибки при умножении матриц. Вот самые распространённые:

  • 🔴 #ЗНАЧ!: Несовпадение размерностей. Проверьте количество столбцов первой матрицы и строк второй (и так далее для третьей).
  • 🔴 #ССЫЛКА!: Формула массива введена неверно. Убедитесь, что выделили правильный диапазон для результата до ввода формулы.
  • 🔴 Неверный результат: Забыли нажать Ctrl+Shift+Enter в Excel 2016 или ранее. В новых версиях проверьте, появились ли фигурные скобки `{}`.
  • 🔴 Медленная работа книги: Слишком большие матрицы (более 1000×1000) в формулах. Используйте VBA или Power Query.
  • 🔴 Округление: Excel хранит числа с точностью до 15 знаков. Для финансовых расчётов используйте функцию ТОЧНОСТЬ.

Если результат умножения кажется нелогичным, проверьте:

  1. Содержат ли матрицы скрытые символы (пробелы, неразрывные пробелы). Используйте СЖПРОБЕЛЫ().
  2. Нет ли в ячейках формул вместо чисел (например, =A1*2 вместо 5).
  3. Не переполнен ли диапазон результата. Если итоговая матрица 10×10, а вы выделили только 5×5 ячеек, часть данных будет утеряна.

Для отладки используйте функцию ПРОСМОТР(), чтобы вывести промежуточные значения:

=ПРОСМОТР(1; 0/(МУМНОЖ(B2:D4; F2:H4)=0); МУМНОЖ(B2:D4; F2:H4))

Эта формула покажет первую ненулевую ячейку результата умножения A и B.

7. Альтернативные инструменты для умножения матриц

Если Excel не справляется с задачей (например, из-за ограничений на размер матриц), рассмотрите альтернативы:

ИнструментПреимуществаНедостатки
Python (библиотека NumPy) Обрабатывает матрицы любого размера, высокая скорость. Требует знания программирования.
MATLAB Специализирован для матричных вычислений, встроенные функции. Платный, сложный для новичков.
Google Sheets Функция MMULT работает аналогично Excel, но с лучшей поддержкой массивов. Ограничения на размер данных (5 млн ячеек).
Wolfram Alpha Поддерживает символьные вычисления (например, с переменными). Не подходит для автоматизации в Excel.

Если вам нужно остаться в экосистеме Microsoft, попробуйте Excel Online или Power BI — они лучше оптимизированы для работы с большими массивами.

Для перехода на Python достаточно установить библиотеку NumPy и использовать следующий код:

import numpy as np

A = np.array([[1, 2], [3, 4]])

B = np.array([[5, 6], [7, 8]])

C = np.array([[9, 10], [11, 12]])

result = np.dot(np.dot(A, B), C)

print(result)

=LET(

AB; МУМНОЖ(B2:D4; F2:H4);

ABC; МУМНОЖ(AB; J2:L4);

ABC

)

Это упрощает чтение сложных вычислений.

-->

FAQ: Ответы на частые вопросы

Можно ли умножить три матрицы в Excel без VBA?

Да, используйте вложенные функции МУМНОЖ (метод 1) или промежуточные диапазоны (метод 2). VBA нужен только для очень больших матриц или автоматизации.

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

Причины:

  • Excel округляет числа до 15 знаков после запятой.
  • В ручных расчётах могли быть ошибки (например, пропущенный знак).
  • В матрицах есть скрытые пробелы или текстовые значения (используйте ЕЧИСЛО()).

Проверьте промежуточные результаты с помощью ОКРУГЛ().

Как умножить три матрицы, если они находятся на разных листах?

Укажите адреса с именем листа:

=МУМНОЖ(МУМНОЖ(Лист1!B2:D4; Лист2!F2:H4); Лист3!J2:L4)

Или присвойте диапазонам имена через Формулы → Диспетчер имён.

Можно ли умножить три матрицы в Excel Online?

Да, функция MMULT работает и в веб-версии, но:

  • Нет поддержки формул массивов (не нужно нажимать Ctrl+Shift+Enter).
  • Ограничение на размер данных — до 5 млн ячеек.

Для больших матриц используйте настольную версию Excel.

Как проверить, что умножение выполнено верно?

Способы проверки:

  • 🔢 Умножьте матрицы вручную для небольшого фрагмента (например, первые 2 строки и 2 столбца).
  • 🔄 Используйте другой инструмент (например, Wolfram Alpha) для сравнения.
  • 📊 Постройте график результата (если матрицы квадратные, определитель должен сохраняться при умножении на единичную матрицу).