Как сложить строки через одну в Excel: формулы, функции и макросы

Зачем суммировать строки через одну и когда это нужно

Работа с большими таблицами в Microsoft Excel часто требует нестандартных подходов к обработке данных. Одна из таких задач — суммирование строк через одну. На первый взгляд кажется, что это редкая операция, но на практике она востребована в бухгалтерии (например, при разделении дебетовых и кредитовых строк), аналитике (обработка данных по неделям или кварталам), а также при работе с чередующимися категориями товаров или клиентов.

Типичные сценарии использования:

  • 📊 Финансовые отчеты, где строки с доходами и расходами чередуются, и нужно посчитать только доходы (или только расходы).
  • 📅 Еженедельные/ежедневные данные, где требуется суммировать показатели по нечетным или четным периодам.
  • 📦 Инвентаризация, когда товары в таблице сгруппированы по категориям через строку.
  • 📈 Анализ A/B-тестов, где варианты тестов записаны в таблицу через строку.

В этой статье разберем 5 способов суммирования строк через одну — от базовых формул до автоматизации с помощью VBA. Каждый метод подходит для разных случаев: статических и динамических диапазонов, таблиц с заголовками, а также для обработки тысяч строк без ручного выделения.

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

Способ 1: Ручной ввод формулы для четных/нечетных строк

Самый простой метод — использовать функцию СУММ с явным указанием диапазонов. Подходит для небольших таблиц, где строки не добавляются динамически.

Пример для суммирования нечетных строк (1-я, 3-я, 5-я и т.д.) в столбце A:

=СУММ(A1;A3;A5;A7;A9)

Для четных строк (2-я, 4-я, 6-я):

=СУММ(A2;A4;A6;A8;A10)

⚠️ Внимание: При добавлении новых строк в таблицу формулу придется редактировать вручную. Этот способ не подходит для динамических данных.

Определите, какие строки нужно суммировать (четные или нечетные)

Посчитайте количество строк в диапазоне

Убедитесь, что в ячейках нет текстовых значений (только числа)

Проверьте, нет ли скрытых строк в диапазоне-->

Способ 2: Функция СУММПРОИЗВ для динамических диапазонов

Более гибкий вариант — использование СУММПРОИЗВ (или SUMPRODUCT в английской версии). Эта функция позволяет суммировать строки через одну автоматически, даже если данные в таблице обновляются.

Формула для нечетных строк (начиная с 1-й):

=СУММПРОИЗВ((СТРОКА(A1:A10)-СТРОКА(A1)+1)/2=ЦЕЛОЕ((СТРОКА(A1:A10)-СТРОКА(A1)+1)/2);A1:A10)

Для четных строк:

=СУММПРОИЗВ((СТРОКА(A1:A10)-СТРОКА(A1))/2=ЦЕЛОЕ((СТРОКА(A1:A10)-СТРОКА(A1))/2);A1:A10)

Разберем, как это работает:

  1. СТРОКА(A1:A10) — возвращает массив номеров строк (1, 2, 3...).
  2. -СТРОКА(A1)+1 — корректирует нумерацию, чтобы первая строка была 1.
  3. /2=ЦЕЛОЕ(/2) — проверяет, делится ли номер строки на 2 (для четных/нечетных).
  4. СУММПРОИЗВ — умножает массив условий на значения и суммирует результат.

Критическая деталь: если в диапазоне есть текстовые ячейки, они будут проигнорированы (в отличие от функции СУММ, которая вернет ошибку).

Тип строкФормулаПример для A1:A10
НечетныеСУММПРОИЗВ((СТРОКА()-1)/2=ЦЕЛОЕ(...);A1:A10)=СУММПРОИЗВ((СТРОКА(A1:A10)-1)/2=ЦЕЛОЕ((СТРОКА(A1:A10)-1)/2);A1:A10)
ЧетныеСУММПРОИЗВ(СТРОКА()/2=ЦЕЛОЕ(...);A1:A10)=СУММПРОИЗВ(СТРОКА(A1:A10)/2=ЦЕЛОЕ(СТРОКА(A1:A10)/2);A1:A10)
Начиная с N-й строкиДобавьте -СТРОКА(A$N)+1=СУММПРОИЗВ((СТРОКА(A5:A10)-СТРОКА(A$5)+1)/2=...;A5:A10)

