Вопрос или проблема
Это скриншот примера, к которому я обращаюсь позже в посте.
Привет! Я уверен, что это возможно. Хотя я и думаю, что понимаю основные функции Excel, у меня нет опыта, чтобы справиться с этим самостоятельно. Я видел этот пост и думаю, что он содержит несколько полезных рекомендаций для того, что я пытаюсь сделать, но недостаточно, чтобы разобраться самостоятельно.
Суть:
Я хочу, чтобы кто-то заполнил 2 таблицы, в которых запрашивается основная информация, а затем нажал на кнопку, создающую другую таблицу на другом листе. Размеры таблицы будут зависеть от информации, предоставленной в предыдущих таблицах, а ячейки в первых 2 столбцах будут автоматически заполняться на основе информации из предыдущих таблиц.
Подробности/Уточнения:
TableA и TableB имеют по 2 колонки. Число строк зависит от того, что вводит пользователь. TableA показывает количество “Комнат”, которые используются, и сколько “Активностей” в каждой комнате. TableB показывает, сколько “Типов участников” существует и сколько каждого типа. TableC, которая также состоит из 2 колонок и может или не может быть нужна, подводит итог некоторой информации из 2 таблиц.
После того как пользователь заполнит таблицы A и B (и таблица C будет заполнена), я хотел бы, чтобы они могли нажать кнопку, чтобы создать четвертую таблицу, которую я назову Основной таблицей, на новом листе.
Количество строк в Основной таблице будет равно количеству “Активностей” (строка 2, колонка 2 таблицы C) плюс 1 для заголовка. Количество столбцов в Основной таблице будет равно количеству “Типов участников” (строка 3, колонка 2 таблицы C) плюс 3 для колонок в начале для обозначения “Названия комнаты”, “Номер активности” и “Комната-Активность”.
Заголовок первого столбца Основной таблицы будет “Название комнаты”. Строки будут заполнены названиями комнат, которые предоставил пользователь в таблице A. Количество строк с конкретным названием комнаты будет определяться количеством “Активностей” в этой комнате. В примере таблица A говорит, что “Смит” имеет 3 активности. Таким образом, Основная таблица будет иметь 3 строки, в которых в первом столбце будет написано “Смит”. Соответственно, 1 строка будет с “Родригесом” и 2 строки будут с “Уорнером”, так как у них соответственно 1 и 2 активности.
Заголовок второго столбца Основной таблицы будет “Номер активности”. Строки будут содержать номера, которые будут увеличиваться на 1 в зависимости от количества активностей в комнате. В примере “Смит” имеет 3 активности, поэтому в колонке 2 в первой строке “Смит” будет “1”, в колонке 2 во второй строке “Смит” будет “2”, а в колонке 2 в третьей строке “Смит” будет “3”.
Заголовок третьего столбца Основной таблицы будет “Комната-Активность”. Строки будут объединять информацию из первых 2 колонок следующим образом: Колонка 1 & “-” & Колонка 2. В примере строка 1 будет “Смит-1”.
Заголовок четвертого столбца Основной таблицы будет тем значением, которое в первой строке первого столбца таблицы B. Строки будут заполнены пользователем.
Заголовок пятого столбца Основной таблицы будет тем значением, что во второй строке первого столбца таблицы B. Строки будут заполнены пользователем.
Заголовки для столбца X Основной таблицы будут значениями, что в строке X-3 первого столбца таблицы B. Строки будут заполнены пользователем.
В примере, если в таблицу B добавляется третий “Тип участника” “Студент”, то когда Основная таблица будет создана, будет создан шестой столбец с заголовком “Студент”.
Ответ или решение
Создание таблицы, зависящей от других таблиц, в Excel
Вы столкнулись с задачей, которая может быть реализована с помощью Excel, используя его мощные функции и макросы VBA. В этом ответе я подробно объясню, как создать таблицу (Главную таблицу), размеры и содержимое которой зависят от информации, введенной в две другие таблицы (Таблица A и Таблица B), а также как обеспечить автоматическое заполнение данных.
Структура таблиц
- Таблица A: Содержит информацию о "Комнатах" и количестве "Деятельностей" в каждой комнате.
- Таблица B: Содержит информацию о "Типах участников" и количестве каждого типа.
- Таблица C: Служит для суммирования информации из Таблиц A и B, автоматические значения для дальнейшего использования.
- Главная таблица: Итоговая таблица, которая создается на основе данных из других таблиц.
Этапы создания Главной таблицы
Этап 1: Подготовка данных
Процесс начинается с заполнения пользователем данных в Таблицы A и B. Убедитесь, что у вас есть четко определенные области для этих таблиц, чтобы они могли динамически изменяться.
Этап 2: Создание макроса VBA
Следующим шагом необходимо создать макрос, который будет генерировать Главную таблицу на основе введенных данных. Вот основные шаги для создания макроса:
-
Откройте редактор VBA:
- Нажмите
ALT + F11
в Excel для открытия редактора.
- Нажмите
-
Создайте новый модуль:
- В редакторе VBA щелкните правой кнопкой мыши на проекте и выберите "Insert" → "Module".
-
Скопируйте и вставьте следующий код:
Sub CreateMainTable()
Dim wsA As Worksheet, wsB As Worksheet, wsC As Worksheet, wsMain As Worksheet
Dim lastRowA As Long, lastRowB As Long, lastRowC As Long
Dim r As Long, c As Long, activity As Long, rowMain As Long
Dim roomName As String, participantType As String
Dim numActivities As Long, numParticipantTypes As Long
' Установите ссылки на листы
Set wsA = ThisWorkbook.Sheets("ТаблицаA")
Set wsB = ThisWorkbook.Sheets("ТаблицаB")
Set wsC = ThisWorkbook.Sheets("ТаблицаC")
' Создайте новый лист для Главной таблицы
Set wsMain = ThisWorkbook.Sheets.Add
wsMain.Name = "Главная таблица"
' Получите количество строк и значений
lastRowA = wsA.Cells(wsA.Rows.Count, 1).End(xlUp).Row
lastRowB = wsB.Cells(wsB.Rows.Count, 1).End(xlUp).Row
lastRowC = wsC.Cells(wsC.Rows.Count, 1).End(xlUp).Row
' Заголовки для главной таблицы
wsMain.Cells(1, 1).Value = "Room Name"
wsMain.Cells(1, 2).Value = "Activity #"
wsMain.Cells(1, 3).Value = "Room-Activity"
' Заполнение заголовков для типов участников
For c = 1 To lastRowB - 1
wsMain.Cells(1, c + 3).Value = wsB.Cells(c + 1, 1).Value
Next c
rowMain = 2 ' Начинаем со второй строки для заполнения данных
' Заполнение главной таблицы данными
For r = 2 To lastRowA
roomName = wsA.Cells(r, 1).Value
numActivities = wsA.Cells(r, 2).Value
For activity = 1 To numActivities
wsMain.Cells(rowMain, 1).Value = roomName
wsMain.Cells(rowMain, 2).Value = activity
wsMain.Cells(rowMain, 3).Value = roomName & "-" & activity
rowMain = rowMain + 1
Next activity
Next r
' Учитывайте всех участников
For c = 1 To lastRowB - 1
For r = 2 To (lastRowA + 1) * 3 ' Приблизительное количество строк
participantType = wsB.Cells(c + 1, 1).Value
wsMain.Cells(r, c + 3).Value = "" ' Здесь пользователь будет вводить данные
Next r
Next c
MsgBox "Главная таблица успешно создана!"
End Sub
Этап 3: Запуск макроса
Теперь вам нужно установить кнопку на вашем пользовательском интерфейсе Excel для запуска этого макроса. Это можно сделать следующим образом:
- На вкладке "Разработчик" выберите "Вставить" и выберите "Кнопка".
- Нарисуйте кнопку на листе и привяжите ее к макросу
CreateMainTable
. - Теперь пользователи смогут кликнуть на кнопку, и Главная таблица будет создана автоматически.
Заключение
Создание динамически зависящей таблицы в Excel может быть выполнено с помощью макросов VBA, что значительно упрощает процесс работы с данными. Убедитесь, что пользователи правильно вводят информацию в Таблицы A и B, так как результат в Главной таблице будет полностью зависеть от введенных данных. Этот подход позволяет автоматизировать и упростить процесс анализа и управления данными в вашем проекте.