Найти в Дзене
Макрос решает

Как перенести данные между листами в Excel с помощью макросов: Часть 2

Если вы хотите, чтобы Excel работал за вас, а не наоборот — пора осваивать макросы. В первой части мы подготовили листы, задали структуру отчёта и научились запускать простой макрос с фильтрацией по порогу. Теперь мы углубимся в ключевые понятия: циклы, условия и перенос данных между листами. 📌 Всё пойдёт строго по плану: Готовы? Поехали. Когда вы работаете с несколькими листами, не пишите Sheets("Data") каждый раз — лучше использовать сокращения. Объявим переменные для листов: Dim Dsheet As Worksheet
Set Dsheet = ThisWorkbook.Sheets("Data")
Dim Rsheet As Worksheet
Set Rsheet = ThisWorkbook.Sheets("Report") Теперь вы можете спокойно писать Dsheet.Cells(...) или Rsheet.Cells(...) — Excel всё поймёт. Чтобы проверить каждую строку таблицы Data, нам нужен цикл: Dim x As Integer
For x = 2 To 100
' здесь будет условие и перенос
Next x Почему от 2 до 100? Предполагаем, что первая строка — заголовки, а 100 — безопасный запас. Вы можете заменить 100 на расчёт последней строки, но об этом
Оглавление
  • Циклы, условия и создание динамического отчёта

Если вы хотите, чтобы Excel работал за вас, а не наоборот — пора осваивать макросы. В первой части мы подготовили листы, задали структуру отчёта и научились запускать простой макрос с фильтрацией по порогу. Теперь мы углубимся в ключевые понятия: циклы, условия и перенос данных между листами.

📌 Всё пойдёт строго по плану:

  1. Назначим переменные для листов
  2. Напишем цикл с условием
  3. Перенесём данные при выполнении условия
  4. Обеспечим уникальность строк в отчёте
  5. Привяжем макрос к кнопке
  6. Посмотрим, как отлаживать код
  7. Обсудим, как можно его улучшить

Готовы? Поехали.

🔧 1. Настройка листов и переменных

Когда вы работаете с несколькими листами, не пишите Sheets("Data") каждый раз — лучше использовать сокращения. Объявим переменные для листов:

Dim Dsheet As Worksheet

Set Dsheet = ThisWorkbook.Sheets("Data")

Dim Rsheet As Worksheet

Set Rsheet = ThisWorkbook.Sheets("Report")

Теперь вы можете спокойно писать Dsheet.Cells(...) или Rsheet.Cells(...) — Excel всё поймёт.

🔁 2. Организация цикла по строкам

Чтобы проверить каждую строку таблицы Data, нам нужен цикл:

Dim x As Integer

For x = 2 To 100

' здесь будет условие и перенос

Next x

Почему от 2 до 100? Предполагаем, что первая строка — заголовки, а 100 — безопасный запас. Вы можете заменить 100 на расчёт последней строки, но об этом поговорим позже.

✅ 3. Проверка условий и фильтрация по порогу

Перед началом цикла нужно спросить у пользователя, какое значение считать "высокими продажами":

Dim threshold As Double

threshold = InputBox("Введите порог продаж", "Отчёт", 20000)

Теперь в теле цикла проверим, превышает ли значение в 4-й колонке (сумма продаж) указанный порог:

If Dsheet.Cells(x, 4).Value > threshold Then

' перенос данных пойдёт здесь

End If

📤 4. Перенос данных на другой лист

Если условие выполнено, надо взять имя (1-я колонка) и сумму продаж (4-я колонка) и записать их на Report. Но куда?

Допустим, у нас переменная y отслеживает строку на листе отчёта. Начнём с неё:

Dim y As Integer

y = 2

Теперь переносим данные:

Rsheet.Cells(y, 1).Value = Dsheet.Cells(x, 1).Value

Rsheet.Cells(y, 2).Value = Dsheet.Cells(x, 4).Value

y = y + 1

Это очень важно: каждый раз при совпадении условия y увеличивается, чтобы данные не перезаписывались на одной строке.

🛠 5. Итоговый код — сборка в единое целое

Вот как выглядит полный макрос:

Sub My()

Dim threshold As Double

threshold = InputBox("Введите порог продаж", "Отчёт", 20000)

Dim Dsheet As Worksheet

Set Dsheet = ThisWorkbook.Sheets("Data")

Dim Rsheet As Worksheet

Set Rsheet = ThisWorkbook.Sheets("Report")

Dim x As Integer

Dim y As Integer

y = 2

For x = 2 To 100

If Dsheet.Cells(x, 4).Value > threshold Then

Rsheet.Cells(y, 1).Value = Dsheet.Cells(x, 1).Value

Rsheet.Cells(y, 2).Value = Dsheet.Cells(x, 4).Value

y = y + 1

End If

Next x

End Sub

🐞 6. Как отлаживать и проверять макрос

Чтобы не запускать макрос "вслепую", можно использовать отладку:

  • F8 — пошаговое выполнение
  • F5 — выполнение до конца
  • Маркеры остановки — красные точки слева от строки

Так вы сможете точно видеть, как изменяются значения x, y, что передаётся и куда.

🖱 7. Привязка к кнопке на листе

Чтобы запуск был удобным:

  1. В Excel на вкладке Вставка → Форма → Кнопка
  2. Рисуете кнопку на листе Report
  3. Правый клик по кнопке → Назначить макрос
  4. Выбираете My
  5. Меняете текст на что-то вроде "Создать отчёт"

Теперь не нужно заходить в редактор — всё запускается по клику.

💡 Полезные дополнения

В следующей части мы:

  • Добавим очистку отчёта перед перезаписью
  • Сделаем форматирование (жирный шрифт, выравнивание)
  • Рассмотрим автоматическое определение последней строки

А пока — убедитесь, что:

  • Колонки совпадают (1 и 4 на Data, 1 и 2 на Report)
  • Диапазон цикла охватывает все строки
  • Вы не забыли увеличить y, иначе данные затираются

🔚 Заключение

С помощью простого цикла и условия If вы уже можете создавать живые отчёты по данным, которые меняются каждый день. Это первый шаг к автоматизации рутинной работы в Excel. Даже если вы не разработчик — поверьте, макросы дадут вам конкурентное преимущество.

🔔 Подпишитесь на канал, если хотите продолжения!

💬 Напишите в комментариях, как вы применили этот макрос у себя, и какие функции хотели бы добавить.

Ваш отклик помогает делать уроки ещё полезнее и понятнее. Спасибо, что учитесь вместе!