#excel #vba
Вопрос:
Мой макет по сути выглядит так
Имя
Количество блоков = (ввод пользователем)
Блок 1
Содержание Содержание
Содержание Содержание
Блок 2
Содержание Содержание
Содержание Содержание
Где количество блоков, которые я добавил/удалил, зависит от количества блоков, введенных пользователем.
Я думаю о двух способах:
- имея 1 из этих блоков в качестве именованного диапазона и добавляя к нему по мере изменения#, не знаю, как с этим справиться, если число изменится на меньшее, и в этом случае мне придется удалить его.
- Добавление нескольких строк/столбцов одновременно, а затем последующее добавление содержимого, аналогичная проблема, описанная выше.
Искал, но не слишком уверен, что искать, так как я бы просто назвал это таблицей, для которой я должен добавлять/удалять строки, но таблицы/строки ссылаются на свою собственную вещь в Excel.
Изменить: Моя текущая реализация состоит в том, чтобы скопировать первый блок в виде диапазона, а затем вставить его N раз внизу, пока он не совпадет со значением в ячейке Количество блоков. Моя главная проблема заключается в незначительном изменении данных, когда я вставляю каждый диапазон в нижнюю часть. Например, содержимое должно быть в основном одинаковым, но некоторые конкретные части должны измениться (например, некоторые из них будут пустыми). Блок # в первой строке диапазона также должен увеличиваться на 1 каждый раз. Я также не знаю, как бы я удалил каждый блок с конца, если значение ячейки «Количество блоков» меньше, чем их в настоящее время.
К сожалению, я не могу дать слишком конкретную информацию, поскольку это считается конфиденциальными данными, но я больше ищу общий подход, к которому я должен стремиться, а не точную реализацию. Однако это фрагмент.
For i = 1 To 2 (Will later have to change this but its just to test for now) NextRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row 1 'get the Next Empty Row ws.Range("B" amp; NextRow).PasteSpecial xlPasteAll 'paste Next i
Редактировать: Более подробно о макете, так как мне не разрешается делать скриншот или что-то еще.
Каждый раздел выглядит так
A B C D (Столбцы)
Количество блоков : Ввод пользователем X(Первая строка, не должна повторяться, X определяет, сколько должно быть блоков)
Блок 1(занимает все 4 столбца), первая строка раздела.
Вопрос Ввод пользователя (Вопрос-столбец A, который длиннее остальных, ввод пользователя-B и C. Столбец D-это статическая единица измерения (дюймы). Строка 2
Вопрос 2…. Строка 3
Вопрос 3… (2 и 3 имеют одинаковый формат с 1) Строка 4 Ответы 1-3 суммируются в строку 5
Теперь Повторите
Блок 2…
Вопрос, введенный пользователем (Вопрос остается тем же, но пользовательский ввод снова должен быть пустым, а не значением из скопированного диапазона, который является блоком 1)
и т.д…
В самом конце таблицы все значения последних строк (например, строка 5) каждого предыдущего блока суммируются.
Комментарии:
1. Отредактировал исходный пост для более подробной информации. Это основная часть, которая вставляет каждый блок/секцию. В основном ищу общий подход к тому, иду ли я вообще по правильному пути или есть какой-то способ просто использовать более простой тип команды вставить строку, который вставил бы весь раздел, который мне нужен, в конце моей таблицы, созданной вручную.
For i = 1 To 2 (Will later have to change this but its just to test for now) NextRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row 1 'get the Next Empty Row ws.Range("B" amp; NextRow).PasteSpecial xlPasteAll 'paste Next i