Если в Microsoft Excel при работе с Power Query или Get & Transform вы увидели код на незнакомом языке, начинающийся с let...in, — это и есть М-Excel (или просто M). Это функциональный язык программирования, встроенный в инструменты преобразования данных Excel, начиная с версии 2016. Он автоматически генерируется при записи действий в редакторе Power Query, но также позволяет писать собственные скрипты для сложной обработки данных — от очистки столбцов до объединения таблиц из разных источников.
Многие пользователи путают М-Excel с классическими формулами Excel (например, ВПР или СУММЕСЛИМН), но это принципиально разные инструменты. М не работает в ячейках таблицы — он выполняется на этапе загрузки данных в Power Query, что делает его незаменимым для автоматизации рутинных операций с большими массивами. Например, с его помощью можно за 5 минут объединить 10 файлов .csv с разной структурой, тогда как вручную на это ушли бы часы.
В этой статье разберём, как М-Excel интегрирован в Excel, какие задачи решает эффективнее классических методов, и приведём практические примеры кода для начинающих. Также объясним, почему знание основ М становится обязательным навыком для аналитиков данных в 2026 году — особенно после выхода обновлений Microsoft 365 с расширенными возможностями Power Query.
Что такое М-Excel: определение и отличие от формул Excel
М-Excel (или Power Query Formula Language) — это язык запросов, разработанный Microsoft специально для инструмента Power Query (в новых версиях Excel называется Get & Transform). Его основное назначение — преобразование, очистка и объединение данных из различных источников до их загрузки в таблицу Excel.
Ключевые отличия М от классических формул Excel:
- 🔹 Место выполнения: М работает в Power Query Editor, а не в ячейках. Результат его выполнения — это таблица, которую вы загружаете в Excel, а не значение в одной ячейке.
- 🔹 Синтаксис: использует функциональный подход с конструкциями
let...in, в то время как Excel оперирует ячейками (=A1+B1). - 🔹 Источники данных: может подключаться к
SQL,JSON,XML, папкам с файлами, веб-страницам, тогда как формулы Excel работают только с данными внутри книги. - 🔹 Производительность: оптимизирован для обработки миллионов строк, тогда как формулы Excel тормозят на больших массивах.
Пример: если вам нужно объединить 50 файлов .xlsx из папки, добавить столбец с процентом от общего итога и отфильтровать строки по условию — в Excel на формулах это займёт часы и потребует промежуточных таблиц. В М-Excel та же задача решается 10 строками кода и выполняется за секунды.
⚠️ Внимание: М-Excel не заменяет формулы Excel, а дополняет их. Например, после загрузки данных из Power Query вы можете использоватьСУММЕСЛИилиINDEXдля дальнейшего анализа.
Где используется М-Excel: основные сценарии применения
Язык М интегрирован во все продукты Microsoft, где есть Power Query:
- 📊 Excel (начиная с 2016 года, полноценно — с 2019)
- 📈 Power BI (основной инструмент для ETL-процессов)
- 🖥️ Power Query Online (в Microsoft Fabric)
- 📂 Azure Data Factory (для облачных пайплайнов)
Типичные задачи, которые решает М-Excel:
| Задача | Пример на М | Альтернатива в Excel |
|---|---|---|
| Объединение таблиц | Table.Join(Table1, "ID", Table2, "ID") |
ВПР или INDEX/POSITION |
| Фильтрация строк | Table.SelectRows(#"Предыдущий шаг", each [Столбец] > 100) |
Фильтр таблицы или ФИЛЬТР |
| Преобразование типов данных | Table.TransformColumnTypes(Таблица, {{"Дата", type date}}) |
Ручная замена формата ячеек |
| Агрегация данных | Table.Group(Таблица, {"Категория"}, {{"Сумма", each List.Sum([Значение]), type number}}) |
СУММЕСЛИМН или сводные таблицы |
Главное преимущество М — автоматизация повторяющихся действий. Например, если каждый месяц вам приходят отчёты от 10 филиалов в разных форматах, вы можете один раз написать скрипт на М, который будет их объединять и очищать, а затем просто обновлять данные в один клик.
Базовый синтаксис М-Excel: разбор конструкции let...in
Любой скрипт на М начинается с ключевого слова let, за которым следуют шаги преобразований, и заканчивается in с указанием финального результата. Пример минимального кода:
let
Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
ФильтрованныеДанные = Table.SelectRows(Источник, each [Столбец1] > 0)
in
ФильтрованныеДанные
Разберём элементы:
- 📌
Источник— переменная, хранящая исходные данные (здесь — таблицу из текущей книги Excel). - 📌
ФильтрованныеДанные— новый шаг, где мы фильтруем строки по условию. - 📌
in— указывает, какой из шагов является финальным результатом.
Особенности синтаксиса М:
- 🔸 Регистрозависимость:
Table.SelectRowsиtable.selectrows— разные вещи (вторая вызовет ошибку). - 🔸 Отступы: не обязательны для работы кода, но критичны для читаемости.
- 🔸 Комментарии: начинаются с
//(однострочные) или/ ... /(многострочные).
⚠️ Внимание: Если вы копируете код М из интернета, убедитесь, что в нём используются точки (Table.SelectRows), а не запятые (Table,SelectRows) — это распространённая ошибка при ручном вводе.
Пример сложного скрипта на М
Скрипт ниже объединяет данные из папки с файлами, добавляет столбец с именем файла-источника и рассчитывает долю каждой строки от общего итога:
let
// Получаем список файлов в папке
Источник = Folder.Files("C:\Отчёты\2026"),
// Фильтруем только Excel-файлы
ФайлыExcel = Table.SelectRows(Источник, each [Extension] = ".xlsx"),
// Загружаем данные из каждого файла
Данные = Table.Combine(
List.Transform(
ФайлыExcel[Content],
(файл) => Excel.Workbook(файл){[Item="Лист1",Kind="Sheet"]}[Data]
)
),
// Добавляем столбец с именем источника
СИменемФайла = Table.AddColumn(Данные, "Источник", each ФайлыExcel{List.PositionOf(ФайлыExcel[Name], [ИмяФайла])}[Name], type text),
// Рассчитываем долю от общего итога
СДолями = Table.AddColumn(СИменемФайла, "Доля", each [Значение] / List.Sum(СИменемФайла[Значение]), type number)
in
СДолями
Как начать работать с М-Excel: пошаговая инструкция для новичков
Чтобы попробовать М, не нужно устанавливать дополнительные программы — он уже встроен в ваш Excel (если версия не старше 2016 года). Следуйте инструкции:
- Откройте Power Query Editor:
- Перейдите на вкладку
Данные→Получить данные→Из других источников→Пустой запрос. - В открывшемся редакторе выберите
Дополнительно→Дополнительный редактор.
- Перейдите на вкладку
- Напишите первый скрипт:
Вставьте код ниже и нажмите
Готово:letИсточник = {1..10},
Квадраты = List.Transform(Источник, each _ * _)
in
Квадраты
Этот код создаёт список чисел от 1 до 10 и возводит каждое в квадрат.
- Загрузите результат в Excel:
- Нажмите
Закрыть и загрузить→ данные появятся на новом листе.
- Нажмите
Для практики попробуйте модифицировать код:
- 🔢 Замените
{1..10}на{5..15}— диапазон чисел изменится. - 🔢 Вместо
_ * _используйте_ + 10— каждое число увеличится на 10.
1. Проверил версию Excel (2016 или новее)
2. Нашёл вкладку "Данные" → "Получить данные"
3. Создал пустой запрос и открыл дополнительный редактор
4. Вставил тестовый код и убедился, что нет синтаксических ошибок
5. Успешно загрузил результат в Excel-->
Топ-5 функций М-Excel, которые заменят сотни строк формул Excel
Некоторые операции в М выполняются одной строкой кода, тогда как в классическом Excel для этого потребуются десятки формул или макросов. Рассмотрим самые полезные функции:
1. Table.Join — объединение таблиц по ключу
Аналог ВПР, но работает с целыми таблицами и поддерживает разные типы объединений (JoinKind.LeftOuter, JoinKind.Inner и др.). Пример:
Table.Join(Таблица1, "ID", Таблица2, "ID", JoinKind.LeftOuter)
2. Table.Group — группировка с агрегацией
Замена сводным таблицам. Позволяет рассчитывать суммы, средние, количество уникальных значений и др. за один шаг:
Table.Group(
Таблица,
{"Категория"},
{
{"Сумма", each List.Sum([Значение]), type number},
{"Среднее", each List.Average([Значение]), type number}
}
)
3. Table.Pivot / Table.Unpivot — трансформация структуры
Преобразует "широкие" таблицы в "длинные" и наоборот. Например, если у вас данные по месяцам в столбцах (Январь, Февраль), а нужно в строках:
Table.UnpivotOtherColumns(Таблица, {"Продукт"}, "Месяц", "Продажи")
4. List.Accumulate — накопление значений
Позволяет выполнять итеративные вычисления (например, расчёт скользящего среднего или накопленного итога):
List.Accumulate(
{1..10},
0,
(state, current) => state + current
)
5. Web.Page — парсинг данных с веб-страниц
Извлекает таблицы с сайтов без необходимости копировать данные вручную:
Web.Page(Web.Contents("https://example.com/data"))
Эти функции покрывают 80% задач по преобразованию данных. Для остальных случаев в М есть более 700 встроенных функций (полный список — в официальной документации Microsoft).
Распространённые ошибки при работе с М-Excel и как их избежать
Даже опытные пользователи Excel сталкиваются с ошибками в М из-за особенностей синтаксиса. Вот самые частые проблемы и их решения:
| Ошибка | Причина | Решение |
|---|---|---|
Expression.Error: The name 'Таблица' wasn't recognized |
Опечатка в имени переменной или она не объявлена | Проверьте регистр и наличие let перед объявлением |
Token Comma Expected |
Пропущена запятая между аргументами функции | Добавьте запятую (например, Table.SelectRows(Таблица, each [Столбец] > 100)) |
DataFormat.Error: We couldn't convert to Number |
Попытка выполнить математическую операцию с текстом | Используйте Table.TransformColumnTypes для преобразования типов |
Expression.Error: The field 'Столбец' of the record wasn't found |
Ошибка в имени столбца (лишние пробелы, неверный регистр) | Проверьте имя столбца в исходных данных (можно скопировать из заголовка таблицы) |
Чтобы минимизировать ошибки:
- 🔧 Используйте пошаговое создание запросов в интерфейсе Power Query, а затем изучайте сгенерированный код.
- 🔧 Проверяйте типы данных с помощью
Value.TypeилиTable.Schema. - 🔧 Для отладки используйте
//для комментирования частей кода.
⚠️ Внимание: Если ваш скрипт перестал работать после обновления Excel, проверьте изменения в синтаксисе М для вашей версии. Например, в Excel 2021 некоторые функции были переименованы для совместимости с Power BI.
Продвинутые техники: как ускорить работу с М-Excel
Для обработки больших объёмов данных (миллионы строк) или сложных преобразований используйте эти приёмы:
1. Параметризация запросов
Создайте параметры, чтобы не править код при изменении условий. Например:
let
ПороговоеЗначение = 100, // Параметр
Источник = Excel.CurrentWorkbook(){[Name="Данные"]}[Content],
ФильтрованныеДанные = Table.SelectRows(Источник, each [Столбец1] > ПороговоеЗначение)
in
ФильтрованныеДанные
2. Использование Table.Buffer
Если один и тот же набор данных используется многократно, буферизуйте его для ускорения:
let
Источник = Table.Buffer(Excel.CurrentWorkbook(){[Name="Данные"]}[Content]),
// Далее Источник можно использовать многократно без повторной загрузки
Шаг1 = Table.SelectRows(Источник, each [Столбец1] > 0),
Шаг2 = Table.Group(Источник, {"Категория"}, {{"Сумма", each List.Sum([Значение]), type number}})
in
Шаг2
3. Оптимизация с помощью List.Generate
Для генерации последовательностей или рекурсивных вычислений:
// Генерирует числа Фибоначчи до 1000
List.Generate(
() => {0, 1},
each _[1] < 1000,
each {_[1], _[0] + _[1]}
)
4. Работа с Binary для неструктурированных данных
Позволяет читать бинарные файлы (например, .pdf или .jpg) и извлекать из них данные:
let
Файл = File.Contents("C:\Документы\отчёт.pdf"),
Текст = Pdf.Tables(Файл)[Data]{0}
in
Текст
Для изучения продвинутых техник рекомендуем официальный курс Microsoft по Power Query и сообщество Power BI Community, где делятся готовыми решениями.
FAQ: Частые вопросы о М-Excel
🔹 Можно ли использовать М-Excel в Excel Online?
Нет, Power Query (и соответственно М) доступен только в десктопных версиях Excel 2016 и новее, а также в Excel для Mac (начиная с версии 16.50). В Excel Online вы можете только просматривать результаты ранее созданных запросов, но не редактировать их.
🔹 Как сохранить скрипт М для использования в другом файле?
Скрипты М хранятся внутри файла Excel. Чтобы перенести их:
- Откройте Power Query Editor →
Дополнительно→Дополнительный редактор. - Скопируйте код (Ctrl+A → Ctrl+C).
- В новом файле создайте пустой запрос и вставьте код.
Для повторного использования сложных функций создавайте пользовательские функции в М (аналог ЛЯМБДА в Excel).
🔹 Почему мой код М работает в Power BI, но не работает в Excel?
Разница связана с:
- Версией движка М (в Power BI он обновляется чаще).
- Ограничениями Excel на некоторые функции (например,
Web.Contentsможет блокироваться политиками безопасности). - Разными настройками конфиденциальности данных (
File/Web/Database).
Проверьте совместимость функций для вашей версии Excel.
🔹 Как отладить код М, если он не работает?
Используйте эти техники:
- Пошаговое выполнение: В Power Query Editor следите за результатом каждого шага в панели
Шаги применимых запросов. - Комментирование: Отключайте части кода с
//, чтобы локализовать ошибку. - Просмотр данных: Вставляйте
// Table.View(Таблица)перед проблемным участком. - Логирование: Добавьте столбец с отладочной информацией:
Table.AddColumn(Таблица, "Отладка", each if [Столбец1] = null then "NULL" else "OK")
🔹 Где взять готовые примеры кода на М?
Источники с практическими примерами:
- Официальный репозиторий Microsoft на GitHub.
- Блог сообщества Power BI (раздел
Power Query). - Excelguru (руководства по М для Excel).
- Stack Overflow (тег
powerquery).