Способ 3: Использование функции ДВССЫЛ для гибких диапазонов

Если нужно суммировать строки через одну в динамически меняющемся диапазоне (например, при добавлении новых данных), поможет комбинация ДВССЫЛ (или INDIRECT) с СЧЁТЗ.

Пример для нечетных строк:

=СУММПРОИЗВ(

(СТРОКА(ДВССЫЛ("A1:A"&СЧЁТЗ(A:A)))-СТРОКА(A1)+1)/2=

ЦЕЛОЕ((СТРОКА(ДВССЫЛ("A1:A"&СЧЁТЗ(A:A)))-СТРОКА(A1)+1)/2);

ДВССЫЛ("A1:A"&СЧЁТЗ(A:A))

)

Как это работает:

  • 🔹 СЧЁТЗ(A:A) — считает количество непустых ячеек в столбце A.
  • 🔹 ДВССЫЛ("A1:A"&...) — создает динамический диапазон от A1 до последней заполненной ячейки.
  • 🔹 Остальная часть формулы аналогична методу с СУММПРОИЗВ.

⚠️ Внимание: Функция ДВССЫЛ является летучей (volatile), то есть пересчитывается при любом изменении в книге. Это может замедлить работу с большими файлами. Для оптимизации используйте F9, чтобы заменить ДВССЫЛ на статический диапазон после первого расчета.

Способ 4: Суммирование через одну с условием (функция СУММЕСЛИ)

Если строки чередуются не по номеру, а по значению в другом столбце (например, "Доход"/"Расход"), удобнее использовать СУММЕСЛИ (или SUMIF).

Допустим, в столбце B указан тип строки ("Доход" или "Расход"), а в столбце A — суммы. Чтобы посчитать только доходы:

=СУММЕСЛИ(B1:B100; "Доход"; A1:A100)

Для более сложных условий (например, суммировать каждую вторую строку только для определенной категории) комбинируйте СУММЕСЛИ с вспомогательным столбцом:

  1. Добавьте столбец C и введите формулу для нумерации строк:
    =ЕСЛИ(B1="Доход"; СТРОКА(); "")
  2. Скопируйте формулу вниз. В столбце C появятся номера только для строк с "Доходом".
  3. Используйте СУММЕСЛИ с условием по четности:
    =СУММПРОИЗВ((C1:C100/2=ЦЕЛОЕ(C1:C100/2)); A1:A100)

Этот метод полезен, когда:

  • 📌 Чередование строк зависит от значения, а не от позиции.
  • 📌 Нужно суммировать по нескольким критериям (например, "Доход" + "Четная строка").
  • 📌 Данные импортируются из внешних источников, и порядок строк может меняться.
Как суммировать через одну в сводной таблице?

В сводных таблицах проще добавить группировку по вспомогательному столбцу (например, "Четная/Нечетная строка"), созданному с помощью формулы =ЕСЛИ(ОСТАТ(СТРОКА();2)=0; "Четная"; "Нечетная"). Затем используйте это поле в области "Значения" с функцией "Сумма".

Способ 5: Автоматизация с помощью VBA (для больших таблиц)

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

Sub SumOddRows()

Dim rng As Range

Dim total As Double

Dim cell As Range

Dim rowNum As Integer

' Запрашиваем диапазон у пользователя

On Error Resume Next

Set rng = Application.InputBox( _

"Выделите диапазон для суммирования нечетных строк:", _

"Суммирование через одну", _

Selection.Address, _

Type:=8)

On Error GoTo 0

If rng Is Nothing Then Exit Sub

total = 0

rowNum = 0

' Проходим по каждой ячейке в диапазоне

For Each cell In rng

rowNum = rowNum + 1

' Проверяем, что строка нечетная и ячейка не пустая

If rowNum Mod 2 = 1 And IsNumeric(cell.Value) Then

total = total + cell.Value

End If

Next cell

' Выводим результат

MsgBox "Сумма нечетных строк: " & total, vbInformation, "Результат"

End Sub

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

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

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

  • 🚀 Скорость: обрабатывает тысячи строк за доли секунды.
  • 🔄 Гибкость: можно модифицировать для четных строк, диапазонов с заголовками и т.д.
  • 📊 Интерактивность: пользователь выделяет диапазон вручную.

⚠️ Внимание: Макросы работают только в файлах с расширением .xlsm. При открытии файла с макросами Excel может показать предупреждение о безопасности — разрешите выполнение макросов, если доверяете источнику.

