Компилирование трех столбцов из десяти листов в десять столбцов на одном своде.

Вопрос или проблема

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

У нас есть 10 человек, каждый вручную изменяет цвета ячеек на своем листе, состоящем из трех колонок: январь, февраль и март. Затем мы хотим создать сводный лист, который автоматически подбирает цвета, выбранные каждым человеком.

Обязательные условия: у каждого человека есть свой лист, и цвета изменяются вручную. Я могу реорганизовать, как настроены колонки, но чем проще это будет для этих людей, тем лучше.

Вот что у меня пока получилось:

Dim s As Integer

For s = 1 To 99 
Sheet1.Range("A" + s) = Sheet2.Range("A" + s) 
Next

И повторить это десять раз.

Проблема в том, что если они окрашивают свои личные листы в три колонки, а сводный лист состоит из одной колонки, s не работает как переменная.

Добавление условия if s < whatever, тогда такие-то и такие-то выражения не работали со мной, так как мои знания VBA довольно базовые.

Как мне объединить три цвета в одной колонке? Надеюсь, это объяснение имеет смысл.

Ответ или решение

Как собрать три столбца из десяти листов в десять столбцов на одном сводном листе в Excel

Ваша задача по сбору данных из десяти различных листов в одну сводную таблицу требует автоматизации процесса с помощью VBA (Visual Basic for Applications). Вы хотите создать сводный лист, который будет автоматически отображать цветовые изменения, внесенные пользователями в их личных листах. Давайте разберем этот процесс подробно.

1. Понимание структуры данных

У вас есть 10 листов, каждый из которых соответствует одному из 10 сотрудников. Каждый лист содержит три столбца: «Январь», «Февраль» и «Март». Каждый сотрудник изменяет цвет ячеек в этих столбцах вручную. Вы хотите, чтобы сводный лист отображал цветовые данные из этих трёх столбцов для каждого сотрудника в отдельных столбцах.

2. Подготовка сводного листа

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

  • Столбец A: Сотрудник 1
  • Столбец B: Сотрудник 2
  • Столбец J: Сотрудник 10

3. Написание макроса

Теперь давайте напишем макрос, который будет проходить по всем листам и собирать цветовые значения из трех столбцов для каждого сотрудника. Мы будем использовать метод .Interior.Color для получения цвета ячейки, и будем записывать этот цвет в соответствующий столбец на сводном листе.

Пример кода VBA

Sub CompileSchedule()
    Dim ws As Worksheet
    Dim summarySheet As Worksheet
    Dim personIndex As Integer
    Dim monthIndex As Integer
    Dim rowIndex As Integer

    ' Создаем или активируем сводный лист
    On Error Resume Next
    Set summarySheet = ThisWorkbook.Sheets("Сводка")
    If summarySheet Is Nothing Then
        Set summarySheet = ThisWorkbook.Sheets.Add
        summarySheet.Name = "Сводка"
    End If
    On Error GoTo 0

    ' Заголовки для столбцов
    For personIndex = 1 To 10
        summarySheet.Cells(1, personIndex).Value = "Сотрудник " & personIndex
    Next personIndex

    ' Итерация по каждому сотруднику
    For personIndex = 1 To 10
        Set ws = ThisWorkbook.Sheets("Лист" & personIndex) ' Листы называются Лист1, Лист2 и т.д.

        ' Итерация по месяцам
        For monthIndex = 1 To 3 ' Январь, Февраль, Март
            For rowIndex = 2 To 99 ' Допустим, данные начинаются со 2-й строки
                If ws.Cells(rowIndex, monthIndex).Interior.Color <> RGB(255, 255, 255) Then ' Проверяем, поменян ли цвет
                    summarySheet.Cells(rowIndex, personIndex).Interior.Color = ws.Cells(rowIndex, monthIndex).Interior.Color
                End If
            Next rowIndex
        Next monthIndex
    Next personIndex
End Sub

4. Объяснение кода

  • Создание сводного листа: Мы проверяем, существует ли лист «Сводка». Если нет, то создаем новый.
  • Заголовки: В первой строке сводного листа мы задаем заголовки для каждого сотрудника.
  • Циклы: Мы используем три вложенных цикла:
    • Внешний цикл проходит по каждому сотруднику.
    • Средний цикл проходит по месяцам.
    • Внутренний цикл проходит по строкам и проверяет, изменен ли цвет ячейки. Если цвет изменен, он копируется в сводный лист.

5. Заключение

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

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

Оцените материал
Добавить комментарий

Капча загружается...