Сравнение методов: какой выбрать для вашей задачи

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

МетодПодходит дляПлюсыМинусыСкорость
Ручная формула СУМММалых статических таблиц (до 50 строк)Простота, нет ошибокТребует ручного редактирования⚡ Мгновенно
СУММПРОИЗВДинамических диапазонов (до 1000 строк)Автоматическое обновление, гибкостьСложный синтаксис, тормозит при больших данных🐢 Медленно на 10к+ строк
ДВССЫЛ + СУММПРОИЗВТаблиц с переменным количеством строкДинамический диапазон, не требует правокЛетучая функция, замедляет файл🐢 Медленно
СУММЕСЛИ с условиемТаблиц с категориями (не по номеру строки)Простота, наглядностьТребует вспомогательный столбец⚡ Быстро
VBA-макросОчень больших таблиц (10к+ строк)Мгновенный расчет, гибкостьТребует навыки программирования, риски безопасности🚀 Мгновенно

Рекомендации по выбору:

  • 📌 Для разовых задач на небольших таблицах хватит ручной формулы.
  • 📌 Если данные обновляются часто, но таблица не огромная — СУММПРОИЗВ.
  • 📌 Для категориальных данных (например, "Доход"/"Расход") — СУММЕСЛИ.
  • 📌 Для больших файлов (10 000+ строк) — только VBA.

FAQ: Частые вопросы о суммировании строк через одну

Можно ли суммировать через одну в Google Таблицах?

Да, в Google Sheets работают те же формулы, что и в Excel:

  • Для нечетных строк: =SUMPRODUCT((ROW(A1:A10)-1)/2=ROUNDDOWN((ROW(A1:A10)-1)/2); A1:A10)
  • Для четных: =SUMPRODUCT(ROW(A1:A10)/2=ROUNDDOWN(ROW(A1:A10)/2); A1:A10)

Отличие только в названиях функций: СТРОКАROW, ЦЕЛОЕROUNDDOWN.

Как суммировать через одну, если строки отсортированы не по порядку?

Если строки перемешаны (например, после сортировки по другому столбцу), используйте вспомогательный столбец:

  1. Добавьте столбец с формулой =СТРОКА()-СТРОКА($A$1)+1 (нумерация строк).
  2. Отсортируйте таблицу по этому столбцу.
  3. Примените любой метод суммирования через одну.

Или используйте СУММЕСЛИ с условием по дополнительному признаку (см. Способ 4).

Почему формула возвращает #ЗНАЧ!?

Ошибка #ЗНАЧ! возникает, если:

  • В диапазоне есть текстовые ячейки (например, заголовки). Исключите их из формулы или используйте ЕСЛИОШИБКА.
  • Используется ДВССЫЛ с некорректным адресом (например, ДВССЫЛ("A1:A") без указания последней строки).
  • В формуле СУММПРОИЗВ несовпадение размеров массивов (например, СТРОКА(A1:A10) и A1:A20).

Решение: проверьте диапазоны на соответствие и используйте =ЕСЛИОШИБКА(ваша_формула; 0).

Как суммировать через одну в фильтрованном диапазоне?

Функции СУММ и СУММПРОИЗВ игнорируют скрытые строки, но не учитывают фильтрацию. Чтобы суммировать только видимые строки через одну:

  1. Примените фильтр к таблице.
  2. Выделите видимые строки вручную (удерживая Ctrl).
  3. Посмотрите номер последней видимой строки в строке состояния (например, "Ср: 5 из 20").
  4. Используйте формулу с учетом видимых строк (например, =СУММ(A1;A3;A5) для 1-й, 3-й и 5-й видимых строк).

Для автоматизации нужен VBA-макрос с учетом свойства .Visible.

Можно ли суммировать через одну в Power Query?

Да, в Power Query (или Get & Transform в новых версиях Excel) это делается так:

  1. Загрузите данные в Power Query (Данные → Из таблицы/диапазона).
  2. Добавьте индекс строк: Добавить столбец → Индекс.
  3. Добавьте пользовательский столбец с формулой = if [Index] % 2 = 1 then [ВашСтолбец] else 0.
  4. Сгруппируйте данные по новому столбцу с операцией Сумма.

Преимущество: метод работает даже для миллионов строк и обновляется при изменении исходных данных.